1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
// +build acceptance networking layer3 floatingips
package layer3
import (
"os"
"testing"
"github.com/gophercloud/gophercloud/acceptance/clients"
networking "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2"
"github.com/gophercloud/gophercloud/acceptance/tools"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips"
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
)
func TestLayer3FloatingIPsList(t *testing.T) {
client, err := clients.NewNetworkV2Client()
if err != nil {
t.Fatalf("Unable to create a compute client: %v", err)
}
listOpts := floatingips.ListOpts{
Status: "DOWN",
}
allPages, err := floatingips.List(client, listOpts).AllPages()
if err != nil {
t.Fatalf("Unable to list floating IPs: %v", err)
}
allFIPs, err := floatingips.ExtractFloatingIPs(allPages)
if err != nil {
t.Fatalf("Unable to extract floating IPs: %v", err)
}
for _, fip := range allFIPs {
tools.PrintResource(t, fip)
}
}
func TestLayer3FloatingIPsCreateDelete(t *testing.T) {
client, err := clients.NewNetworkV2Client()
if err != nil {
t.Fatalf("Unable to create a compute client: %v", err)
}
choices, err := clients.AcceptanceTestChoicesFromEnv()
if err != nil {
t.Fatalf("Unable to get choices: %v", err)
}
netid, err := networks.IDFromName(client, choices.NetworkName)
if err != nil {
t.Fatalf("Unable to find network id: %v", err)
}
subnet, err := networking.CreateSubnet(t, client, netid)
if err != nil {
t.Fatalf("Unable to create subnet: %v", err)
}
defer networking.DeleteSubnet(t, client, subnet.ID)
router, err := CreateExternalRouter(t, client)
if err != nil {
t.Fatalf("Unable to create router: %v", err)
}
defer DeleteRouter(t, client, router.ID)
port, err := networking.CreatePort(t, client, netid, subnet.ID)
if err != nil {
t.Fatalf("Unable to create port: %v", err)
}
_, err = CreateRouterInterface(t, client, port.ID, router.ID)
if err != nil {
t.Fatalf("Unable to create router interface: %v", err)
}
defer DeleteRouterInterface(t, client, port.ID, router.ID)
fip, err := CreateFloatingIP(t, client, choices.ExternalNetworkID, port.ID)
if err != nil {
t.Fatalf("Unable to create floating IP: %v", err)
}
defer DeleteFloatingIP(t, client, fip.ID)
newFip, err := floatingips.Get(client, fip.ID).Extract()
if err != nil {
t.Fatalf("Unable to get floating ip: %v", err)
}
tools.PrintResource(t, newFip)
// Disassociate the floating IP
updateOpts := floatingips.UpdateOpts{
PortID: nil,
}
newFip, err = floatingips.Update(client, fip.ID, updateOpts).Extract()
if err != nil {
t.Fatalf("Unable to disassociate floating IP: %v", err)
}
}
func TestLayer3FloatingIPsCreateDeleteBySubnetID(t *testing.T) {
username := os.Getenv("OS_USERNAME")
if username != "admin" {
t.Skip("must be admin to run this test")
}
client, err := clients.NewNetworkV2Client()
if err != nil {
t.Fatalf("Unable to create a compute client: %v", err)
}
choices, err := clients.AcceptanceTestChoicesFromEnv()
if err != nil {
t.Fatalf("Unable to get choices: %v", err)
}
listOpts := subnets.ListOpts{
NetworkID: choices.ExternalNetworkID,
}
subnetPages, err := subnets.List(client, listOpts).AllPages()
if err != nil {
t.Fatalf("Unable to list subnets: %v", err)
}
allSubnets, err := subnets.ExtractSubnets(subnetPages)
if err != nil {
t.Fatalf("Unable to extract subnets: %v", err)
}
createOpts := floatingips.CreateOpts{
FloatingNetworkID: choices.ExternalNetworkID,
SubnetID: allSubnets[0].ID,
}
fip, err := floatingips.Create(client, createOpts).Extract()
if err != nil {
t.Fatalf("Unable to create floating IP: %v", err)
}
tools.PrintResource(t, fip)
DeleteFloatingIP(t, client, fip.ID)
}
|