func testAccCheckNetworkingV2SubnetExists(n string, subnet *subnets.Subnet) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { return fmt.Errorf("Not found: %s", n) } if rs.Primary.ID == "" { return fmt.Errorf("No ID is set") } config := testAccProvider.Meta().(*Config) networkingClient, err := config.networkingV2Client(OS_REGION_NAME) if err != nil { return fmt.Errorf("Error creating OpenStack networking client: %s", err) } found, err := subnets.Get(networkingClient, rs.Primary.ID).Extract() if err != nil { return err } if found.ID != rs.Primary.ID { return fmt.Errorf("Subnet not found") } *subnet = *found return nil } }
func waitForSubnetDelete(networkingClient *gophercloud.ServiceClient, subnetId string) resource.StateRefreshFunc { return func() (interface{}, string, error) { log.Printf("[DEBUG] Attempting to delete OpenStack Subnet %s.\n", subnetId) s, err := subnets.Get(networkingClient, subnetId).Extract() if err != nil { if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Subnet %s", subnetId) return s, "DELETED", nil } return s, "ACTIVE", err } err = subnets.Delete(networkingClient, subnetId).ExtractErr() if err != nil { if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Subnet %s", subnetId) return s, "DELETED", nil } if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok { if errCode.Actual == 409 { return s, "ACTIVE", nil } } return s, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Subnet %s still active.\n", subnetId) return s, "ACTIVE", nil } }
func resourceNetworkingSubnetV2Read(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) networkingClient, err := config.networkingV2Client(d.Get("region").(string)) if err != nil { return fmt.Errorf("Error creating OpenStack networking client: %s", err) } s, err := subnets.Get(networkingClient, d.Id()).Extract() if err != nil { return CheckDeleted(d, err, "subnet") } log.Printf("[DEBUG] Retrieved Subnet %s: %#v", d.Id(), s) d.Set("network_id", s.NetworkID) d.Set("cidr", s.CIDR) d.Set("ip_version", s.IPVersion) d.Set("name", s.Name) d.Set("tenant_id", s.TenantID) d.Set("allocation_pools", s.AllocationPools) d.Set("gateway_ip", s.GatewayIP) d.Set("dns_nameservers", s.DNSNameservers) d.Set("host_routes", s.HostRoutes) d.Set("enable_dhcp", s.EnableDHCP) d.Set("network_id", s.NetworkID) return nil }
// Get provider subnet by id func (os *OpenStack) getProviderSubnet(osSubnetID string) (*provider.Subnet, error) { s, err := subnets.Get(os.network, osSubnetID).Extract() if err != nil { glog.Errorf("Get openstack subnet failed: %v", err) return nil, err } var routes []*provider.Route for _, r := range s.HostRoutes { route := provider.Route{ Nexthop: r.NextHop, DestinationCIDR: r.DestinationCIDR, } routes = append(routes, &route) } providerSubnet := provider.Subnet{ Uid: s.ID, Cidr: s.CIDR, Gateway: s.GatewayIP, Name: s.Name, Dnsservers: s.DNSNameservers, Routes: routes, } return &providerSubnet, nil }
func TestGet(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() th.Mux.HandleFunc("/v2.0/subnets/54d6f61d-db07-451c-9ab3-b9609b6b6f0b", func(w http.ResponseWriter, r *http.Request) { th.TestMethod(t, r, "GET") th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) w.Header().Add("Content-Type", "application/json") w.WriteHeader(http.StatusOK) fmt.Fprintf(w, ` { "subnet": { "name": "my_subnet", "enable_dhcp": true, "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22", "tenant_id": "4fd44f30292945e481c7b8a0c8908869", "dns_nameservers": [], "allocation_pools": [ { "start": "192.0.0.2", "end": "192.255.255.254" } ], "host_routes": [], "ip_version": 4, "gateway_ip": "192.0.0.1", "cidr": "192.0.0.0/8", "id": "54d6f61d-db07-451c-9ab3-b9609b6b6f0b" } } `) }) s, err := subnets.Get(fake.ServiceClient(), "54d6f61d-db07-451c-9ab3-b9609b6b6f0b").Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, true) th.AssertEquals(t, s.NetworkID, "d32019d3-bc6e-4319-9c1d-6722fc136a22") th.AssertEquals(t, s.TenantID, "4fd44f30292945e481c7b8a0c8908869") th.AssertDeepEquals(t, s.DNSNameservers, []string{}) th.AssertDeepEquals(t, s.AllocationPools, []subnets.AllocationPool{ { Start: "192.0.0.2", End: "192.255.255.254", }, }) th.AssertDeepEquals(t, s.HostRoutes, []subnets.HostRoute{}) th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.GatewayIP, "192.0.0.1") th.AssertEquals(t, s.CIDR, "192.0.0.0/8") th.AssertEquals(t, s.ID, "54d6f61d-db07-451c-9ab3-b9609b6b6f0b") }
func waitForSubnetActive(networkingClient *gophercloud.ServiceClient, subnetId string) resource.StateRefreshFunc { return func() (interface{}, string, error) { s, err := subnets.Get(networkingClient, subnetId).Extract() if err != nil { return nil, "", err } log.Printf("[DEBUG] OpenStack Neutron Subnet: %+v", s) return s, "ACTIVE", nil } }
func testAccCheckNetworkingV2SubnetDestroy(s *terraform.State) error { config := testAccProvider.Meta().(*Config) networkingClient, err := config.networkingV2Client(OS_REGION_NAME) if err != nil { return fmt.Errorf("Error creating OpenStack networking client: %s", err) } for _, rs := range s.RootModule().Resources { if rs.Type != "openstack_networking_subnet_v2" { continue } _, err := subnets.Get(networkingClient, rs.Primary.ID).Extract() if err == nil { return fmt.Errorf("Subnet still exists") } } return nil }
func TestSubnetCRUD(t *testing.T) { client, err := clients.NewNetworkV2Client() if err != nil { t.Fatalf("Unable to create a network client: %v", err) } // Create Network network, err := CreateNetwork(t, client) if err != nil { t.Fatalf("Unable to create network: %v", err) } defer DeleteNetwork(t, client, network.ID) // Create Subnet subnet, err := CreateSubnet(t, client, network.ID) if err != nil { t.Fatalf("Unable to create subnet: %v", err) } defer DeleteSubnet(t, client, subnet.ID) PrintSubnet(t, subnet) // Update Subnet newSubnetName := tools.RandomString("TESTACC-", 8) updateOpts := subnets.UpdateOpts{ Name: newSubnetName, } _, err = subnets.Update(client, subnet.ID, updateOpts).Extract() if err != nil { t.Fatalf("Unable to update subnet: %v", err) } // Get subnet newSubnet, err := subnets.Get(client, subnet.ID).Extract() if err != nil { t.Fatalf("Unable to get subnet: %v", err) } PrintSubnet(t, newSubnet) }
func resourceNetworkingSubnetV2Read(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) networkingClient, err := config.networkingV2Client(GetRegion(d)) if err != nil { return fmt.Errorf("Error creating OpenStack networking client: %s", err) } s, err := subnets.Get(networkingClient, d.Id()).Extract() if err != nil { return CheckDeleted(d, err, "subnet") } log.Printf("[DEBUG] Retrieved Subnet %s: %#v", d.Id(), s) d.Set("network_id", s.NetworkID) d.Set("cidr", s.CIDR) d.Set("ip_version", s.IPVersion) d.Set("name", s.Name) d.Set("tenant_id", s.TenantID) d.Set("gateway_ip", s.GatewayIP) d.Set("dns_nameservers", s.DNSNameservers) d.Set("host_routes", s.HostRoutes) d.Set("enable_dhcp", s.EnableDHCP) d.Set("network_id", s.NetworkID) // Set the allocation_pools var allocationPools []map[string]interface{} for _, v := range s.AllocationPools { pool := make(map[string]interface{}) pool["start"] = v.Start pool["end"] = v.End allocationPools = append(allocationPools, pool) } d.Set("allocation_pools", allocationPools) d.Set("region", GetRegion(d)) return nil }