e2etest/newe2e_arm_managed_disk.go (144 lines of code) (raw):
package e2etest
import (
"net/http"
"net/url"
)
type ARMManagedDisk struct {
*ARMResourceGroup
DiskName string
}
func (md *ARMManagedDisk) ManagementURI() url.URL {
baseURI := md.ARMResourceGroup.ManagementURI()
newURI := baseURI.JoinPath("providers/Microsoft.Compute/disks", md.DiskName)
return *newURI
}
func (md *ARMManagedDisk) PrepareRequest(reqSettings *ARMRequestSettings) {
if reqSettings.Query == nil {
reqSettings.Query = make(url.Values)
}
if !reqSettings.Query.Has("api-version") {
reqSettings.Query.Add("api-version", "2021-12-01") // Attach default query
}
}
type ARMManagedDiskCreateOrUpdateParams struct { // https://learn.microsoft.com/en-us/rest/api/compute/disks/create-or-update?tabs=HTTP#request-body
Location string `json:"location"`
ExtendedLocation *ARMExtendedLocation `json:"extendedLocation,omitempty"`
Sku *ARMManagedDiskSku `json:"sku,omitempty"`
Properties ARMManagedDiskPutProperties `json:"properties"` // Has mandatory field CreationData
}
type ARMManagedDiskPutProperties struct {
CreationData ARMManagedDiskCreationData `json:"creationData"`
BurstingEnabled *bool `json:"burstingEnabled,omitempty"`
CompletionPercent string `json:"completionPercent"`
DataAccessAuthMode *string `json:"dataAccessAuthMode,omitempty"` // AzureActiveDirectory or None
DiskAccessId *string `json:"diskAccessId,omitempty"`
DiskIOPSReadWrite *uint64 `json:"diskIOPSReadWrite,omitempty"`
DiskIOPSReadOnly *uint64 `json:"diskIOPSReadOnly,omitempty"`
DiskMBpsReadOnly *uint64 `json:"diskMBpsReadOnly,omitempty"`
DiskMBpsReadWrite *uint64 `json:"diskMBpsReadWrite,omitempty"`
DiskSizeGB *uint `json:"diskSizeGB,omitempty"` // Mandatory if CreationData.CreateOption is empty
Encryption ARMUnimplementedStruct `json:"encryption,omitempty"` // todo?
EncryptionSettingsCollection ARMUnimplementedStruct `json:"encryptionSettingsCollection,omitempty"`
HyperVGeneration *string `json:"hyperVGeneration,omitempty"` // V1 or V2
MaxShares *uint `json:"maxShares,omitempty"` // Max VM attachments
NetworkAccessPolicy ARMUnimplementedStruct `json:"networkAccessPolicy,omitempty"`
OSType *string `json:"OSType,omitempty"` // "Linux" or "Windows"
PublicNetworkAccess *string `json:"publicNetworkAccess,omitempty"` // "Enabled" or "Disabled"
PurchasePlan ARMUnimplementedStruct `json:"purchasePlan,omitempty"`
SecurityProfile ARMUnimplementedStruct `json:"securityProfile,omitempty"`
SupportedCapabilities ARMUnimplementedStruct `json:"supportedCapabilities,omitempty"`
SupportsHibernation *bool `json:"supportsHibernation,omitempty"`
Tier *string `json:"tier,omitempty"` // Perf tier https://azure.microsoft.com/en-us/pricing/details/managed-disks/ does not apply to ultra
}
type ARMManagedDiskCreationData struct {
CreateOption *string `json:"createOption"`
LogicalSectorSize *uint `json:"logicalSectorSize,omitempty"` // 512-4096; 4096 is default
GalleryImageReference ARMUnimplementedStruct `json:"galleryImageReference,omitempty"` // ImageDiskReference
SecurityDataUri *string `json:"securityDataUri,omitempty"` // ImportSecure
SourceResourceId *string `json:"sourceResourceId,omitempty"` // Copy
SourceUniqueId *string `json:"sourceUniqueId,omitempty"` // also Copy?
SourceUri *string `json:"sourceUri,omitempty"` // Import
StorageAccountId *string `json:"storageAccountId,omitempty"` // Required on Import
UploadSizeBytes *uint64 `json:"uploadSizeBytes,omitempty"`
}
const (
ARMManagedDiskCreateOptionAttach = "Attach"
ARMManagedDiskCreateOptionCopy = "Copy"
ARMManagedDiskCreateOptionCopyStart = "CopyStart"
ARMManagedDiskCreateOptionEmpty = "Empty"
ARMManagedDiskCreateOptionFromImage = "FromImage"
ARMManagedDiskCreateOptionImport = "Import"
ARMManagedDiskCreateOptionImportSecure = "ImportSecure"
ARMManagedDiskCreateOptionRestore = "Restore"
ARMManagedDiskCreateOptionUpload = "Upload"
ARMManagedDiskCreateOptionUploadPreparedSecure = "UploadPreparedSecure"
)
func (md *ARMManagedDisk) CreateOrUpdate(params ARMManagedDiskCreateOrUpdateParams) (*ARMManagedDiskInfo, error) {
var out ARMManagedDiskInfo
_, err := PerformRequest(md, ARMRequestSettings{ // https://learn.microsoft.com/en-us/rest/api/compute/disks/create-or-update?tabs=HTTP
Method: http.MethodPut,
Body: params,
}, &out)
return &out, err
}
func (md *ARMManagedDisk) Delete() error {
_, err := PerformRequest[any](md, ARMRequestSettings{
Method: http.MethodDelete,
}, nil)
return err
}
func (md *ARMManagedDisk) Get() (*ARMManagedDiskInfo, error) { // https://learn.microsoft.com/en-us/rest/api/compute/disks/get?tabs=HTTP
var out ARMManagedDiskInfo
_, err := PerformRequest(md, ARMRequestSettings{
Method: http.MethodGet,
}, &out)
return &out, err
}
type ARMManagedDiskGrantAccessParams struct {
AccessLevel string `json:"access"` // "Read" or "Write"
DurationInSeconds uint64 `json:"durationInSeconds"`
GetSecureVMGuestStateSAS *bool `json:"getSecureVMGuestStateSAS,omitempty"`
}
type ARMManagedDiskAccessURI struct {
AccessSAS string `json:"accessSAS"`
SecurityDataAccessSAS string `json:"securityDataAccessSAS"`
}
func (md *ARMManagedDisk) GrantAccess(params ARMManagedDiskGrantAccessParams) (*ARMManagedDiskAccessURI, error) { // https://learn.microsoft.com/en-us/rest/api/compute/disks/grant-access?tabs=HTTP
var out ARMManagedDiskAccessURI
_, err := PerformRequest(md, ARMRequestSettings{
Method: http.MethodGet,
Body: params,
PathExtension: "beginGetAccess",
}, &out)
return &out, err
}
func (md *ARMManagedDisk) RevokeAccess() error {
_, err := PerformRequest[any](md, ARMRequestSettings{
Method: http.MethodPost,
}, nil)
return err
}
// ========== Shared Structs ==========
type ARMManagedDiskSku struct {
Name string `json:"name"`
Tier string `json:"tier"`
}
var (
ARMManagedDiskSkuPremiumLrs = ARMManagedDiskSku{Name: "Premium_LRS"}
ARMManagedDiskSkuPremiumZrs = ARMManagedDiskSku{Name: "Premium_ZRS"}
ARMManagedDiskSkuStandardSsdLrs = ARMManagedDiskSku{Name: "StandardSSD_LRS"}
ARMManagedDiskSkuStandardSsdZrs = ARMManagedDiskSku{Name: "StandardSSD_ZRS"}
ARMManagedDiskSkuStandardLrs = ARMManagedDiskSku{Name: "Standard_LRS"}
ARMManagedDiskSkuUltraSsdLrs = ARMManagedDiskSku{Name: "UltraSSD_LRS"}
)
type ARMManagedDiskInfo struct {
Id string `json:"id"`
Location string `json:"location"`
ManagedBy string `json:"managedBy"`
ManagedByExtended []string `json:"managedByExtended"`
Name string `json:"name"`
ExtendedLocation ARMExtendedLocation `json:"extendedLocation"`
Sku ARMManagedDiskSku `json:"sku"`
Tags map[string]string `json:"tags"`
Zones []string `json:"zones"`
Properties ARMManagedDiskPutProperties `json:"properties"` // Has mandatory field CreationData
}