github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/openstack/resource_openstack_networking_subnet_v2_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/gophercloud/gophercloud/openstack/networking/v2/subnets" 11 ) 12 13 func TestAccNetworkingV2Subnet_basic(t *testing.T) { 14 var subnet subnets.Subnet 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccCheckNetworkingV2SubnetDestroy, 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccNetworkingV2Subnet_basic, 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet), 25 resource.TestCheckResourceAttr( 26 "openstack_networking_subnet_v2.subnet_1", "allocation_pools.0.start", "192.168.199.100"), 27 ), 28 }, 29 resource.TestStep{ 30 Config: testAccNetworkingV2Subnet_update, 31 Check: resource.ComposeTestCheckFunc( 32 resource.TestCheckResourceAttr( 33 "openstack_networking_subnet_v2.subnet_1", "name", "subnet_1"), 34 resource.TestCheckResourceAttr( 35 "openstack_networking_subnet_v2.subnet_1", "gateway_ip", "192.168.199.1"), 36 resource.TestCheckResourceAttr( 37 "openstack_networking_subnet_v2.subnet_1", "enable_dhcp", "true"), 38 resource.TestCheckResourceAttr( 39 "openstack_networking_subnet_v2.subnet_1", "allocation_pools.0.start", "192.168.199.150"), 40 ), 41 }, 42 }, 43 }) 44 } 45 46 func TestAccNetworkingV2Subnet_enableDHCP(t *testing.T) { 47 var subnet subnets.Subnet 48 49 resource.Test(t, resource.TestCase{ 50 PreCheck: func() { testAccPreCheck(t) }, 51 Providers: testAccProviders, 52 CheckDestroy: testAccCheckNetworkingV2SubnetDestroy, 53 Steps: []resource.TestStep{ 54 resource.TestStep{ 55 Config: testAccNetworkingV2Subnet_enableDHCP, 56 Check: resource.ComposeTestCheckFunc( 57 testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet), 58 resource.TestCheckResourceAttr( 59 "openstack_networking_subnet_v2.subnet_1", "enable_dhcp", "true"), 60 ), 61 }, 62 }, 63 }) 64 } 65 66 func TestAccNetworkingV2Subnet_disableDHCP(t *testing.T) { 67 var subnet subnets.Subnet 68 69 resource.Test(t, resource.TestCase{ 70 PreCheck: func() { testAccPreCheck(t) }, 71 Providers: testAccProviders, 72 CheckDestroy: testAccCheckNetworkingV2SubnetDestroy, 73 Steps: []resource.TestStep{ 74 resource.TestStep{ 75 Config: testAccNetworkingV2Subnet_disableDHCP, 76 Check: resource.ComposeTestCheckFunc( 77 testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet), 78 resource.TestCheckResourceAttr( 79 "openstack_networking_subnet_v2.subnet_1", "enable_dhcp", "false"), 80 ), 81 }, 82 }, 83 }) 84 } 85 86 func TestAccNetworkingV2Subnet_noGateway(t *testing.T) { 87 var subnet subnets.Subnet 88 89 resource.Test(t, resource.TestCase{ 90 PreCheck: func() { testAccPreCheck(t) }, 91 Providers: testAccProviders, 92 CheckDestroy: testAccCheckNetworkingV2SubnetDestroy, 93 Steps: []resource.TestStep{ 94 resource.TestStep{ 95 Config: testAccNetworkingV2Subnet_noGateway, 96 Check: resource.ComposeTestCheckFunc( 97 testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet), 98 resource.TestCheckResourceAttr( 99 "openstack_networking_subnet_v2.subnet_1", "gateway_ip", ""), 100 ), 101 }, 102 }, 103 }) 104 } 105 106 func TestAccNetworkingV2Subnet_impliedGateway(t *testing.T) { 107 var subnet subnets.Subnet 108 109 resource.Test(t, resource.TestCase{ 110 PreCheck: func() { testAccPreCheck(t) }, 111 Providers: testAccProviders, 112 CheckDestroy: testAccCheckNetworkingV2SubnetDestroy, 113 Steps: []resource.TestStep{ 114 resource.TestStep{ 115 Config: testAccNetworkingV2Subnet_impliedGateway, 116 Check: resource.ComposeTestCheckFunc( 117 testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet), 118 resource.TestCheckResourceAttr( 119 "openstack_networking_subnet_v2.subnet_1", "gateway_ip", "192.168.199.1"), 120 ), 121 }, 122 }, 123 }) 124 } 125 126 func TestAccNetworkingV2Subnet_timeout(t *testing.T) { 127 var subnet subnets.Subnet 128 129 resource.Test(t, resource.TestCase{ 130 PreCheck: func() { testAccPreCheck(t) }, 131 Providers: testAccProviders, 132 CheckDestroy: testAccCheckNetworkingV2SubnetDestroy, 133 Steps: []resource.TestStep{ 134 resource.TestStep{ 135 Config: testAccNetworkingV2Subnet_timeout, 136 Check: resource.ComposeTestCheckFunc( 137 testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet), 138 ), 139 }, 140 }, 141 }) 142 } 143 144 func testAccCheckNetworkingV2SubnetDestroy(s *terraform.State) error { 145 config := testAccProvider.Meta().(*Config) 146 networkingClient, err := config.networkingV2Client(OS_REGION_NAME) 147 if err != nil { 148 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 149 } 150 151 for _, rs := range s.RootModule().Resources { 152 if rs.Type != "openstack_networking_subnet_v2" { 153 continue 154 } 155 156 _, err := subnets.Get(networkingClient, rs.Primary.ID).Extract() 157 if err == nil { 158 return fmt.Errorf("Subnet still exists") 159 } 160 } 161 162 return nil 163 } 164 165 func testAccCheckNetworkingV2SubnetExists(n string, subnet *subnets.Subnet) resource.TestCheckFunc { 166 return func(s *terraform.State) error { 167 rs, ok := s.RootModule().Resources[n] 168 if !ok { 169 return fmt.Errorf("Not found: %s", n) 170 } 171 172 if rs.Primary.ID == "" { 173 return fmt.Errorf("No ID is set") 174 } 175 176 config := testAccProvider.Meta().(*Config) 177 networkingClient, err := config.networkingV2Client(OS_REGION_NAME) 178 if err != nil { 179 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 180 } 181 182 found, err := subnets.Get(networkingClient, rs.Primary.ID).Extract() 183 if err != nil { 184 return err 185 } 186 187 if found.ID != rs.Primary.ID { 188 return fmt.Errorf("Subnet not found") 189 } 190 191 *subnet = *found 192 193 return nil 194 } 195 } 196 197 const testAccNetworkingV2Subnet_basic = ` 198 resource "openstack_networking_network_v2" "network_1" { 199 name = "network_1" 200 admin_state_up = "true" 201 } 202 203 resource "openstack_networking_subnet_v2" "subnet_1" { 204 cidr = "192.168.199.0/24" 205 network_id = "${openstack_networking_network_v2.network_1.id}" 206 207 allocation_pools { 208 start = "192.168.199.100" 209 end = "192.168.199.200" 210 } 211 } 212 ` 213 214 const testAccNetworkingV2Subnet_update = ` 215 resource "openstack_networking_network_v2" "network_1" { 216 name = "network_1" 217 admin_state_up = "true" 218 } 219 220 resource "openstack_networking_subnet_v2" "subnet_1" { 221 name = "subnet_1" 222 cidr = "192.168.199.0/24" 223 gateway_ip = "192.168.199.1" 224 network_id = "${openstack_networking_network_v2.network_1.id}" 225 226 allocation_pools { 227 start = "192.168.199.150" 228 end = "192.168.199.200" 229 } 230 } 231 ` 232 233 const testAccNetworkingV2Subnet_enableDHCP = ` 234 resource "openstack_networking_network_v2" "network_1" { 235 name = "network_1" 236 admin_state_up = "true" 237 } 238 239 resource "openstack_networking_subnet_v2" "subnet_1" { 240 name = "subnet_1" 241 cidr = "192.168.199.0/24" 242 gateway_ip = "192.168.199.1" 243 enable_dhcp = true 244 network_id = "${openstack_networking_network_v2.network_1.id}" 245 } 246 ` 247 248 const testAccNetworkingV2Subnet_disableDHCP = ` 249 resource "openstack_networking_network_v2" "network_1" { 250 name = "network_1" 251 admin_state_up = "true" 252 } 253 254 resource "openstack_networking_subnet_v2" "subnet_1" { 255 name = "subnet_1" 256 cidr = "192.168.199.0/24" 257 enable_dhcp = false 258 network_id = "${openstack_networking_network_v2.network_1.id}" 259 } 260 ` 261 262 const testAccNetworkingV2Subnet_noGateway = ` 263 resource "openstack_networking_network_v2" "network_1" { 264 name = "network_1" 265 admin_state_up = "true" 266 } 267 268 resource "openstack_networking_subnet_v2" "subnet_1" { 269 name = "subnet_1" 270 cidr = "192.168.199.0/24" 271 no_gateway = true 272 network_id = "${openstack_networking_network_v2.network_1.id}" 273 } 274 ` 275 276 const testAccNetworkingV2Subnet_impliedGateway = ` 277 resource "openstack_networking_network_v2" "network_1" { 278 name = "network_1" 279 admin_state_up = "true" 280 } 281 resource "openstack_networking_subnet_v2" "subnet_1" { 282 name = "subnet_1" 283 cidr = "192.168.199.0/24" 284 network_id = "${openstack_networking_network_v2.network_1.id}" 285 } 286 ` 287 288 const testAccNetworkingV2Subnet_timeout = ` 289 resource "openstack_networking_network_v2" "network_1" { 290 name = "network_1" 291 admin_state_up = "true" 292 } 293 294 resource "openstack_networking_subnet_v2" "subnet_1" { 295 cidr = "192.168.199.0/24" 296 network_id = "${openstack_networking_network_v2.network_1.id}" 297 298 allocation_pools { 299 start = "192.168.199.100" 300 end = "192.168.199.200" 301 } 302 303 timeouts { 304 create = "5m" 305 delete = "5m" 306 } 307 } 308 `