func TestServersActionResizeRevert(t *testing.T) { t.Parallel() choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatal(err) } defer DeleteServer(t, client, server) t.Logf("Attempting to resize server %s", server.ID) ResizeServer(t, client, server, choices) t.Logf("Attempting to revert resize for server %s", server.ID) if res := servers.RevertResize(client, server.ID); res.Err != nil { t.Fatal(res.Err) } if err = WaitForComputeStatus(client, server, "ACTIVE"); err != nil { t.Fatal(err) } }
func TestBootFromNewVolume(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } blockDevices := []bootfromvolume.BlockDevice{ bootfromvolume.BlockDevice{ DeleteOnTermination: true, DestinationType: bootfromvolume.DestinationVolume, SourceType: bootfromvolume.SourceImage, UUID: choices.ImageID, VolumeSize: 2, }, } server, err := CreateBootableVolumeServer(t, client, blockDevices, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) PrintServer(t, server) }
func TestLimitsForTenant(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } // I think this is the easiest way to get the tenant ID while being // agnostic to Identity v2 and v3. // Technically we're just returning the limits for ourselves, but it's // the fact that we're specifying a tenant ID that is important here. endpointParts := strings.Split(client.Endpoint, "/") tenantID := endpointParts[4] getOpts := limits.GetOpts{ TenantID: tenantID, } limits, err := limits.Get(client, getOpts).Extract() if err != nil { t.Fatalf("Unable to get absolute limits: %v", err) } t.Logf("Limits for tenant %s:", tenantID) t.Logf("%#v", limits) }
func TestServersActionChangeAdminPassword(t *testing.T) { t.Parallel() client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatal(err) } defer DeleteServer(t, client, server) randomPassword := tools.MakeNewPassword(server.AdminPass) res := servers.ChangeAdminPassword(client, server.ID, randomPassword) if res.Err != nil { t.Fatal(res.Err) } if err = WaitForComputeStatus(client, server, "PASSWORD"); err != nil { t.Fatal(err) } if err = WaitForComputeStatus(client, server, "ACTIVE"); err != nil { t.Fatal(err) } }
func TestFloatingIPsFixedIPAssociate(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) newServer, err := servers.Get(client, server.ID).Extract() if err != nil { t.Fatalf("Unable to get server %s: %v", server.ID, err) } floatingIP, err := CreateFloatingIP(t, client, choices) if err != nil { t.Fatalf("Unable to create floating IP: %v", err) } defer DeleteFloatingIP(t, client, floatingIP) PrintFloatingIP(t, floatingIP) var fixedIP string for _, networkAddresses := range newServer.Addresses[choices.NetworkName].([]interface{}) { address := networkAddresses.(map[string]interface{}) if address["OS-EXT-IPS:type"] == "fixed" { if address["version"].(float64) == 4 { fixedIP = address["addr"].(string) } } } err = AssociateFloatingIPWithFixedIP(t, client, floatingIP, newServer, fixedIP) if err != nil { t.Fatalf("Unable to associate floating IP %s with server %s: %v", floatingIP.IP, newServer.ID, err) } defer DisassociateFloatingIP(t, client, floatingIP, newServer) newFloatingIP, err := floatingips.Get(client, floatingIP.ID).Extract() if err != nil { t.Fatalf("Unable to get floating IP %s: %v", floatingIP.ID, err) } t.Logf("Floating IP %s is associated with Fixed IP %s", floatingIP.IP, newFloatingIP.FixedIP) PrintFloatingIP(t, newFloatingIP) }
func TestServersCreateDestroy(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) newServer, err := servers.Get(client, server.ID).Extract() if err != nil { t.Errorf("Unable to retrieve server: %v", err) } PrintServer(t, newServer) allAddressPages, err := servers.ListAddresses(client, server.ID).AllPages() if err != nil { t.Errorf("Unable to list server addresses: %v", err) } allAddresses, err := servers.ExtractAddresses(allAddressPages) if err != nil { t.Errorf("Unable to extract server addresses: %v", err) } for network, address := range allAddresses { t.Logf("Addresses on %s: %+v", network, address) } allNetworkAddressPages, err := servers.ListAddressesByNetwork(client, server.ID, choices.NetworkName).AllPages() if err != nil { t.Errorf("Unable to list server addresses: %v", err) } allNetworkAddresses, err := servers.ExtractNetworkAddresses(allNetworkAddressPages) if err != nil { t.Errorf("Unable to extract server addresses: %v", err) } t.Logf("Addresses on %s:", choices.NetworkName) for _, address := range allNetworkAddresses { t.Logf("%+v", address) } }
func TestSecGroupsCreate(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } securityGroup, err := CreateSecurityGroup(t, client) if err != nil { t.Fatalf("Unable to create security group: %v", err) } defer DeleteSecurityGroup(t, client, securityGroup) }
func TestExtensionGet(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } extension, err := extensions.Get(client, "os-admin-actions").Extract() if err != nil { t.Fatalf("Unable to get extension os-admin-actions: %v", err) } openstack.PrintExtension(t, extension) }
func TestDefSecRulesCreate(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } defaultRule, err := CreateDefaultRule(t, client) if err != nil { t.Fatalf("Unable to create default rule: %v", err) } defer DeleteDefaultRule(t, client, defaultRule) PrintDefaultRule(t, &defaultRule) }
func TestLimits(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } limits, err := limits.Get(client, nil).Extract() if err != nil { t.Fatalf("Unable to get limits: %v", err) } t.Logf("Limits for scoped user:"******"%#v", limits) }
func TestKeypairsCreate(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } keyPair, err := CreateKeyPair(t, client) if err != nil { t.Fatalf("Unable to create key pair: %v", err) } defer DeleteKeyPair(t, client, keyPair) PrintKeyPair(t, keyPair) }
func TestAttachExistingVolume(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } computeClient, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } blockStorageClient, err := clients.NewBlockStorageV2Client() if err != nil { t.Fatalf("Unable to create a block storage client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } volume, err := blockstorage.CreateVolume(t, blockStorageClient) if err != nil { t.Fatal(err) } blockDevices := []bootfromvolume.BlockDevice{ bootfromvolume.BlockDevice{ BootIndex: 0, DeleteOnTermination: true, DestinationType: bootfromvolume.DestinationLocal, SourceType: bootfromvolume.SourceImage, UUID: choices.ImageID, }, bootfromvolume.BlockDevice{ BootIndex: 1, DeleteOnTermination: true, DestinationType: bootfromvolume.DestinationVolume, SourceType: bootfromvolume.SourceVolume, UUID: volume.ID, }, } server, err := CreateBootableVolumeServer(t, computeClient, blockDevices, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, computeClient, server) PrintServer(t, server) }
func TestBootFromMultiEphemeralServer(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } blockDevices := []bootfromvolume.BlockDevice{ bootfromvolume.BlockDevice{ BootIndex: 0, DestinationType: bootfromvolume.DestinationLocal, DeleteOnTermination: true, SourceType: bootfromvolume.SourceImage, UUID: choices.ImageID, VolumeSize: 5, }, bootfromvolume.BlockDevice{ BootIndex: -1, DestinationType: bootfromvolume.DestinationLocal, DeleteOnTermination: true, GuestFormat: "ext4", SourceType: bootfromvolume.SourceBlank, VolumeSize: 1, }, bootfromvolume.BlockDevice{ BootIndex: -1, DestinationType: bootfromvolume.DestinationLocal, DeleteOnTermination: true, GuestFormat: "ext4", SourceType: bootfromvolume.SourceBlank, VolumeSize: 1, }, } server, err := CreateMultiEphemeralServer(t, client, blockDevices, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) PrintServer(t, server) }
func TestServersUpdate(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatal(err) } defer DeleteServer(t, client, server) alternateName := tools.RandomString("ACPTTEST", 16) for alternateName == server.Name { alternateName = tools.RandomString("ACPTTEST", 16) } t.Logf("Attempting to rename the server to %s.", alternateName) updateOpts := servers.UpdateOpts{ Name: alternateName, } updated, err := servers.Update(client, server.ID, updateOpts).Extract() if err != nil { t.Fatalf("Unable to rename server: %v", err) } if updated.ID != server.ID { t.Errorf("Updated server ID [%s] didn't match original server ID [%s]!", updated.ID, server.ID) } err = tools.WaitFor(func() (bool, error) { latest, err := servers.Get(client, updated.ID).Extract() if err != nil { return false, err } return latest.Name == alternateName, nil }) }
func TestSecGroupsAddGroupToServer(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) securityGroup, err := CreateSecurityGroup(t, client) if err != nil { t.Fatalf("Unable to create security group: %v", err) } defer DeleteSecurityGroup(t, client, securityGroup) rule, err := CreateSecurityGroupRule(t, client, securityGroup.ID) if err != nil { t.Fatalf("Unable to create rule: %v", err) } defer DeleteSecurityGroupRule(t, client, rule) t.Logf("Adding group %s to server %s", securityGroup.ID, server.ID) err = secgroups.AddServer(client, server.ID, securityGroup.Name).ExtractErr() if err != nil && err.Error() != "EOF" { t.Fatalf("Unable to add group %s to server %s: %s", securityGroup.ID, server.ID, err) } t.Logf("Removing group %s from server %s", securityGroup.ID, server.ID) err = secgroups.RemoveServer(client, server.ID, securityGroup.Name).ExtractErr() if err != nil && err.Error() != "EOF" { t.Fatalf("Unable to remove group %s from server %s: %s", securityGroup.ID, server.ID, err) } }
func TestVolumeAttachAttachment(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } blockClient, err := clients.NewBlockStorageV1Client() if err != nil { t.Fatalf("Unable to create a blockstorage client: %v", err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) volume, err := createVolume(t, blockClient) if err != nil { t.Fatalf("Unable to create volume: %v", err) } if err = volumes.WaitForStatus(blockClient, volume.ID, "available", 60); err != nil { t.Fatalf("Unable to wait for volume: %v", err) } defer deleteVolume(t, blockClient, volume) volumeAttachment, err := CreateVolumeAttachment(t, client, blockClient, server, volume) if err != nil { t.Fatalf("Unable to attach volume: %v", err) } defer DeleteVolumeAttachment(t, client, blockClient, server, volumeAttachment) PrintVolumeAttachment(t, volumeAttachment) }
func TestImagesGet(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute: client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } image, err := images.Get(client, choices.ImageID).Extract() if err != nil { t.Fatalf("Unable to get image information: %v", err) } PrintImage(t, *image) }
func TestFlavorsGet(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } flavor, err := flavors.Get(client, choices.FlavorID).Extract() if err != nil { t.Fatalf("Unable to get flavor information: %v", err) } PrintFlavor(t, flavor) }
func TestServersActionRebuild(t *testing.T) { t.Parallel() client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatal(err) } defer DeleteServer(t, client, server) t.Logf("Attempting to rebuild server %s", server.ID) rebuildOpts := servers.RebuildOpts{ Name: tools.RandomString("ACPTTEST", 16), AdminPass: tools.MakeNewPassword(server.AdminPass), ImageID: choices.ImageID, } rebuilt, err := servers.Rebuild(client, server.ID, rebuildOpts).Extract() if err != nil { t.Fatal(err) } if rebuilt.ID != server.ID { t.Errorf("Expected rebuilt server ID of [%s]; got [%s]", server.ID, rebuilt.ID) } if err = WaitForComputeStatus(client, rebuilt, "REBUILD"); err != nil { t.Fatal(err) } if err = WaitForComputeStatus(client, rebuilt, "ACTIVE"); err != nil { t.Fatal(err) } }
func TestFloatingIPsAssociate(t *testing.T) { if testing.Short() { t.Skip("Skipping test that requires server creation in short mode.") } client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServer(t, client, choices) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer DeleteServer(t, client, server) floatingIP, err := CreateFloatingIP(t, client, choices) if err != nil { t.Fatalf("Unable to create floating IP: %v", err) } defer DeleteFloatingIP(t, client, floatingIP) PrintFloatingIP(t, floatingIP) err = AssociateFloatingIP(t, client, floatingIP, server) if err != nil { t.Fatalf("Unable to associate floating IP %s with server %s: %v", floatingIP.IP, server.ID, err) } defer DisassociateFloatingIP(t, client, floatingIP, server) newFloatingIP, err := floatingips.Get(client, floatingIP.ID).Extract() if err != nil { t.Fatalf("Unable to get floating IP %s: %v", floatingIP.ID, err) } t.Logf("Floating IP %s is associated with Fixed IP %s", floatingIP.IP, newFloatingIP.FixedIP) PrintFloatingIP(t, newFloatingIP) }
func TestFloatingIPsCreate(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } floatingIP, err := CreateFloatingIP(t, client, choices) if err != nil { t.Fatalf("Unable to create floating IP: %v", err) } defer DeleteFloatingIP(t, client, floatingIP) PrintFloatingIP(t, floatingIP) }
func TestKeypairsImportPublicKey(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } publicKey, err := createKey() if err != nil { t.Fatalf("Unable to create public key: %s", err) } keyPair, err := ImportPublicKey(t, client, publicKey) if err != nil { t.Fatalf("Unable to create keypair: %s", err) } defer DeleteKeyPair(t, client, keyPair) PrintKeyPair(t, keyPair) }
func TestServergroupsCreate(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } serverGroup, err := CreateServerGroup(t, client, "anti-affinity") if err != nil { t.Fatalf("Unable to create server group: %v", err) } defer DeleteServerGroup(t, client, serverGroup) serverGroup, err = servergroups.Get(client, serverGroup.ID).Extract() if err != nil { t.Fatalf("Unable to get server group: %v", err) } PrintServerGroup(t, serverGroup) }
func TestDefSecRulesGet(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } defaultRule, err := CreateDefaultRule(t, client) if err != nil { t.Fatalf("Unable to create default rule: %v", err) } defer DeleteDefaultRule(t, client, defaultRule) newDefaultRule, err := dsr.Get(client, defaultRule.ID).Extract() if err != nil { t.Fatalf("Unable to get default rule %s: %v", defaultRule.ID, err) } PrintDefaultRule(t, newDefaultRule) }
func TestTenantNetworksList(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } allPages, err := tenantnetworks.List(client).AllPages() if err != nil { t.Fatalf("Unable to list networks: %v", err) } allTenantNetworks, err := tenantnetworks.ExtractNetworks(allPages) if err != nil { t.Fatalf("Unable to list networks: %v", err) } for _, network := range allTenantNetworks { PrintTenantNetwork(t, &network) } }
func TestKeypairsList(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } allPages, err := keypairs.List(client).AllPages() if err != nil { t.Fatalf("Unable to retrieve keypairs: %s", err) } allKeys, err := keypairs.ExtractKeyPairs(allPages) if err != nil { t.Fatalf("Unable to extract keypairs results: %s", err) } for _, keypair := range allKeys { PrintKeyPair(t, &keypair) } }
func TestFlavorsList(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } allPages, err := flavors.ListDetail(client, nil).AllPages() if err != nil { t.Fatalf("Unable to retrieve flavors: %v", err) } allFlavors, err := flavors.ExtractFlavors(allPages) if err != nil { t.Fatalf("Unable to extract flavor results: %v", err) } for _, flavor := range allFlavors { PrintFlavor(t, &flavor) } }
func TestDefSecRulesList(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } allPages, err := dsr.List(client).AllPages() if err != nil { t.Fatalf("Unable to list default rules: %v", err) } allDefaultRules, err := dsr.ExtractDefaultRules(allPages) if err != nil { t.Fatalf("Unable to extract default rules: %v", err) } for _, defaultRule := range allDefaultRules { PrintDefaultRule(t, &defaultRule) } }
func TestImagesList(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute: client: %v", err) } allPages, err := images.ListDetail(client, nil).AllPages() if err != nil { t.Fatalf("Unable to retrieve images: %v", err) } allImages, err := images.ExtractImages(allPages) if err != nil { t.Fatalf("Unable to extract image results: %v", err) } for _, image := range allImages { PrintImage(t, image) } }
func TestServersWithoutImageRef(t *testing.T) { client, err := clients.NewComputeV2Client() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } choices, err := clients.AcceptanceTestChoicesFromEnv() if err != nil { t.Fatal(err) } server, err := CreateServerWithoutImageRef(t, client, choices) if err != nil { if err400, ok := err.(*gophercloud.ErrUnexpectedResponseCode); ok { if !strings.Contains("Missing imageRef attribute", string(err400.Body)) { defer DeleteServer(t, client, server) } } } }