blob: 44ce29f3566947da9bdf09b95694954c5d7982f9 [file] [log] [blame]
Jon Perritt5fdb7222014-11-17 14:41:54 -07001// +build acceptance
2
3package v2
4
5import (
6 "crypto/rand"
7 "crypto/rsa"
8 "testing"
9
10 "github.com/rackspace/gophercloud/acceptance/tools"
11 "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs"
12 "github.com/rackspace/gophercloud/openstack/compute/v2/servers"
13 th "github.com/rackspace/gophercloud/testhelper"
14
15 "code.google.com/p/go.crypto/ssh"
16)
17
18func TestCreateServerWithKeyPair(t *testing.T) {
19 client, err := newClient()
20 th.AssertNoErr(t, err)
21
22 if testing.Short() {
23 t.Skip("Skipping test that requires server creation in short mode.")
24 }
25
26 privateKey, err := rsa.GenerateKey(rand.Reader, 2014)
27 publicKey := privateKey.PublicKey
28 pub, err := ssh.NewPublicKey(&publicKey)
29 th.AssertNoErr(t, err)
30 pubBytes := ssh.MarshalAuthorizedKey(pub)
31 pk := string(pubBytes)
32
33 kp, err := keypairs.Create(client, keypairs.CreateOpts{
34 Name: "gophercloud_test_key_pair",
35 PublicKey: pk,
36 }).Extract()
37 th.AssertNoErr(t, err)
38 t.Logf("Created key pair: %s\n", kp)
39
40 choices, err := ComputeChoicesFromEnv()
41 th.AssertNoErr(t, err)
42
43 name := tools.RandomString("Gophercloud-", 8)
44 t.Logf("Creating server [%s] with key pair.", name)
45
46 serverCreateOpts := servers.CreateOpts{
47 Name: name,
48 FlavorRef: choices.FlavorID,
49 ImageRef: choices.ImageID,
50 }
51
52 server, err := servers.Create(client, keypairs.CreateOptsExt{
53 serverCreateOpts,
54 "gophercloud_test_key_pair",
55 }).Extract()
56 th.AssertNoErr(t, err)
57 defer servers.Delete(client, server.ID)
58 t.Logf("Created server: %+v\n", server)
59
60 t.Logf("Deleting key pair [%s]...", kp.Name)
61 err = keypairs.Delete(client, "gophercloud_test_key_pair").ExtractErr()
62 th.AssertNoErr(t, err)
63
64 t.Logf("Deleting server [%s]...", name)
65}