restic/vendor/github.com/Azure/azure-sdk-for-go/management/virtualmachinedisk/client.go

247 lines
6.9 KiB
Go

// +build go1.7
// Package virtualmachinedisk provides a client for Virtual Machine Disks.
package virtualmachinedisk
// Copyright 2017 Microsoft Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import (
"encoding/xml"
"fmt"
"github.com/Azure/azure-sdk-for-go/management"
)
const (
addDataDiskURL = "services/hostedservices/%s/deployments/%s/roles/%s/DataDisks"
addDiskURL = "services/disks"
deleteDataDiskURL = "services/hostedservices/%s/deployments/%s/roles/%s/DataDisks/%d"
deleteDiskURL = "services/disks/%s"
getDataDiskURL = "services/hostedservices/%s/deployments/%s/roles/%s/DataDisks/%d"
getDiskURL = "services/disks/%s"
listDisksURL = "services/disks"
updateDataDiskURL = "services/hostedservices/%s/deployments/%s/roles/%s/DataDisks/%d"
updateDiskURL = "services/disks/%s"
errParamNotSpecified = "Parameter %s is not specified."
)
//NewClient is used to instantiate a new DiskClient from an Azure client
func NewClient(client management.Client) DiskClient {
return DiskClient{client: client}
}
// AddDataDisk adds a data disk to a Virtual Machine
//
// https://msdn.microsoft.com/en-us/library/azure/jj157199.aspx
func (c DiskClient) AddDataDisk(
service string,
deployment string,
role string,
params CreateDataDiskParameters) (management.OperationID, error) {
if service == "" {
return "", fmt.Errorf(errParamNotSpecified, "service")
}
if deployment == "" {
return "", fmt.Errorf(errParamNotSpecified, "deployment")
}
if role == "" {
return "", fmt.Errorf(errParamNotSpecified, "role")
}
requestURL := fmt.Sprintf(addDataDiskURL, service, deployment, role)
req, err := xml.Marshal(params)
if err != nil {
return "", err
}
return c.client.SendAzurePostRequest(requestURL, req)
}
// AddDisk adds an operating system disk or data disk to the user image repository
//
// https://msdn.microsoft.com/en-us/library/azure/jj157178.aspx
func (c DiskClient) AddDisk(params CreateDiskParameters) (management.OperationID, error) {
req, err := xml.Marshal(params)
if err != nil {
return "", err
}
return c.client.SendAzurePostRequest(addDiskURL, req)
}
// DeleteDataDisk removes the specified data disk from a Virtual Machine
//
// https://msdn.microsoft.com/en-us/library/azure/jj157179.aspx
func (c DiskClient) DeleteDataDisk(
service string,
deployment string,
role string,
lun int,
deleteVHD bool) (management.OperationID, error) {
if service == "" {
return "", fmt.Errorf(errParamNotSpecified, "service")
}
if deployment == "" {
return "", fmt.Errorf(errParamNotSpecified, "deployment")
}
if role == "" {
return "", fmt.Errorf(errParamNotSpecified, "role")
}
requestURL := fmt.Sprintf(deleteDataDiskURL, service, deployment, role, lun)
if deleteVHD {
requestURL += "?comp=media"
}
return c.client.SendAzureDeleteRequest(requestURL)
}
// DeleteDisk deletes the specified data or operating system disk from the image
// repository that is associated with the specified subscription
//
// https://msdn.microsoft.com/en-us/library/azure/jj157200.aspx
func (c DiskClient) DeleteDisk(name string, deleteVHD bool) error {
if name == "" {
return fmt.Errorf(errParamNotSpecified, "name")
}
requestURL := fmt.Sprintf(deleteDiskURL, name)
if deleteVHD {
requestURL += "?comp=media"
}
_, err := c.client.SendAzureDeleteRequest(requestURL) // request is handled synchronously
return err
}
// GetDataDisk retrieves the specified data disk from a Virtual Machine
//
// https://msdn.microsoft.com/en-us/library/azure/jj157180.aspx
func (c DiskClient) GetDataDisk(
service string,
deployment string,
role string,
lun int) (DataDiskResponse, error) {
var response DataDiskResponse
if service == "" {
return response, fmt.Errorf(errParamNotSpecified, "service")
}
if deployment == "" {
return response, fmt.Errorf(errParamNotSpecified, "deployment")
}
if role == "" {
return response, fmt.Errorf(errParamNotSpecified, "role")
}
requestURL := fmt.Sprintf(getDataDiskURL, service, deployment, role, lun)
data, err := c.client.SendAzureGetRequest(requestURL)
if err != nil {
return response, err
}
err = xml.Unmarshal(data, &response)
return response, err
}
// GetDisk retrieves information about the specified disk
//
// https://msdn.microsoft.com/en-us/library/azure/dn775053.aspx
func (c DiskClient) GetDisk(name string) (DiskResponse, error) {
var response DiskResponse
if name == "" {
return response, fmt.Errorf(errParamNotSpecified, "name")
}
requestURL := fmt.Sprintf(getDiskURL, name)
data, err := c.client.SendAzureGetRequest(requestURL)
if err != nil {
return response, err
}
err = xml.Unmarshal(data, &response)
return response, err
}
// ListDisks retrieves a list of the disks in the image repository that is associated
// with the specified subscription
//
// https://msdn.microsoft.com/en-us/library/azure/jj157176.aspx
func (c DiskClient) ListDisks() (ListDiskResponse, error) {
var response ListDiskResponse
data, err := c.client.SendAzureGetRequest(listDisksURL)
if err != nil {
return response, err
}
err = xml.Unmarshal(data, &response)
return response, err
}
// UpdateDataDisk updates the configuration of the specified data disk that is
// attached to the specified Virtual Machine
//
// https://msdn.microsoft.com/en-us/library/azure/jj157190.aspx
func (c DiskClient) UpdateDataDisk(
service string,
deployment string,
role string,
lun int,
params UpdateDataDiskParameters) (management.OperationID, error) {
if service == "" {
return "", fmt.Errorf(errParamNotSpecified, "service")
}
if deployment == "" {
return "", fmt.Errorf(errParamNotSpecified, "deployment")
}
if role == "" {
return "", fmt.Errorf(errParamNotSpecified, "role")
}
requestURL := fmt.Sprintf(updateDataDiskURL, service, deployment, role, lun)
req, err := xml.Marshal(params)
if err != nil {
return "", err
}
return c.client.SendAzurePutRequest(requestURL, "", req)
}
// UpdateDisk updates the label of an existing disk in the image repository that is
// associated with the specified subscription
//
// https://msdn.microsoft.com/en-us/library/azure/jj157205.aspx
func (c DiskClient) UpdateDisk(
name string,
params UpdateDiskParameters) (management.OperationID, error) {
if name == "" {
return "", fmt.Errorf(errParamNotSpecified, "name")
}
requestURL := fmt.Sprintf(updateDiskURL, name)
req, err := xml.Marshal(params)
if err != nil {
return "", err
}
return c.client.SendAzurePutRequest(requestURL, "", req)
}