...
1
2
3
4 package virtualmachineimage
5
6
7
8
9 import (
10 "encoding/xml"
11 "fmt"
12 "net/url"
13
14 "github.com/Azure/azure-sdk-for-go/services/classic/management"
15 )
16
17 const (
18 azureImageListURL = "services/vmimages"
19 azureImageDeleteURLformat = "services/vmimages/%s"
20 azureRoleOperationsURL = "services/hostedservices/%s/deployments/%s/roleinstances/%s/operations"
21 errParamNotSpecified = "Parameter %s is not specified."
22 )
23
24
25 func NewClient(client management.Client) Client {
26 return Client{client}
27 }
28
29
30
31 func (c Client) ListVirtualMachineImages(parameters ListParameters) (ListVirtualMachineImagesResponse, error) {
32 var imageList ListVirtualMachineImagesResponse
33
34 listURL := azureImageListURL
35
36 v := url.Values{}
37 if parameters.Location != "" {
38 v.Add("location", parameters.Location)
39 }
40
41 if parameters.Publisher != "" {
42 v.Add("publisher", parameters.Publisher)
43 }
44
45 if parameters.Category != "" {
46 v.Add("category", parameters.Category)
47 }
48
49 query := v.Encode()
50 if query != "" {
51 listURL = listURL + "?" + query
52 }
53
54 response, err := c.SendAzureGetRequest(listURL)
55 if err != nil {
56 return imageList, err
57 }
58 err = xml.Unmarshal(response, &imageList)
59 return imageList, err
60 }
61
62
63
64
65 func (c Client) DeleteVirtualMachineImage(name string, deleteVHDs bool) error {
66 if name == "" {
67 return fmt.Errorf(errParamNotSpecified, "name")
68 }
69
70 uri := fmt.Sprintf(azureImageDeleteURLformat, name)
71
72 if deleteVHDs {
73 uri = uri + "?comp=media"
74 }
75
76 _, err := c.SendAzureDeleteRequest(uri)
77 return err
78 }
79
80 type ListParameters struct {
81 Location string
82 Publisher string
83 Category string
84 }
85
86 const CategoryUser = "User"
87
88
89
90 func (c Client) Capture(cloudServiceName, deploymentName, roleName string,
91 name, label string, osState OSState, parameters CaptureParameters) (management.OperationID, error) {
92 if cloudServiceName == "" {
93 return "", fmt.Errorf(errParamNotSpecified, "cloudServiceName")
94 }
95 if deploymentName == "" {
96 return "", fmt.Errorf(errParamNotSpecified, "deploymentName")
97 }
98 if roleName == "" {
99 return "", fmt.Errorf(errParamNotSpecified, "roleName")
100 }
101
102 request := CaptureRoleAsVMImageOperation{
103 VMImageName: name,
104 VMImageLabel: label,
105 OSState: osState,
106 CaptureParameters: parameters,
107 }
108 data, err := xml.Marshal(request)
109 if err != nil {
110 return "", err
111 }
112
113 return c.SendAzurePostRequest(fmt.Sprintf(azureRoleOperationsURL,
114 cloudServiceName, deploymentName, roleName), data)
115 }
116
View as plain text