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 { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) if !ok { return s, "ACTIVE", err } if errCode.Actual == 404 { log.Printf("[DEBUG] Successfully deleted OpenStack Subnet %s", subnetId) return s, "DELETED", nil } } err = subnets.Delete(networkingClient, subnetId).ExtractErr() if err != nil { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) if !ok { return s, "ACTIVE", err } if errCode.Actual == 404 { log.Printf("[DEBUG] Successfully deleted OpenStack Subnet %s", subnetId) return s, "DELETED", nil } } log.Printf("[DEBUG] OpenStack Subnet %s still active.\n", subnetId) return s, "ACTIVE", nil } }
func TestPortCRUD(t *testing.T) { Setup(t) defer Teardown() // Setup network t.Log("Setting up network") networkID, err := createNetwork() th.AssertNoErr(t, err) defer networks.Delete(Client, networkID) // Setup subnet t.Logf("Setting up subnet on network %s", networkID) subnetID, err := createSubnet(networkID) th.AssertNoErr(t, err) defer subnets.Delete(Client, subnetID) // Create port t.Logf("Create port based on subnet %s", subnetID) portID := createPort(t, networkID, subnetID) // List ports t.Logf("Listing all ports") listPorts(t) // Get port if portID == "" { t.Fatalf("In order to retrieve a port, the portID must be set") } p, err := ports.Get(Client, portID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, p.ID, portID) // Update port updateOpts := ports.UpdateOpts{ Name: "new_port_name", AllowedAddressPairs: []ports.AddressPair{ ports.AddressPair{IPAddress: "192.168.199.201"}, }, } p, err = ports.Update(Client, portID, updateOpts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, p.Name, "new_port_name") updatedPort, err := ports.Get(Client, portID).Extract() th.AssertEquals(t, updatedPort.AllowedAddressPairs[0].IPAddress, "192.168.199.201") // Delete port res := ports.Delete(Client, portID) th.AssertNoErr(t, res.Err) }
func resourceNetworkingSubnetV2Delete(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) } err = subnets.Delete(networkingClient, d.Id()).ExtractErr() if err != nil { return fmt.Errorf("Error deleting OpenStack Neutron Subnet: %s", err) } d.SetId("") return nil }
func TestPortBinding(t *testing.T) { base.Setup(t) defer base.Teardown() // Setup network t.Log("Setting up network") networkID, err := createNetwork() th.AssertNoErr(t, err) defer networks.Delete(base.Client, networkID) // Setup subnet t.Logf("Setting up subnet on network %s", networkID) subnetID, err := createSubnet(networkID) th.AssertNoErr(t, err) defer subnets.Delete(base.Client, subnetID) // Create port t.Logf("Create port based on subnet %s", subnetID) hostID := "localhost" portID := createPort(t, networkID, subnetID, hostID) // Get port if portID == "" { t.Fatalf("In order to retrieve a port, the portID must be set") } p, err := portsbinding.Get(base.Client, portID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, p.ID, portID) th.AssertEquals(t, p.HostID, hostID) // Update port newHostID := "openstack" updateOpts := portsbinding.UpdateOpts{ HostID: newHostID, } p, err = portsbinding.Update(base.Client, portID, updateOpts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, p.HostID, newHostID) // List ports t.Logf("Listing all ports") listPorts(t) // Delete port res := ports.Delete(base.Client, portID) th.AssertNoErr(t, res.Err) }
func TestCRUD(t *testing.T) { Setup(t) defer Teardown() // Setup network t.Log("Setting up network") n, err := networks.Create(Client, networks.CreateOpts{Name: "tmp_network", AdminStateUp: networks.Up}).Extract() th.AssertNoErr(t, err) networkID := n.ID defer networks.Delete(Client, networkID) // Create subnet t.Log("Create subnet") enable := false opts := subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, } s, err := subnets.Create(Client, opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.NetworkID, networkID) th.AssertEquals(t, s.CIDR, "192.168.199.0/24") th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, false) subnetID := s.ID // Get subnet t.Log("Getting subnet") s, err = subnets.Get(Client, subnetID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.ID, subnetID) // Update subnet t.Log("Update subnet") s, err = subnets.Update(Client, subnetID, subnets.UpdateOpts{Name: "new_subnet_name"}).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "new_subnet_name") // Delete subnet t.Log("Delete subnet") res := subnets.Delete(Client, subnetID) th.AssertNoErr(t, res.Err) }
func TestSubnetCRUD(t *testing.T) { Setup(t) defer Teardown() // Setup network t.Log("Setting up network") n, err := networks.Create(Client, networks.CreateOpts{Name: "tmp_network", AdminStateUp: networks.Up}).Extract() th.AssertNoErr(t, err) networkID := n.ID defer networks.Delete(Client, networkID) // Create subnet t.Log("Create subnet") enable := false opts := subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, } s, err := subnets.Create(Client, opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.NetworkID, networkID) th.AssertEquals(t, s.CIDR, "192.168.199.0/24") th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, false) th.AssertEquals(t, s.GatewayIP, "192.168.199.1") subnetID := s.ID // Get subnet t.Log("Getting subnet") s, err = subnets.Get(Client, subnetID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.ID, subnetID) // Update subnet t.Log("Update subnet") s, err = subnets.Update(Client, subnetID, subnets.UpdateOpts{Name: "new_subnet_name"}).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "new_subnet_name") // Delete subnet t.Log("Delete subnet") res := subnets.Delete(Client, subnetID) th.AssertNoErr(t, res.Err) // Create subnet with no gateway t.Log("Create subnet with no gateway") opts = subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, NoGateway: true, } s, err = subnets.Create(Client, opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.NetworkID, networkID) th.AssertEquals(t, s.CIDR, "192.168.199.0/24") th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, false) th.AssertEquals(t, s.GatewayIP, "") subnetID = s.ID // Get subnet t.Log("Getting subnet with no gateway") s, err = subnets.Get(Client, subnetID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.ID, subnetID) // Update subnet t.Log("Update subnet with no gateway") s, err = subnets.Update(Client, subnetID, subnets.UpdateOpts{Name: "new_subnet_name"}).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "new_subnet_name") // Delete subnet t.Log("Delete subnet with no gateway") res = subnets.Delete(Client, subnetID) th.AssertNoErr(t, res.Err) // Create subnet with invalid gateway configuration t.Log("Create subnet with invalid gateway configuration") opts = subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, NoGateway: true, GatewayIP: "192.168.199.1", } _, err = subnets.Create(Client, opts).Extract() if err == nil { t.Fatalf("Expected an error, got none") } }
// Delete accepts a unique ID and deletes the subnet associated with it. func Delete(c *gophercloud.ServiceClient, networkID string) os.DeleteResult { return os.Delete(c, networkID) }