github.com/ottenhoff/terraform@v0.7.0-rc1.0.20160607213102-ac2d195cc560/builtin/providers/openstack/resource_openstack_lb_pool_v1_test.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  
    10  	"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups"
    11  	"github.com/rackspace/gophercloud/openstack/compute/v2/servers"
    12  	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/monitors"
    13  	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/pools"
    14  	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/vips"
    15  	"github.com/rackspace/gophercloud/openstack/networking/v2/networks"
    16  	"github.com/rackspace/gophercloud/openstack/networking/v2/subnets"
    17  )
    18  
    19  func TestAccLBV1Pool_basic(t *testing.T) {
    20  	var pool pools.Pool
    21  
    22  	resource.Test(t, resource.TestCase{
    23  		PreCheck:     func() { testAccPreCheck(t) },
    24  		Providers:    testAccProviders,
    25  		CheckDestroy: testAccCheckLBV1PoolDestroy,
    26  		Steps: []resource.TestStep{
    27  			resource.TestStep{
    28  				Config: testAccLBV1Pool_basic,
    29  				Check: resource.ComposeTestCheckFunc(
    30  					testAccCheckLBV1PoolExists(t, "openstack_lb_pool_v1.pool_1", &pool),
    31  					resource.TestCheckResourceAttr("openstack_lb_pool_v1.pool_1", "lb_provider", "haproxy"),
    32  				),
    33  			},
    34  			resource.TestStep{
    35  				Config: testAccLBV1Pool_update,
    36  				Check: resource.ComposeTestCheckFunc(
    37  					resource.TestCheckResourceAttr("openstack_lb_pool_v1.pool_1", "name", "tf_test_lb_pool_updated"),
    38  				),
    39  			},
    40  		},
    41  	})
    42  }
    43  
    44  func TestAccLBV1Pool_fullstack(t *testing.T) {
    45  	var instance1, instance2 servers.Server
    46  	var monitor monitors.Monitor
    47  	var network networks.Network
    48  	var pool pools.Pool
    49  	var secgroup secgroups.SecurityGroup
    50  	var subnet subnets.Subnet
    51  	var vip vips.VirtualIP
    52  
    53  	resource.Test(t, resource.TestCase{
    54  		PreCheck:     func() { testAccPreCheck(t) },
    55  		Providers:    testAccProviders,
    56  		CheckDestroy: testAccCheckLBV1PoolDestroy,
    57  		Steps: []resource.TestStep{
    58  			resource.TestStep{
    59  				Config: testAccLBV1Pool_fullstack,
    60  				Check: resource.ComposeTestCheckFunc(
    61  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.network_1", &network),
    62  					testAccCheckNetworkingV2SubnetExists(t, "openstack_networking_subnet_v2.subnet_1", &subnet),
    63  					testAccCheckComputeV2SecGroupExists(t, "openstack_compute_secgroup_v2.secgroup_1", &secgroup),
    64  					testAccCheckComputeV2InstanceExists(t, "openstack_compute_instance_v2.instance_1", &instance1),
    65  					testAccCheckComputeV2InstanceExists(t, "openstack_compute_instance_v2.instance_2", &instance2),
    66  					testAccCheckLBV1PoolExists(t, "openstack_lb_pool_v1.pool_1", &pool),
    67  					testAccCheckLBV1MonitorExists(t, "openstack_lb_monitor_v1.monitor_1", &monitor),
    68  					testAccCheckLBV1VIPExists(t, "openstack_lb_vip_v1.vip_1", &vip),
    69  				),
    70  			},
    71  		},
    72  	})
    73  }
    74  
    75  func testAccCheckLBV1PoolDestroy(s *terraform.State) error {
    76  	config := testAccProvider.Meta().(*Config)
    77  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    78  	if err != nil {
    79  		return fmt.Errorf("(testAccCheckLBV1PoolDestroy) Error creating OpenStack networking client: %s", err)
    80  	}
    81  
    82  	for _, rs := range s.RootModule().Resources {
    83  		if rs.Type != "openstack_lb_pool_v1" {
    84  			continue
    85  		}
    86  
    87  		_, err := pools.Get(networkingClient, rs.Primary.ID).Extract()
    88  		if err == nil {
    89  			return fmt.Errorf("LB Pool still exists")
    90  		}
    91  	}
    92  
    93  	return nil
    94  }
    95  
    96  func testAccCheckLBV1PoolExists(t *testing.T, n string, pool *pools.Pool) resource.TestCheckFunc {
    97  	return func(s *terraform.State) error {
    98  		rs, ok := s.RootModule().Resources[n]
    99  		if !ok {
   100  			return fmt.Errorf("Not found: %s", n)
   101  		}
   102  
   103  		if rs.Primary.ID == "" {
   104  			return fmt.Errorf("No ID is set")
   105  		}
   106  
   107  		config := testAccProvider.Meta().(*Config)
   108  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   109  		if err != nil {
   110  			return fmt.Errorf("(testAccCheckLBV1PoolExists) Error creating OpenStack networking client: %s", err)
   111  		}
   112  
   113  		found, err := pools.Get(networkingClient, rs.Primary.ID).Extract()
   114  		if err != nil {
   115  			return err
   116  		}
   117  
   118  		if found.ID != rs.Primary.ID {
   119  			return fmt.Errorf("Pool not found")
   120  		}
   121  
   122  		*pool = *found
   123  
   124  		return nil
   125  	}
   126  }
   127  
   128  var testAccLBV1Pool_basic = fmt.Sprintf(`
   129    resource "openstack_networking_network_v2" "network_1" {
   130      region = "%s"
   131      name = "network_1"
   132      admin_state_up = "true"
   133    }
   134  
   135    resource "openstack_networking_subnet_v2" "subnet_1" {
   136      region = "%s"
   137      network_id = "${openstack_networking_network_v2.network_1.id}"
   138      cidr = "192.168.199.0/24"
   139      ip_version = 4
   140    }
   141  
   142    resource "openstack_lb_pool_v1" "pool_1" {
   143      region = "%s"
   144      name = "tf_test_lb_pool"
   145      protocol = "HTTP"
   146      subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   147      lb_method = "ROUND_ROBIN"
   148      lb_provider = "haproxy"
   149    }`,
   150  	OS_REGION_NAME, OS_REGION_NAME, OS_REGION_NAME)
   151  
   152  var testAccLBV1Pool_update = fmt.Sprintf(`
   153    resource "openstack_networking_network_v2" "network_1" {
   154      region = "%s"
   155      name = "network_1"
   156      admin_state_up = "true"
   157    }
   158  
   159    resource "openstack_networking_subnet_v2" "subnet_1" {
   160      region = "%s"
   161      network_id = "${openstack_networking_network_v2.network_1.id}"
   162      cidr = "192.168.199.0/24"
   163      ip_version = 4
   164    }
   165  
   166    resource "openstack_lb_pool_v1" "pool_1" {
   167      region = "%s"
   168      name = "tf_test_lb_pool_updated"
   169      protocol = "HTTP"
   170      subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   171      lb_method = "ROUND_ROBIN"
   172    }`,
   173  	OS_REGION_NAME, OS_REGION_NAME, OS_REGION_NAME)
   174  
   175  var testAccLBV1Pool_fullstack = fmt.Sprintf(`
   176  	resource "openstack_networking_network_v2" "network_1" {
   177  		name = "network_1"
   178  		admin_state_up = "true"
   179  	}
   180  
   181  	resource "openstack_networking_subnet_v2" "subnet_1" {
   182  		network_id = "${openstack_networking_network_v2.network_1.id}"
   183  		cidr = "192.168.199.0/24"
   184  		ip_version = 4
   185  	}
   186  
   187  	resource "openstack_compute_secgroup_v2" "secgroup_1" {
   188  		name = "secgroup_1"
   189  		description = "Rules for secgroup_1"
   190  
   191  		rule {
   192  			from_port = -1
   193  			to_port = -1
   194  			ip_protocol = "icmp"
   195  			cidr = "0.0.0.0/0"
   196  		}
   197  
   198  		rule {
   199  			from_port = 80
   200  			to_port = 80
   201  			ip_protocol = "tcp"
   202  			cidr = "0.0.0.0/0"
   203  		}
   204  	}
   205  
   206  	resource "openstack_compute_instance_v2" "instance_1" {
   207  		name = "instance_1"
   208  		security_groups = ["default", "${openstack_compute_secgroup_v2.secgroup_1.name}"]
   209  		network {
   210  			uuid = "${openstack_networking_network_v2.network_1.id}"
   211  		}
   212  	}
   213  
   214  	resource "openstack_compute_instance_v2" "instance_2" {
   215  		name = "instance_2"
   216  		security_groups = ["default", "${openstack_compute_secgroup_v2.secgroup_1.name}"]
   217  		network {
   218  			uuid = "${openstack_networking_network_v2.network_1.id}"
   219  		}
   220  	}
   221  
   222  	resource "openstack_lb_monitor_v1" "monitor_1" {
   223  		type = "TCP"
   224  		delay = 30
   225  		timeout = 5
   226  		max_retries = 3
   227  		admin_state_up = "true"
   228  	}
   229  
   230  	resource "openstack_lb_pool_v1" "pool_1" {
   231  		name = "pool_1"
   232  		protocol = "TCP"
   233  		subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   234  		lb_method = "ROUND_ROBIN"
   235  		monitor_ids = ["${openstack_lb_monitor_v1.monitor_1.id}"]
   236  	}
   237  
   238  	resource "openstack_lb_member_v1" "member_1" {
   239  		pool_id = "${openstack_lb_pool_v1.pool_1.id}"
   240  		address = "${openstack_compute_instance_v2.instance_1.access_ip_v4}"
   241  		port = 80
   242  		admin_state_up = true
   243  	}
   244  
   245  	resource "openstack_lb_member_v1" "member_2" {
   246  		pool_id = "${openstack_lb_pool_v1.pool_1.id}"
   247  		address = "${openstack_compute_instance_v2.instance_2.access_ip_v4}"
   248  		port = 80
   249  		admin_state_up = true
   250  	}
   251  
   252  	resource "openstack_lb_vip_v1" "vip_1" {
   253  		name = "vip_1"
   254  		subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   255  		protocol = "TCP"
   256  		port = 80
   257  		pool_id = "${openstack_lb_pool_v1.pool_1.id}"
   258  		admin_state_up = true
   259  	}`)