Merge lp:~jtv/gwacl/delete-disk into lp:gwacl

Proposed by Jeroen T. Vermeulen
Status: Merged
Approved by: Jeroen T. Vermeulen
Approved revision: 81
Merged at revision: 81
Proposed branch: lp:~jtv/gwacl/delete-disk
Merge into: lp:gwacl
Diff against target: 91 lines (+36/-5)
3 files modified
example/live_example_managementapi.go (+20/-5)
managementapi.go (+5/-0)
managementapi_test.go (+11/-0)
To merge this branch: bzr merge lp:~jtv/gwacl/delete-disk
Reviewer Review Type Date Requested Status
Jeroen T. Vermeulen (community) Approve
Review via email: mp+156340@code.launchpad.net

This proposal supersedes a proposal from 2013-04-01.

Commit message

Landing for Raphaël: Add API method to delete a disk.

Description of the change

Landing Raphaël's branch, which had contracted a silly little conflict with trunk: https://code.launchpad.net/~rvb/gwacl/delete-disk/+merge/156190

Resubmitting this because for some reason Tarmac isn't landing the original proposal.

Jeroen

To post a comment you must log in.
Revision history for this message
Jeroen T. Vermeulen (jtv) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

And re-approving.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'example/live_example_managementapi.go'
2--- example/live_example_managementapi.go 2013-04-01 08:22:52 +0000
3+++ example/live_example_managementapi.go 2013-04-01 09:38:22 +0000
4@@ -121,7 +121,9 @@
5
6 mediaLink := fmt.Sprintf("http://%s.blob.core.windows.net/vhds/%s.vhd", storageAccount, vhdName)
7 sourceImageName := "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-12_04_1-LTS-amd64-server-20121218-en-us-30GB"
8- OSVirtualHardDisk := gwacl.NewOSVirtualHardDisk("", "", "", mediaLink, sourceImageName)
9+ diskName := makeRandomIdentifier("gwacldisk", 16)
10+ diskLabel := makeRandomIdentifier("gwacl", 64)
11+ OSVirtualHardDisk := gwacl.NewOSVirtualHardDisk("", diskLabel, diskName, mediaLink, sourceImageName)
12 roleName := makeRandomIdentifier("gwaclrole", 16)
13 role := gwacl.NewRole("ExtraSmall", roleName, []gwacl.LinuxProvisioningConfiguration{*configurationSet}, OSVirtualHardDisk)
14 machineName := makeRandomIdentifier("gwaclmachine", 20)
15@@ -131,15 +133,29 @@
16 fmt.Println("Done adding VM deployment\n")
17
18 fmt.Println("Starting VM...")
19- operation := gwacl.StartRoleOperation
20- err = api.PerformRoleOperation(hostServiceName, deployment.Name, role.RoleName, operation)
21+ err = api.PerformRoleOperation(hostServiceName, deployment.Name, role.RoleName, gwacl.StartRoleOperation)
22 checkError(err)
23 fmt.Println("Done starting VM\n")
24
25+ fmt.Println("Stopping VM...")
26+ err = api.PerformRoleOperation(hostServiceName, deployment.Name, role.RoleName, gwacl.ShutdownRoleOperation)
27+ checkError(err)
28+ fmt.Println("Done stopping VM\n")
29+
30 fmt.Println("Deleting deployment...")
31- api.DeleteDeployment(hostServiceName, deployment.Name)
32+ err = api.DeleteDeployment(hostServiceName, deployment.Name)
33+ checkError(err)
34 fmt.Println("Done deleting deployment\n")
35
36+ // TODO: it takes some time for a disk previously attached to a deleted VM
37+ // to become "not in use" and thus be available for deletion.
38+ time.Sleep(3 * time.Minute)
39+
40+ fmt.Println("Deleting VM disk...")
41+ err = api.DeleteDisk(diskName)
42+ checkError(err)
43+ fmt.Println("Done deleting VM disk\n")
44+
45 fmt.Println("Deleting hosted service...")
46 api.DeleteHostedService(hostServiceName)
47 fmt.Println("Done deleting hosted service\n")
48@@ -147,5 +163,4 @@
49 fmt.Printf("Deleting storage account %s...\n", storageAccount)
50 api.DeleteStorageAccount(storageAccount)
51 fmt.Println("Done deleting storage account\n")
52-
53 }
54
55=== modified file 'managementapi.go'
56--- managementapi.go 2013-03-29 16:03:54 +0000
57+++ managementapi.go 2013-04-01 09:38:22 +0000
58@@ -170,6 +170,11 @@
59 return &keys, nil
60 }
61
62+func (api *ManagementAPI) DeleteDisk(diskName string) error {
63+ URI := "services/disks/" + diskName
64+ return api.session.delete(URI)
65+}
66+
67 // Perform an operation on the specified role (as defined by serviceName, deploymentName and
68 // roleName)
69 // This is an asynchronous operation, it blocks until the operation is completed.
70
71=== modified file 'managementapi_test.go'
72--- managementapi_test.go 2013-03-29 16:03:54 +0000
73+++ managementapi_test.go 2013-04-01 09:38:22 +0000
74@@ -347,6 +347,17 @@
75 c.Check(keys.Url, Equals, url)
76 }
77
78+func (suite *managementAPISuite) TestDeleteDisk(c *C) {
79+ api := makeAPI(c)
80+ recordedRequests := setUpDispatcher("operationID")
81+ diskName := "diskName"
82+ err := api.DeleteDisk(diskName)
83+
84+ c.Assert(err, IsNil)
85+ expectedURL := api.session.composeURL("services/disks/" + diskName)
86+ checkOneRequest(c, recordedRequests, expectedURL, []byte{}, "DELETE")
87+}
88+
89 func (suite *managementAPISuite) TestPerformNodeOperation(c *C) {
90 api := makeAPI(c)
91 recordedRequests := setUpDispatcher("operationID")

Subscribers

People subscribed via source and target branches