blob: 6b73347ac1d120c1c756eca7802b977c3cbf8572 [file] [log] [blame]
Joe Topjianaa8e5e32016-07-25 20:09:52 +00001// +build acceptance compute bootfromvolume
Jon Perritt0b09d1d2014-10-24 13:26:18 -05002
3package v2
4
5import (
6 "testing"
7
Joe Topjianaa8e5e32016-07-25 20:09:52 +00008 "github.com/gophercloud/gophercloud"
Jon Perritt27249f42016-02-18 10:35:59 -06009 "github.com/gophercloud/gophercloud/acceptance/tools"
10 "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume"
11 "github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
Jon Perritt0b09d1d2014-10-24 13:26:18 -050012)
13
Joe Topjianaa8e5e32016-07-25 20:09:52 +000014func TestBootFromVolumeSingleVolume(t *testing.T) {
Jon Perritt0b09d1d2014-10-24 13:26:18 -050015 if testing.Short() {
16 t.Skip("Skipping test that requires server creation in short mode.")
17 }
18
Joe Topjianaa8e5e32016-07-25 20:09:52 +000019 client, err := newClient()
20 if err != nil {
21 t.Fatalf("Unable to create a compute client: %v", err)
22 }
23
Jon Perritt0b09d1d2014-10-24 13:26:18 -050024 choices, err := ComputeChoicesFromEnv()
25 if err != nil {
26 t.Fatal(err)
27 }
28
Joe Topjianaa8e5e32016-07-25 20:09:52 +000029 blockDevices := []bootfromvolume.BlockDevice{
Jon Perritt01686cd2014-10-24 14:10:16 -050030 bootfromvolume.BlockDevice{
31 UUID: choices.ImageID,
32 SourceType: bootfromvolume.Image,
33 VolumeSize: 10,
34 },
Jon Perritt0b09d1d2014-10-24 13:26:18 -050035 }
36
Joe Topjianaa8e5e32016-07-25 20:09:52 +000037 server, err := createBootableVolumeServer(t, client, blockDevices, choices)
38 if err != nil {
39 t.Fatal("Unable to create server: %v", err)
Jon Perritt0b09d1d2014-10-24 13:26:18 -050040 }
Jon Perrittcf01b932014-11-18 13:49:26 -070041 if err = waitForStatus(client, server, "ACTIVE"); err != nil {
Joe Topjianaa8e5e32016-07-25 20:09:52 +000042 t.Fatal("Unable to wait for server: %v", err)
Jon Perrittcf01b932014-11-18 13:49:26 -070043 }
Joe Topjianaa8e5e32016-07-25 20:09:52 +000044 defer deleteServer(t, client, server)
Jon Perrittcf01b932014-11-18 13:49:26 -070045
Joe Topjianaa8e5e32016-07-25 20:09:52 +000046 printServer(t, server)
Jon Perritt0b09d1d2014-10-24 13:26:18 -050047}
Joe Topjianecf63dd2015-12-12 20:33:50 +000048
Joe Topjianaa8e5e32016-07-25 20:09:52 +000049func TestBootFromVolumeMultiEphemeral(t *testing.T) {
Joe Topjianecf63dd2015-12-12 20:33:50 +000050 if testing.Short() {
51 t.Skip("Skipping test that requires server creation in short mode.")
52 }
53
Joe Topjianaa8e5e32016-07-25 20:09:52 +000054 client, err := newClient()
55 if err != nil {
56 t.Fatalf("Unable to create a compute client: %v", err)
57 }
58
Joe Topjianecf63dd2015-12-12 20:33:50 +000059 choices, err := ComputeChoicesFromEnv()
60 if err != nil {
61 t.Fatal(err)
62 }
63
Joe Topjianaa8e5e32016-07-25 20:09:52 +000064 blockDevices := []bootfromvolume.BlockDevice{
Joe Topjianecf63dd2015-12-12 20:33:50 +000065 bootfromvolume.BlockDevice{
66 BootIndex: 0,
67 UUID: choices.ImageID,
68 SourceType: bootfromvolume.Image,
69 DestinationType: "local",
70 DeleteOnTermination: true,
Joe Topjianaa8e5e32016-07-25 20:09:52 +000071 VolumeSize: 5,
Joe Topjianecf63dd2015-12-12 20:33:50 +000072 },
73 bootfromvolume.BlockDevice{
74 BootIndex: -1,
75 SourceType: bootfromvolume.Blank,
76 DestinationType: "local",
77 DeleteOnTermination: true,
78 GuestFormat: "ext4",
79 VolumeSize: 1,
80 },
81 bootfromvolume.BlockDevice{
82 BootIndex: -1,
83 SourceType: bootfromvolume.Blank,
84 DestinationType: "local",
85 DeleteOnTermination: true,
86 GuestFormat: "ext4",
87 VolumeSize: 1,
88 },
89 }
90
Joe Topjianaa8e5e32016-07-25 20:09:52 +000091 server, err := createBootableVolumeServer(t, client, blockDevices, choices)
92 if err != nil {
93 t.Fatalf("Unable to create server: %v", err)
94 }
95 if err = waitForStatus(client, server, "ACTIVE"); err != nil {
96 t.Fatalf("Unable to wait for server: %v", err)
97 }
98 defer deleteServer(t, client, server)
99
100 printServer(t, server)
101}
102
103func createBootableVolumeServer(t *testing.T, client *gophercloud.ServiceClient, blockDevices []bootfromvolume.BlockDevice, choices *ComputeChoices) (*servers.Server, error) {
104 if testing.Short() {
105 t.Skip("Skipping test that requires server creation in short mode.")
106 }
107
108 networkID, err := getNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
109 if err != nil {
110 t.Fatalf("Failed to obtain network ID: %v", err)
111 }
112
113 name := tools.RandomString("ACPTTEST", 16)
114 t.Logf("Attempting to create bootable volume server: %s", name)
115
Joe Topjianecf63dd2015-12-12 20:33:50 +0000116 serverCreateOpts := servers.CreateOpts{
117 Name: name,
118 FlavorRef: choices.FlavorID,
119 ImageRef: choices.ImageID,
Joe Topjianaa8e5e32016-07-25 20:09:52 +0000120 Networks: []servers.Network{
121 servers.Network{UUID: networkID},
122 },
Joe Topjianecf63dd2015-12-12 20:33:50 +0000123 }
124
Joe Topjianaa8e5e32016-07-25 20:09:52 +0000125 server, err := bootfromvolume.Create(client, bootfromvolume.CreateOptsExt{
126 serverCreateOpts,
127 blockDevices,
128 }).Extract()
129
130 if err != nil {
131 return server, err
132 }
133
134 return server, nil
Joe Topjianecf63dd2015-12-12 20:33:50 +0000135}