func waitForNetworkPortDelete(networkingClient *gophercloud.ServiceClient, portId string) resource.StateRefreshFunc { return func() (interface{}, string, error) { log.Printf("[DEBUG] Attempting to delete OpenStack Neutron Port %s", portId) p, err := ports.Get(networkingClient, portId).Extract() if err != nil { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) if !ok { return p, "ACTIVE", err } if errCode.Actual == 404 { log.Printf("[DEBUG] Successfully deleted OpenStack Port %s", portId) return p, "DELETED", nil } } err = ports.Delete(networkingClient, portId).ExtractErr() if err != nil { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) if !ok { return p, "ACTIVE", err } if errCode.Actual == 404 { log.Printf("[DEBUG] Successfully deleted OpenStack Port %s", portId) return p, "DELETED", nil } } log.Printf("[DEBUG] OpenStack Port %s still active.\n", portId) return p, "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 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) }
// Delete accepts a unique ID and deletes the port associated with it. func Delete(c *gophercloud.ServiceClient, networkID string) os.DeleteResult { return os.Delete(c, networkID) }
func deletePort(t *testing.T, portID string) { t.Logf("Deleting port %s", portID) ports.Delete(base.Client, portID) }