// getAvailableFloatingIP gets or creates an unused floating ip func (p *openstackp) getAvailableFloatingIP() (floatingIP string, err error) { // find any existing floating ips allFloatingIPPages, err := floatingips.List(p.computeClient).AllPages() if err != nil { return } allFloatingIPs, err := floatingips.ExtractFloatingIPs(allFloatingIPPages) if err != nil { return } for _, fIP := range allFloatingIPs { if fIP.InstanceID == "" { floatingIP = fIP.IP break } } if floatingIP == "" { // create a new one fIP, ferr := floatingips.Create(p.computeClient, floatingips.CreateOpts{ Pool: p.poolName, }).Extract() if ferr != nil { err = ferr return } floatingIP = fIP.IP // *** should we delete these during TearDown? fIP.Delete(p.computeClient, fIP.ID) ... } return }
func TestList(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() HandleListSuccessfully(t) count := 0 err := floatingips.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) { count++ actual, err := floatingips.ExtractFloatingIPs(page) th.AssertNoErr(t, err) th.CheckDeepEquals(t, ExpectedFloatingIPsSlice, actual) return true, nil }) th.AssertNoErr(t, err) th.CheckEquals(t, 1, count) }
func TestFloatingIPsList(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } allPages, err := floatingips.List(client).AllPages() if err != nil { t.Fatalf("Unable to retrieve floating IPs: %v", err) } allFloatingIPs, err := floatingips.ExtractFloatingIPs(allPages) if err != nil { t.Fatalf("Unable to extract floating IPs: %v", err) } for _, floatingIP := range allFloatingIPs { PrintFloatingIP(t, &floatingIP) } }