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 }`)