1// +build go1.13 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// Code generated by Microsoft (R) AutoRest Code Generator. 6// Changes may cause incorrect behavior and will be lost if the code is regenerated. 7 8package armcompute 9 10import ( 11 "context" 12 "errors" 13 "fmt" 14 "github.com/Azure/azure-sdk-for-go/sdk/armcore" 15 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 16 "io/ioutil" 17 "net/http" 18 "net/url" 19 "strconv" 20 "strings" 21 "time" 22) 23 24// VirtualMachinesClient contains the methods for the VirtualMachines group. 25// Don't use this type directly, use NewVirtualMachinesClient() instead. 26type VirtualMachinesClient struct { 27 con *armcore.Connection 28 subscriptionID string 29} 30 31// NewVirtualMachinesClient creates a new instance of VirtualMachinesClient with the specified values. 32func NewVirtualMachinesClient(con *armcore.Connection, subscriptionID string) *VirtualMachinesClient { 33 return &VirtualMachinesClient{con: con, subscriptionID: subscriptionID} 34} 35 36// BeginAssessPatches - Assess patches on the VM. 37func (client *VirtualMachinesClient) BeginAssessPatches(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginAssessPatchesOptions) (VirtualMachineAssessPatchesResultPollerResponse, error) { 38 resp, err := client.assessPatches(ctx, resourceGroupName, vmName, options) 39 if err != nil { 40 return VirtualMachineAssessPatchesResultPollerResponse{}, err 41 } 42 result := VirtualMachineAssessPatchesResultPollerResponse{ 43 RawResponse: resp.Response, 44 } 45 pt, err := armcore.NewPoller("VirtualMachinesClient.AssessPatches", "location", resp, client.assessPatchesHandleError) 46 if err != nil { 47 return VirtualMachineAssessPatchesResultPollerResponse{}, err 48 } 49 poller := &virtualMachineAssessPatchesResultPoller{ 50 pt: pt, 51 pipeline: client.con.Pipeline(), 52 } 53 result.Poller = poller 54 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineAssessPatchesResultResponse, error) { 55 return poller.pollUntilDone(ctx, frequency) 56 } 57 return result, nil 58} 59 60// ResumeAssessPatches creates a new VirtualMachineAssessPatchesResultPoller from the specified resume token. 61// token - The value must come from a previous call to VirtualMachineAssessPatchesResultPoller.ResumeToken(). 62func (client *VirtualMachinesClient) ResumeAssessPatches(token string) (VirtualMachineAssessPatchesResultPoller, error) { 63 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.AssessPatches", token, client.assessPatchesHandleError) 64 if err != nil { 65 return nil, err 66 } 67 return &virtualMachineAssessPatchesResultPoller{ 68 pipeline: client.con.Pipeline(), 69 pt: pt, 70 }, nil 71} 72 73// AssessPatches - Assess patches on the VM. 74func (client *VirtualMachinesClient) assessPatches(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginAssessPatchesOptions) (*azcore.Response, error) { 75 req, err := client.assessPatchesCreateRequest(ctx, resourceGroupName, vmName, options) 76 if err != nil { 77 return nil, err 78 } 79 resp, err := client.con.Pipeline().Do(req) 80 if err != nil { 81 return nil, err 82 } 83 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 84 return nil, client.assessPatchesHandleError(resp) 85 } 86 return resp, nil 87} 88 89// assessPatchesCreateRequest creates the AssessPatches request. 90func (client *VirtualMachinesClient) assessPatchesCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginAssessPatchesOptions) (*azcore.Request, error) { 91 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches" 92 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 93 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 94 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 95 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 96 if err != nil { 97 return nil, err 98 } 99 req.Telemetry(telemetryInfo) 100 query := req.URL.Query() 101 query.Set("api-version", "2020-06-01") 102 req.URL.RawQuery = query.Encode() 103 req.Header.Set("Accept", "application/json") 104 return req, nil 105} 106 107// assessPatchesHandleResponse handles the AssessPatches response. 108func (client *VirtualMachinesClient) assessPatchesHandleResponse(resp *azcore.Response) (VirtualMachineAssessPatchesResultResponse, error) { 109 var val *VirtualMachineAssessPatchesResult 110 if err := resp.UnmarshalAsJSON(&val); err != nil { 111 return VirtualMachineAssessPatchesResultResponse{}, err 112 } 113 return VirtualMachineAssessPatchesResultResponse{RawResponse: resp.Response, VirtualMachineAssessPatchesResult: val}, nil 114} 115 116// assessPatchesHandleError handles the AssessPatches error response. 117func (client *VirtualMachinesClient) assessPatchesHandleError(resp *azcore.Response) error { 118 var err CloudError 119 if err := resp.UnmarshalAsJSON(&err); err != nil { 120 return err 121 } 122 return azcore.NewResponseError(&err, resp.Response) 123} 124 125// BeginCapture - Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create similar VMs. 126func (client *VirtualMachinesClient) BeginCapture(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineCaptureParameters, options *VirtualMachinesBeginCaptureOptions) (VirtualMachineCaptureResultPollerResponse, error) { 127 resp, err := client.capture(ctx, resourceGroupName, vmName, parameters, options) 128 if err != nil { 129 return VirtualMachineCaptureResultPollerResponse{}, err 130 } 131 result := VirtualMachineCaptureResultPollerResponse{ 132 RawResponse: resp.Response, 133 } 134 pt, err := armcore.NewPoller("VirtualMachinesClient.Capture", "location", resp, client.captureHandleError) 135 if err != nil { 136 return VirtualMachineCaptureResultPollerResponse{}, err 137 } 138 poller := &virtualMachineCaptureResultPoller{ 139 pt: pt, 140 pipeline: client.con.Pipeline(), 141 } 142 result.Poller = poller 143 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineCaptureResultResponse, error) { 144 return poller.pollUntilDone(ctx, frequency) 145 } 146 return result, nil 147} 148 149// ResumeCapture creates a new VirtualMachineCaptureResultPoller from the specified resume token. 150// token - The value must come from a previous call to VirtualMachineCaptureResultPoller.ResumeToken(). 151func (client *VirtualMachinesClient) ResumeCapture(token string) (VirtualMachineCaptureResultPoller, error) { 152 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Capture", token, client.captureHandleError) 153 if err != nil { 154 return nil, err 155 } 156 return &virtualMachineCaptureResultPoller{ 157 pipeline: client.con.Pipeline(), 158 pt: pt, 159 }, nil 160} 161 162// Capture - Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create similar VMs. 163func (client *VirtualMachinesClient) capture(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineCaptureParameters, options *VirtualMachinesBeginCaptureOptions) (*azcore.Response, error) { 164 req, err := client.captureCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 165 if err != nil { 166 return nil, err 167 } 168 resp, err := client.con.Pipeline().Do(req) 169 if err != nil { 170 return nil, err 171 } 172 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 173 return nil, client.captureHandleError(resp) 174 } 175 return resp, nil 176} 177 178// captureCreateRequest creates the Capture request. 179func (client *VirtualMachinesClient) captureCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineCaptureParameters, options *VirtualMachinesBeginCaptureOptions) (*azcore.Request, error) { 180 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture" 181 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 182 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 183 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 184 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 185 if err != nil { 186 return nil, err 187 } 188 req.Telemetry(telemetryInfo) 189 query := req.URL.Query() 190 query.Set("api-version", "2020-06-01") 191 req.URL.RawQuery = query.Encode() 192 req.Header.Set("Accept", "application/json") 193 return req, req.MarshalAsJSON(parameters) 194} 195 196// captureHandleResponse handles the Capture response. 197func (client *VirtualMachinesClient) captureHandleResponse(resp *azcore.Response) (VirtualMachineCaptureResultResponse, error) { 198 var val *VirtualMachineCaptureResult 199 if err := resp.UnmarshalAsJSON(&val); err != nil { 200 return VirtualMachineCaptureResultResponse{}, err 201 } 202 return VirtualMachineCaptureResultResponse{RawResponse: resp.Response, VirtualMachineCaptureResult: val}, nil 203} 204 205// captureHandleError handles the Capture error response. 206func (client *VirtualMachinesClient) captureHandleError(resp *azcore.Response) error { 207 body, err := ioutil.ReadAll(resp.Body) 208 if err != nil { 209 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 210 } 211 if len(body) == 0 { 212 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 213 } 214 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 215} 216 217// BeginConvertToManagedDisks - Converts virtual machine disks from blob-based to managed disks. Virtual machine must be stop-deallocated before invoking 218// this operation. 219func (client *VirtualMachinesClient) BeginConvertToManagedDisks(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginConvertToManagedDisksOptions) (HTTPPollerResponse, error) { 220 resp, err := client.convertToManagedDisks(ctx, resourceGroupName, vmName, options) 221 if err != nil { 222 return HTTPPollerResponse{}, err 223 } 224 result := HTTPPollerResponse{ 225 RawResponse: resp.Response, 226 } 227 pt, err := armcore.NewPoller("VirtualMachinesClient.ConvertToManagedDisks", "", resp, client.convertToManagedDisksHandleError) 228 if err != nil { 229 return HTTPPollerResponse{}, err 230 } 231 poller := &httpPoller{ 232 pt: pt, 233 pipeline: client.con.Pipeline(), 234 } 235 result.Poller = poller 236 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 237 return poller.pollUntilDone(ctx, frequency) 238 } 239 return result, nil 240} 241 242// ResumeConvertToManagedDisks creates a new HTTPPoller from the specified resume token. 243// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 244func (client *VirtualMachinesClient) ResumeConvertToManagedDisks(token string) (HTTPPoller, error) { 245 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.ConvertToManagedDisks", token, client.convertToManagedDisksHandleError) 246 if err != nil { 247 return nil, err 248 } 249 return &httpPoller{ 250 pipeline: client.con.Pipeline(), 251 pt: pt, 252 }, nil 253} 254 255// ConvertToManagedDisks - Converts virtual machine disks from blob-based to managed disks. Virtual machine must be stop-deallocated before invoking this 256// operation. 257func (client *VirtualMachinesClient) convertToManagedDisks(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginConvertToManagedDisksOptions) (*azcore.Response, error) { 258 req, err := client.convertToManagedDisksCreateRequest(ctx, resourceGroupName, vmName, options) 259 if err != nil { 260 return nil, err 261 } 262 resp, err := client.con.Pipeline().Do(req) 263 if err != nil { 264 return nil, err 265 } 266 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 267 return nil, client.convertToManagedDisksHandleError(resp) 268 } 269 return resp, nil 270} 271 272// convertToManagedDisksCreateRequest creates the ConvertToManagedDisks request. 273func (client *VirtualMachinesClient) convertToManagedDisksCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginConvertToManagedDisksOptions) (*azcore.Request, error) { 274 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks" 275 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 276 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 277 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 278 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 279 if err != nil { 280 return nil, err 281 } 282 req.Telemetry(telemetryInfo) 283 query := req.URL.Query() 284 query.Set("api-version", "2020-06-01") 285 req.URL.RawQuery = query.Encode() 286 return req, nil 287} 288 289// convertToManagedDisksHandleError handles the ConvertToManagedDisks error response. 290func (client *VirtualMachinesClient) convertToManagedDisksHandleError(resp *azcore.Response) error { 291 body, err := ioutil.ReadAll(resp.Body) 292 if err != nil { 293 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 294 } 295 if len(body) == 0 { 296 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 297 } 298 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 299} 300 301// BeginCreateOrUpdate - The operation to create or update a virtual machine. Please note some properties can be set only during virtual machine creation. 302func (client *VirtualMachinesClient) BeginCreateOrUpdate(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachine, options *VirtualMachinesBeginCreateOrUpdateOptions) (VirtualMachinePollerResponse, error) { 303 resp, err := client.createOrUpdate(ctx, resourceGroupName, vmName, parameters, options) 304 if err != nil { 305 return VirtualMachinePollerResponse{}, err 306 } 307 result := VirtualMachinePollerResponse{ 308 RawResponse: resp.Response, 309 } 310 pt, err := armcore.NewPoller("VirtualMachinesClient.CreateOrUpdate", "", resp, client.createOrUpdateHandleError) 311 if err != nil { 312 return VirtualMachinePollerResponse{}, err 313 } 314 poller := &virtualMachinePoller{ 315 pt: pt, 316 pipeline: client.con.Pipeline(), 317 } 318 result.Poller = poller 319 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineResponse, error) { 320 return poller.pollUntilDone(ctx, frequency) 321 } 322 return result, nil 323} 324 325// ResumeCreateOrUpdate creates a new VirtualMachinePoller from the specified resume token. 326// token - The value must come from a previous call to VirtualMachinePoller.ResumeToken(). 327func (client *VirtualMachinesClient) ResumeCreateOrUpdate(token string) (VirtualMachinePoller, error) { 328 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.CreateOrUpdate", token, client.createOrUpdateHandleError) 329 if err != nil { 330 return nil, err 331 } 332 return &virtualMachinePoller{ 333 pipeline: client.con.Pipeline(), 334 pt: pt, 335 }, nil 336} 337 338// CreateOrUpdate - The operation to create or update a virtual machine. Please note some properties can be set only during virtual machine creation. 339func (client *VirtualMachinesClient) createOrUpdate(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachine, options *VirtualMachinesBeginCreateOrUpdateOptions) (*azcore.Response, error) { 340 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 341 if err != nil { 342 return nil, err 343 } 344 resp, err := client.con.Pipeline().Do(req) 345 if err != nil { 346 return nil, err 347 } 348 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 349 return nil, client.createOrUpdateHandleError(resp) 350 } 351 return resp, nil 352} 353 354// createOrUpdateCreateRequest creates the CreateOrUpdate request. 355func (client *VirtualMachinesClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachine, options *VirtualMachinesBeginCreateOrUpdateOptions) (*azcore.Request, error) { 356 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 357 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 358 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 359 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 360 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 361 if err != nil { 362 return nil, err 363 } 364 req.Telemetry(telemetryInfo) 365 query := req.URL.Query() 366 query.Set("api-version", "2020-06-01") 367 req.URL.RawQuery = query.Encode() 368 req.Header.Set("Accept", "application/json") 369 return req, req.MarshalAsJSON(parameters) 370} 371 372// createOrUpdateHandleResponse handles the CreateOrUpdate response. 373func (client *VirtualMachinesClient) createOrUpdateHandleResponse(resp *azcore.Response) (VirtualMachineResponse, error) { 374 var val *VirtualMachine 375 if err := resp.UnmarshalAsJSON(&val); err != nil { 376 return VirtualMachineResponse{}, err 377 } 378 return VirtualMachineResponse{RawResponse: resp.Response, VirtualMachine: val}, nil 379} 380 381// createOrUpdateHandleError handles the CreateOrUpdate error response. 382func (client *VirtualMachinesClient) createOrUpdateHandleError(resp *azcore.Response) error { 383 body, err := ioutil.ReadAll(resp.Body) 384 if err != nil { 385 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 386 } 387 if len(body) == 0 { 388 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 389 } 390 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 391} 392 393// BeginDeallocate - Shuts down the virtual machine and releases the compute resources. You are not billed for the compute resources that this virtual machine 394// uses. 395func (client *VirtualMachinesClient) BeginDeallocate(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeallocateOptions) (HTTPPollerResponse, error) { 396 resp, err := client.deallocate(ctx, resourceGroupName, vmName, options) 397 if err != nil { 398 return HTTPPollerResponse{}, err 399 } 400 result := HTTPPollerResponse{ 401 RawResponse: resp.Response, 402 } 403 pt, err := armcore.NewPoller("VirtualMachinesClient.Deallocate", "", resp, client.deallocateHandleError) 404 if err != nil { 405 return HTTPPollerResponse{}, err 406 } 407 poller := &httpPoller{ 408 pt: pt, 409 pipeline: client.con.Pipeline(), 410 } 411 result.Poller = poller 412 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 413 return poller.pollUntilDone(ctx, frequency) 414 } 415 return result, nil 416} 417 418// ResumeDeallocate creates a new HTTPPoller from the specified resume token. 419// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 420func (client *VirtualMachinesClient) ResumeDeallocate(token string) (HTTPPoller, error) { 421 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Deallocate", token, client.deallocateHandleError) 422 if err != nil { 423 return nil, err 424 } 425 return &httpPoller{ 426 pipeline: client.con.Pipeline(), 427 pt: pt, 428 }, nil 429} 430 431// Deallocate - Shuts down the virtual machine and releases the compute resources. You are not billed for the compute resources that this virtual machine 432// uses. 433func (client *VirtualMachinesClient) deallocate(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeallocateOptions) (*azcore.Response, error) { 434 req, err := client.deallocateCreateRequest(ctx, resourceGroupName, vmName, options) 435 if err != nil { 436 return nil, err 437 } 438 resp, err := client.con.Pipeline().Do(req) 439 if err != nil { 440 return nil, err 441 } 442 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 443 return nil, client.deallocateHandleError(resp) 444 } 445 return resp, nil 446} 447 448// deallocateCreateRequest creates the Deallocate request. 449func (client *VirtualMachinesClient) deallocateCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeallocateOptions) (*azcore.Request, error) { 450 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate" 451 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 452 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 453 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 454 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 455 if err != nil { 456 return nil, err 457 } 458 req.Telemetry(telemetryInfo) 459 query := req.URL.Query() 460 query.Set("api-version", "2020-06-01") 461 req.URL.RawQuery = query.Encode() 462 return req, nil 463} 464 465// deallocateHandleError handles the Deallocate error response. 466func (client *VirtualMachinesClient) deallocateHandleError(resp *azcore.Response) error { 467 body, err := ioutil.ReadAll(resp.Body) 468 if err != nil { 469 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 470 } 471 if len(body) == 0 { 472 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 473 } 474 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 475} 476 477// BeginDelete - The operation to delete a virtual machine. 478func (client *VirtualMachinesClient) BeginDelete(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeleteOptions) (HTTPPollerResponse, error) { 479 resp, err := client.delete(ctx, resourceGroupName, vmName, options) 480 if err != nil { 481 return HTTPPollerResponse{}, err 482 } 483 result := HTTPPollerResponse{ 484 RawResponse: resp.Response, 485 } 486 pt, err := armcore.NewPoller("VirtualMachinesClient.Delete", "", resp, client.deleteHandleError) 487 if err != nil { 488 return HTTPPollerResponse{}, err 489 } 490 poller := &httpPoller{ 491 pt: pt, 492 pipeline: client.con.Pipeline(), 493 } 494 result.Poller = poller 495 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 496 return poller.pollUntilDone(ctx, frequency) 497 } 498 return result, nil 499} 500 501// ResumeDelete creates a new HTTPPoller from the specified resume token. 502// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 503func (client *VirtualMachinesClient) ResumeDelete(token string) (HTTPPoller, error) { 504 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Delete", token, client.deleteHandleError) 505 if err != nil { 506 return nil, err 507 } 508 return &httpPoller{ 509 pipeline: client.con.Pipeline(), 510 pt: pt, 511 }, nil 512} 513 514// Delete - The operation to delete a virtual machine. 515func (client *VirtualMachinesClient) delete(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeleteOptions) (*azcore.Response, error) { 516 req, err := client.deleteCreateRequest(ctx, resourceGroupName, vmName, options) 517 if err != nil { 518 return nil, err 519 } 520 resp, err := client.con.Pipeline().Do(req) 521 if err != nil { 522 return nil, err 523 } 524 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 525 return nil, client.deleteHandleError(resp) 526 } 527 return resp, nil 528} 529 530// deleteCreateRequest creates the Delete request. 531func (client *VirtualMachinesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeleteOptions) (*azcore.Request, error) { 532 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 533 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 534 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 535 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 536 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 537 if err != nil { 538 return nil, err 539 } 540 req.Telemetry(telemetryInfo) 541 query := req.URL.Query() 542 if options != nil && options.ForceDeletion != nil { 543 query.Set("forceDeletion", strconv.FormatBool(*options.ForceDeletion)) 544 } 545 query.Set("api-version", "2020-06-01") 546 req.URL.RawQuery = query.Encode() 547 return req, nil 548} 549 550// deleteHandleError handles the Delete error response. 551func (client *VirtualMachinesClient) deleteHandleError(resp *azcore.Response) error { 552 body, err := ioutil.ReadAll(resp.Body) 553 if err != nil { 554 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 555 } 556 if len(body) == 0 { 557 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 558 } 559 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 560} 561 562// Generalize - Sets the OS state of the virtual machine to generalized. It is recommended to sysprep the virtual machine before performing this operation. 563// For Windows, please refer to Create a managed image of a generalized VM in Azure [https://docs.microsoft.com/en-us/azure/virtual-machines/windows/capture-image-resource]. 564// For Linux, please refer to How to create an image of a virtual machine or VHD [https://docs.microsoft.com/en-us/azure/virtual-machines/linux/capture-image]. 565func (client *VirtualMachinesClient) Generalize(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGeneralizeOptions) (*http.Response, error) { 566 req, err := client.generalizeCreateRequest(ctx, resourceGroupName, vmName, options) 567 if err != nil { 568 return nil, err 569 } 570 resp, err := client.con.Pipeline().Do(req) 571 if err != nil { 572 return nil, err 573 } 574 if !resp.HasStatusCode(http.StatusOK) { 575 return nil, client.generalizeHandleError(resp) 576 } 577 return resp.Response, nil 578} 579 580// generalizeCreateRequest creates the Generalize request. 581func (client *VirtualMachinesClient) generalizeCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGeneralizeOptions) (*azcore.Request, error) { 582 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize" 583 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 584 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 585 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 586 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 587 if err != nil { 588 return nil, err 589 } 590 req.Telemetry(telemetryInfo) 591 query := req.URL.Query() 592 query.Set("api-version", "2020-06-01") 593 req.URL.RawQuery = query.Encode() 594 return req, nil 595} 596 597// generalizeHandleError handles the Generalize error response. 598func (client *VirtualMachinesClient) generalizeHandleError(resp *azcore.Response) error { 599 body, err := ioutil.ReadAll(resp.Body) 600 if err != nil { 601 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 602 } 603 if len(body) == 0 { 604 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 605 } 606 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 607} 608 609// Get - Retrieves information about the model view or the instance view of a virtual machine. 610func (client *VirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGetOptions) (VirtualMachineResponse, error) { 611 req, err := client.getCreateRequest(ctx, resourceGroupName, vmName, options) 612 if err != nil { 613 return VirtualMachineResponse{}, err 614 } 615 resp, err := client.con.Pipeline().Do(req) 616 if err != nil { 617 return VirtualMachineResponse{}, err 618 } 619 if !resp.HasStatusCode(http.StatusOK) { 620 return VirtualMachineResponse{}, client.getHandleError(resp) 621 } 622 return client.getHandleResponse(resp) 623} 624 625// getCreateRequest creates the Get request. 626func (client *VirtualMachinesClient) getCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGetOptions) (*azcore.Request, error) { 627 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 628 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 629 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 630 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 631 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 632 if err != nil { 633 return nil, err 634 } 635 req.Telemetry(telemetryInfo) 636 query := req.URL.Query() 637 if options != nil && options.Expand != nil { 638 query.Set("$expand", "instanceView") 639 } 640 query.Set("api-version", "2020-06-01") 641 req.URL.RawQuery = query.Encode() 642 req.Header.Set("Accept", "application/json") 643 return req, nil 644} 645 646// getHandleResponse handles the Get response. 647func (client *VirtualMachinesClient) getHandleResponse(resp *azcore.Response) (VirtualMachineResponse, error) { 648 var val *VirtualMachine 649 if err := resp.UnmarshalAsJSON(&val); err != nil { 650 return VirtualMachineResponse{}, err 651 } 652 return VirtualMachineResponse{RawResponse: resp.Response, VirtualMachine: val}, nil 653} 654 655// getHandleError handles the Get error response. 656func (client *VirtualMachinesClient) getHandleError(resp *azcore.Response) error { 657 body, err := ioutil.ReadAll(resp.Body) 658 if err != nil { 659 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 660 } 661 if len(body) == 0 { 662 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 663 } 664 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 665} 666 667// InstanceView - Retrieves information about the run-time state of a virtual machine. 668func (client *VirtualMachinesClient) InstanceView(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesInstanceViewOptions) (VirtualMachineInstanceViewResponse, error) { 669 req, err := client.instanceViewCreateRequest(ctx, resourceGroupName, vmName, options) 670 if err != nil { 671 return VirtualMachineInstanceViewResponse{}, err 672 } 673 resp, err := client.con.Pipeline().Do(req) 674 if err != nil { 675 return VirtualMachineInstanceViewResponse{}, err 676 } 677 if !resp.HasStatusCode(http.StatusOK) { 678 return VirtualMachineInstanceViewResponse{}, client.instanceViewHandleError(resp) 679 } 680 return client.instanceViewHandleResponse(resp) 681} 682 683// instanceViewCreateRequest creates the InstanceView request. 684func (client *VirtualMachinesClient) instanceViewCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesInstanceViewOptions) (*azcore.Request, error) { 685 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView" 686 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 687 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 688 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 689 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 690 if err != nil { 691 return nil, err 692 } 693 req.Telemetry(telemetryInfo) 694 query := req.URL.Query() 695 query.Set("api-version", "2020-06-01") 696 req.URL.RawQuery = query.Encode() 697 req.Header.Set("Accept", "application/json") 698 return req, nil 699} 700 701// instanceViewHandleResponse handles the InstanceView response. 702func (client *VirtualMachinesClient) instanceViewHandleResponse(resp *azcore.Response) (VirtualMachineInstanceViewResponse, error) { 703 var val *VirtualMachineInstanceView 704 if err := resp.UnmarshalAsJSON(&val); err != nil { 705 return VirtualMachineInstanceViewResponse{}, err 706 } 707 return VirtualMachineInstanceViewResponse{RawResponse: resp.Response, VirtualMachineInstanceView: val}, nil 708} 709 710// instanceViewHandleError handles the InstanceView error response. 711func (client *VirtualMachinesClient) instanceViewHandleError(resp *azcore.Response) error { 712 body, err := ioutil.ReadAll(resp.Body) 713 if err != nil { 714 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 715 } 716 if len(body) == 0 { 717 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 718 } 719 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 720} 721 722// List - Lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to get the next page of virtual machines. 723func (client *VirtualMachinesClient) List(resourceGroupName string, options *VirtualMachinesListOptions) VirtualMachineListResultPager { 724 return &virtualMachineListResultPager{ 725 pipeline: client.con.Pipeline(), 726 requester: func(ctx context.Context) (*azcore.Request, error) { 727 return client.listCreateRequest(ctx, resourceGroupName, options) 728 }, 729 responder: client.listHandleResponse, 730 errorer: client.listHandleError, 731 advancer: func(ctx context.Context, resp VirtualMachineListResultResponse) (*azcore.Request, error) { 732 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineListResult.NextLink) 733 }, 734 statusCodes: []int{http.StatusOK}, 735 } 736} 737 738// listCreateRequest creates the List request. 739func (client *VirtualMachinesClient) listCreateRequest(ctx context.Context, resourceGroupName string, options *VirtualMachinesListOptions) (*azcore.Request, error) { 740 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines" 741 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 742 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 743 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 744 if err != nil { 745 return nil, err 746 } 747 req.Telemetry(telemetryInfo) 748 query := req.URL.Query() 749 query.Set("api-version", "2020-06-01") 750 req.URL.RawQuery = query.Encode() 751 req.Header.Set("Accept", "application/json") 752 return req, nil 753} 754 755// listHandleResponse handles the List response. 756func (client *VirtualMachinesClient) listHandleResponse(resp *azcore.Response) (VirtualMachineListResultResponse, error) { 757 var val *VirtualMachineListResult 758 if err := resp.UnmarshalAsJSON(&val); err != nil { 759 return VirtualMachineListResultResponse{}, err 760 } 761 return VirtualMachineListResultResponse{RawResponse: resp.Response, VirtualMachineListResult: val}, nil 762} 763 764// listHandleError handles the List error response. 765func (client *VirtualMachinesClient) listHandleError(resp *azcore.Response) error { 766 body, err := ioutil.ReadAll(resp.Body) 767 if err != nil { 768 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 769 } 770 if len(body) == 0 { 771 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 772 } 773 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 774} 775 776// ListAll - Lists all of the virtual machines in the specified subscription. Use the nextLink property in the response to get the next page of virtual 777// machines. 778func (client *VirtualMachinesClient) ListAll(options *VirtualMachinesListAllOptions) VirtualMachineListResultPager { 779 return &virtualMachineListResultPager{ 780 pipeline: client.con.Pipeline(), 781 requester: func(ctx context.Context) (*azcore.Request, error) { 782 return client.listAllCreateRequest(ctx, options) 783 }, 784 responder: client.listAllHandleResponse, 785 errorer: client.listAllHandleError, 786 advancer: func(ctx context.Context, resp VirtualMachineListResultResponse) (*azcore.Request, error) { 787 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineListResult.NextLink) 788 }, 789 statusCodes: []int{http.StatusOK}, 790 } 791} 792 793// listAllCreateRequest creates the ListAll request. 794func (client *VirtualMachinesClient) listAllCreateRequest(ctx context.Context, options *VirtualMachinesListAllOptions) (*azcore.Request, error) { 795 urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines" 796 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 797 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 798 if err != nil { 799 return nil, err 800 } 801 req.Telemetry(telemetryInfo) 802 query := req.URL.Query() 803 query.Set("api-version", "2020-06-01") 804 if options != nil && options.StatusOnly != nil { 805 query.Set("statusOnly", *options.StatusOnly) 806 } 807 req.URL.RawQuery = query.Encode() 808 req.Header.Set("Accept", "application/json") 809 return req, nil 810} 811 812// listAllHandleResponse handles the ListAll response. 813func (client *VirtualMachinesClient) listAllHandleResponse(resp *azcore.Response) (VirtualMachineListResultResponse, error) { 814 var val *VirtualMachineListResult 815 if err := resp.UnmarshalAsJSON(&val); err != nil { 816 return VirtualMachineListResultResponse{}, err 817 } 818 return VirtualMachineListResultResponse{RawResponse: resp.Response, VirtualMachineListResult: val}, nil 819} 820 821// listAllHandleError handles the ListAll error response. 822func (client *VirtualMachinesClient) listAllHandleError(resp *azcore.Response) error { 823 body, err := ioutil.ReadAll(resp.Body) 824 if err != nil { 825 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 826 } 827 if len(body) == 0 { 828 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 829 } 830 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 831} 832 833// ListAvailableSizes - Lists all available virtual machine sizes to which the specified virtual machine can be resized. 834func (client *VirtualMachinesClient) ListAvailableSizes(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesListAvailableSizesOptions) (VirtualMachineSizeListResultResponse, error) { 835 req, err := client.listAvailableSizesCreateRequest(ctx, resourceGroupName, vmName, options) 836 if err != nil { 837 return VirtualMachineSizeListResultResponse{}, err 838 } 839 resp, err := client.con.Pipeline().Do(req) 840 if err != nil { 841 return VirtualMachineSizeListResultResponse{}, err 842 } 843 if !resp.HasStatusCode(http.StatusOK) { 844 return VirtualMachineSizeListResultResponse{}, client.listAvailableSizesHandleError(resp) 845 } 846 return client.listAvailableSizesHandleResponse(resp) 847} 848 849// listAvailableSizesCreateRequest creates the ListAvailableSizes request. 850func (client *VirtualMachinesClient) listAvailableSizesCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesListAvailableSizesOptions) (*azcore.Request, error) { 851 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes" 852 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 853 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 854 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 855 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 856 if err != nil { 857 return nil, err 858 } 859 req.Telemetry(telemetryInfo) 860 query := req.URL.Query() 861 query.Set("api-version", "2020-06-01") 862 req.URL.RawQuery = query.Encode() 863 req.Header.Set("Accept", "application/json") 864 return req, nil 865} 866 867// listAvailableSizesHandleResponse handles the ListAvailableSizes response. 868func (client *VirtualMachinesClient) listAvailableSizesHandleResponse(resp *azcore.Response) (VirtualMachineSizeListResultResponse, error) { 869 var val *VirtualMachineSizeListResult 870 if err := resp.UnmarshalAsJSON(&val); err != nil { 871 return VirtualMachineSizeListResultResponse{}, err 872 } 873 return VirtualMachineSizeListResultResponse{RawResponse: resp.Response, VirtualMachineSizeListResult: val}, nil 874} 875 876// listAvailableSizesHandleError handles the ListAvailableSizes error response. 877func (client *VirtualMachinesClient) listAvailableSizesHandleError(resp *azcore.Response) error { 878 body, err := ioutil.ReadAll(resp.Body) 879 if err != nil { 880 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 881 } 882 if len(body) == 0 { 883 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 884 } 885 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 886} 887 888// ListByLocation - Gets all the virtual machines under the specified subscription for the specified location. 889func (client *VirtualMachinesClient) ListByLocation(location string, options *VirtualMachinesListByLocationOptions) VirtualMachineListResultPager { 890 return &virtualMachineListResultPager{ 891 pipeline: client.con.Pipeline(), 892 requester: func(ctx context.Context) (*azcore.Request, error) { 893 return client.listByLocationCreateRequest(ctx, location, options) 894 }, 895 responder: client.listByLocationHandleResponse, 896 errorer: client.listByLocationHandleError, 897 advancer: func(ctx context.Context, resp VirtualMachineListResultResponse) (*azcore.Request, error) { 898 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineListResult.NextLink) 899 }, 900 statusCodes: []int{http.StatusOK}, 901 } 902} 903 904// listByLocationCreateRequest creates the ListByLocation request. 905func (client *VirtualMachinesClient) listByLocationCreateRequest(ctx context.Context, location string, options *VirtualMachinesListByLocationOptions) (*azcore.Request, error) { 906 urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines" 907 urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location)) 908 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 909 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 910 if err != nil { 911 return nil, err 912 } 913 req.Telemetry(telemetryInfo) 914 query := req.URL.Query() 915 query.Set("api-version", "2020-06-01") 916 req.URL.RawQuery = query.Encode() 917 req.Header.Set("Accept", "application/json") 918 return req, nil 919} 920 921// listByLocationHandleResponse handles the ListByLocation response. 922func (client *VirtualMachinesClient) listByLocationHandleResponse(resp *azcore.Response) (VirtualMachineListResultResponse, error) { 923 var val *VirtualMachineListResult 924 if err := resp.UnmarshalAsJSON(&val); err != nil { 925 return VirtualMachineListResultResponse{}, err 926 } 927 return VirtualMachineListResultResponse{RawResponse: resp.Response, VirtualMachineListResult: val}, nil 928} 929 930// listByLocationHandleError handles the ListByLocation error response. 931func (client *VirtualMachinesClient) listByLocationHandleError(resp *azcore.Response) error { 932 body, err := ioutil.ReadAll(resp.Body) 933 if err != nil { 934 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 935 } 936 if len(body) == 0 { 937 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 938 } 939 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 940} 941 942// BeginPerformMaintenance - The operation to perform maintenance on a virtual machine. 943func (client *VirtualMachinesClient) BeginPerformMaintenance(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPerformMaintenanceOptions) (HTTPPollerResponse, error) { 944 resp, err := client.performMaintenance(ctx, resourceGroupName, vmName, options) 945 if err != nil { 946 return HTTPPollerResponse{}, err 947 } 948 result := HTTPPollerResponse{ 949 RawResponse: resp.Response, 950 } 951 pt, err := armcore.NewPoller("VirtualMachinesClient.PerformMaintenance", "", resp, client.performMaintenanceHandleError) 952 if err != nil { 953 return HTTPPollerResponse{}, err 954 } 955 poller := &httpPoller{ 956 pt: pt, 957 pipeline: client.con.Pipeline(), 958 } 959 result.Poller = poller 960 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 961 return poller.pollUntilDone(ctx, frequency) 962 } 963 return result, nil 964} 965 966// ResumePerformMaintenance creates a new HTTPPoller from the specified resume token. 967// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 968func (client *VirtualMachinesClient) ResumePerformMaintenance(token string) (HTTPPoller, error) { 969 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.PerformMaintenance", token, client.performMaintenanceHandleError) 970 if err != nil { 971 return nil, err 972 } 973 return &httpPoller{ 974 pipeline: client.con.Pipeline(), 975 pt: pt, 976 }, nil 977} 978 979// PerformMaintenance - The operation to perform maintenance on a virtual machine. 980func (client *VirtualMachinesClient) performMaintenance(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPerformMaintenanceOptions) (*azcore.Response, error) { 981 req, err := client.performMaintenanceCreateRequest(ctx, resourceGroupName, vmName, options) 982 if err != nil { 983 return nil, err 984 } 985 resp, err := client.con.Pipeline().Do(req) 986 if err != nil { 987 return nil, err 988 } 989 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 990 return nil, client.performMaintenanceHandleError(resp) 991 } 992 return resp, nil 993} 994 995// performMaintenanceCreateRequest creates the PerformMaintenance request. 996func (client *VirtualMachinesClient) performMaintenanceCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPerformMaintenanceOptions) (*azcore.Request, error) { 997 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance" 998 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 999 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1000 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1001 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1002 if err != nil { 1003 return nil, err 1004 } 1005 req.Telemetry(telemetryInfo) 1006 query := req.URL.Query() 1007 query.Set("api-version", "2020-06-01") 1008 req.URL.RawQuery = query.Encode() 1009 return req, nil 1010} 1011 1012// performMaintenanceHandleError handles the PerformMaintenance error response. 1013func (client *VirtualMachinesClient) performMaintenanceHandleError(resp *azcore.Response) error { 1014 body, err := ioutil.ReadAll(resp.Body) 1015 if err != nil { 1016 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1017 } 1018 if len(body) == 0 { 1019 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1020 } 1021 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1022} 1023 1024// BeginPowerOff - The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same provisioned resources. You are 1025// still charged for this virtual machine. 1026func (client *VirtualMachinesClient) BeginPowerOff(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPowerOffOptions) (HTTPPollerResponse, error) { 1027 resp, err := client.powerOff(ctx, resourceGroupName, vmName, options) 1028 if err != nil { 1029 return HTTPPollerResponse{}, err 1030 } 1031 result := HTTPPollerResponse{ 1032 RawResponse: resp.Response, 1033 } 1034 pt, err := armcore.NewPoller("VirtualMachinesClient.PowerOff", "", resp, client.powerOffHandleError) 1035 if err != nil { 1036 return HTTPPollerResponse{}, err 1037 } 1038 poller := &httpPoller{ 1039 pt: pt, 1040 pipeline: client.con.Pipeline(), 1041 } 1042 result.Poller = poller 1043 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1044 return poller.pollUntilDone(ctx, frequency) 1045 } 1046 return result, nil 1047} 1048 1049// ResumePowerOff creates a new HTTPPoller from the specified resume token. 1050// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1051func (client *VirtualMachinesClient) ResumePowerOff(token string) (HTTPPoller, error) { 1052 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.PowerOff", token, client.powerOffHandleError) 1053 if err != nil { 1054 return nil, err 1055 } 1056 return &httpPoller{ 1057 pipeline: client.con.Pipeline(), 1058 pt: pt, 1059 }, nil 1060} 1061 1062// PowerOff - The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same provisioned resources. You are still 1063// charged for this virtual machine. 1064func (client *VirtualMachinesClient) powerOff(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPowerOffOptions) (*azcore.Response, error) { 1065 req, err := client.powerOffCreateRequest(ctx, resourceGroupName, vmName, options) 1066 if err != nil { 1067 return nil, err 1068 } 1069 resp, err := client.con.Pipeline().Do(req) 1070 if err != nil { 1071 return nil, err 1072 } 1073 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1074 return nil, client.powerOffHandleError(resp) 1075 } 1076 return resp, nil 1077} 1078 1079// powerOffCreateRequest creates the PowerOff request. 1080func (client *VirtualMachinesClient) powerOffCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPowerOffOptions) (*azcore.Request, error) { 1081 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff" 1082 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1083 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1084 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1085 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1086 if err != nil { 1087 return nil, err 1088 } 1089 req.Telemetry(telemetryInfo) 1090 query := req.URL.Query() 1091 if options != nil && options.SkipShutdown != nil { 1092 query.Set("skipShutdown", strconv.FormatBool(*options.SkipShutdown)) 1093 } 1094 query.Set("api-version", "2020-06-01") 1095 req.URL.RawQuery = query.Encode() 1096 return req, nil 1097} 1098 1099// powerOffHandleError handles the PowerOff error response. 1100func (client *VirtualMachinesClient) powerOffHandleError(resp *azcore.Response) error { 1101 body, err := ioutil.ReadAll(resp.Body) 1102 if err != nil { 1103 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1104 } 1105 if len(body) == 0 { 1106 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1107 } 1108 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1109} 1110 1111// BeginReapply - The operation to reapply a virtual machine's state. 1112func (client *VirtualMachinesClient) BeginReapply(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReapplyOptions) (HTTPPollerResponse, error) { 1113 resp, err := client.reapply(ctx, resourceGroupName, vmName, options) 1114 if err != nil { 1115 return HTTPPollerResponse{}, err 1116 } 1117 result := HTTPPollerResponse{ 1118 RawResponse: resp.Response, 1119 } 1120 pt, err := armcore.NewPoller("VirtualMachinesClient.Reapply", "", resp, client.reapplyHandleError) 1121 if err != nil { 1122 return HTTPPollerResponse{}, err 1123 } 1124 poller := &httpPoller{ 1125 pt: pt, 1126 pipeline: client.con.Pipeline(), 1127 } 1128 result.Poller = poller 1129 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1130 return poller.pollUntilDone(ctx, frequency) 1131 } 1132 return result, nil 1133} 1134 1135// ResumeReapply creates a new HTTPPoller from the specified resume token. 1136// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1137func (client *VirtualMachinesClient) ResumeReapply(token string) (HTTPPoller, error) { 1138 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Reapply", token, client.reapplyHandleError) 1139 if err != nil { 1140 return nil, err 1141 } 1142 return &httpPoller{ 1143 pipeline: client.con.Pipeline(), 1144 pt: pt, 1145 }, nil 1146} 1147 1148// Reapply - The operation to reapply a virtual machine's state. 1149func (client *VirtualMachinesClient) reapply(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReapplyOptions) (*azcore.Response, error) { 1150 req, err := client.reapplyCreateRequest(ctx, resourceGroupName, vmName, options) 1151 if err != nil { 1152 return nil, err 1153 } 1154 resp, err := client.con.Pipeline().Do(req) 1155 if err != nil { 1156 return nil, err 1157 } 1158 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1159 return nil, client.reapplyHandleError(resp) 1160 } 1161 return resp, nil 1162} 1163 1164// reapplyCreateRequest creates the Reapply request. 1165func (client *VirtualMachinesClient) reapplyCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReapplyOptions) (*azcore.Request, error) { 1166 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply" 1167 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1168 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1169 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1170 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1171 if err != nil { 1172 return nil, err 1173 } 1174 req.Telemetry(telemetryInfo) 1175 query := req.URL.Query() 1176 query.Set("api-version", "2020-06-01") 1177 req.URL.RawQuery = query.Encode() 1178 req.Header.Set("Accept", "application/json") 1179 return req, nil 1180} 1181 1182// reapplyHandleError handles the Reapply error response. 1183func (client *VirtualMachinesClient) reapplyHandleError(resp *azcore.Response) error { 1184 var err CloudError 1185 if err := resp.UnmarshalAsJSON(&err); err != nil { 1186 return err 1187 } 1188 return azcore.NewResponseError(&err, resp.Response) 1189} 1190 1191// BeginRedeploy - Shuts down the virtual machine, moves it to a new node, and powers it back on. 1192func (client *VirtualMachinesClient) BeginRedeploy(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRedeployOptions) (HTTPPollerResponse, error) { 1193 resp, err := client.redeploy(ctx, resourceGroupName, vmName, options) 1194 if err != nil { 1195 return HTTPPollerResponse{}, err 1196 } 1197 result := HTTPPollerResponse{ 1198 RawResponse: resp.Response, 1199 } 1200 pt, err := armcore.NewPoller("VirtualMachinesClient.Redeploy", "", resp, client.redeployHandleError) 1201 if err != nil { 1202 return HTTPPollerResponse{}, err 1203 } 1204 poller := &httpPoller{ 1205 pt: pt, 1206 pipeline: client.con.Pipeline(), 1207 } 1208 result.Poller = poller 1209 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1210 return poller.pollUntilDone(ctx, frequency) 1211 } 1212 return result, nil 1213} 1214 1215// ResumeRedeploy creates a new HTTPPoller from the specified resume token. 1216// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1217func (client *VirtualMachinesClient) ResumeRedeploy(token string) (HTTPPoller, error) { 1218 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Redeploy", token, client.redeployHandleError) 1219 if err != nil { 1220 return nil, err 1221 } 1222 return &httpPoller{ 1223 pipeline: client.con.Pipeline(), 1224 pt: pt, 1225 }, nil 1226} 1227 1228// Redeploy - Shuts down the virtual machine, moves it to a new node, and powers it back on. 1229func (client *VirtualMachinesClient) redeploy(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRedeployOptions) (*azcore.Response, error) { 1230 req, err := client.redeployCreateRequest(ctx, resourceGroupName, vmName, options) 1231 if err != nil { 1232 return nil, err 1233 } 1234 resp, err := client.con.Pipeline().Do(req) 1235 if err != nil { 1236 return nil, err 1237 } 1238 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1239 return nil, client.redeployHandleError(resp) 1240 } 1241 return resp, nil 1242} 1243 1244// redeployCreateRequest creates the Redeploy request. 1245func (client *VirtualMachinesClient) redeployCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRedeployOptions) (*azcore.Request, error) { 1246 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy" 1247 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1248 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1249 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1250 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1251 if err != nil { 1252 return nil, err 1253 } 1254 req.Telemetry(telemetryInfo) 1255 query := req.URL.Query() 1256 query.Set("api-version", "2020-06-01") 1257 req.URL.RawQuery = query.Encode() 1258 return req, nil 1259} 1260 1261// redeployHandleError handles the Redeploy error response. 1262func (client *VirtualMachinesClient) redeployHandleError(resp *azcore.Response) error { 1263 body, err := ioutil.ReadAll(resp.Body) 1264 if err != nil { 1265 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1266 } 1267 if len(body) == 0 { 1268 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1269 } 1270 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1271} 1272 1273// BeginReimage - Reimages the virtual machine which has an ephemeral OS disk back to its initial state. 1274func (client *VirtualMachinesClient) BeginReimage(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReimageOptions) (HTTPPollerResponse, error) { 1275 resp, err := client.reimage(ctx, resourceGroupName, vmName, options) 1276 if err != nil { 1277 return HTTPPollerResponse{}, err 1278 } 1279 result := HTTPPollerResponse{ 1280 RawResponse: resp.Response, 1281 } 1282 pt, err := armcore.NewPoller("VirtualMachinesClient.Reimage", "", resp, client.reimageHandleError) 1283 if err != nil { 1284 return HTTPPollerResponse{}, err 1285 } 1286 poller := &httpPoller{ 1287 pt: pt, 1288 pipeline: client.con.Pipeline(), 1289 } 1290 result.Poller = poller 1291 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1292 return poller.pollUntilDone(ctx, frequency) 1293 } 1294 return result, nil 1295} 1296 1297// ResumeReimage creates a new HTTPPoller from the specified resume token. 1298// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1299func (client *VirtualMachinesClient) ResumeReimage(token string) (HTTPPoller, error) { 1300 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Reimage", token, client.reimageHandleError) 1301 if err != nil { 1302 return nil, err 1303 } 1304 return &httpPoller{ 1305 pipeline: client.con.Pipeline(), 1306 pt: pt, 1307 }, nil 1308} 1309 1310// Reimage - Reimages the virtual machine which has an ephemeral OS disk back to its initial state. 1311func (client *VirtualMachinesClient) reimage(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReimageOptions) (*azcore.Response, error) { 1312 req, err := client.reimageCreateRequest(ctx, resourceGroupName, vmName, options) 1313 if err != nil { 1314 return nil, err 1315 } 1316 resp, err := client.con.Pipeline().Do(req) 1317 if err != nil { 1318 return nil, err 1319 } 1320 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1321 return nil, client.reimageHandleError(resp) 1322 } 1323 return resp, nil 1324} 1325 1326// reimageCreateRequest creates the Reimage request. 1327func (client *VirtualMachinesClient) reimageCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReimageOptions) (*azcore.Request, error) { 1328 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage" 1329 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1330 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1331 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1332 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1333 if err != nil { 1334 return nil, err 1335 } 1336 req.Telemetry(telemetryInfo) 1337 query := req.URL.Query() 1338 query.Set("api-version", "2020-06-01") 1339 req.URL.RawQuery = query.Encode() 1340 if options != nil { 1341 return req, req.MarshalAsJSON(options.Parameters) 1342 } 1343 return req, nil 1344} 1345 1346// reimageHandleError handles the Reimage error response. 1347func (client *VirtualMachinesClient) reimageHandleError(resp *azcore.Response) error { 1348 body, err := ioutil.ReadAll(resp.Body) 1349 if err != nil { 1350 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1351 } 1352 if len(body) == 0 { 1353 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1354 } 1355 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1356} 1357 1358// BeginRestart - The operation to restart a virtual machine. 1359func (client *VirtualMachinesClient) BeginRestart(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRestartOptions) (HTTPPollerResponse, error) { 1360 resp, err := client.restart(ctx, resourceGroupName, vmName, options) 1361 if err != nil { 1362 return HTTPPollerResponse{}, err 1363 } 1364 result := HTTPPollerResponse{ 1365 RawResponse: resp.Response, 1366 } 1367 pt, err := armcore.NewPoller("VirtualMachinesClient.Restart", "", resp, client.restartHandleError) 1368 if err != nil { 1369 return HTTPPollerResponse{}, err 1370 } 1371 poller := &httpPoller{ 1372 pt: pt, 1373 pipeline: client.con.Pipeline(), 1374 } 1375 result.Poller = poller 1376 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1377 return poller.pollUntilDone(ctx, frequency) 1378 } 1379 return result, nil 1380} 1381 1382// ResumeRestart creates a new HTTPPoller from the specified resume token. 1383// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1384func (client *VirtualMachinesClient) ResumeRestart(token string) (HTTPPoller, error) { 1385 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Restart", token, client.restartHandleError) 1386 if err != nil { 1387 return nil, err 1388 } 1389 return &httpPoller{ 1390 pipeline: client.con.Pipeline(), 1391 pt: pt, 1392 }, nil 1393} 1394 1395// Restart - The operation to restart a virtual machine. 1396func (client *VirtualMachinesClient) restart(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRestartOptions) (*azcore.Response, error) { 1397 req, err := client.restartCreateRequest(ctx, resourceGroupName, vmName, options) 1398 if err != nil { 1399 return nil, err 1400 } 1401 resp, err := client.con.Pipeline().Do(req) 1402 if err != nil { 1403 return nil, err 1404 } 1405 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1406 return nil, client.restartHandleError(resp) 1407 } 1408 return resp, nil 1409} 1410 1411// restartCreateRequest creates the Restart request. 1412func (client *VirtualMachinesClient) restartCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRestartOptions) (*azcore.Request, error) { 1413 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart" 1414 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1415 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1416 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1417 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1418 if err != nil { 1419 return nil, err 1420 } 1421 req.Telemetry(telemetryInfo) 1422 query := req.URL.Query() 1423 query.Set("api-version", "2020-06-01") 1424 req.URL.RawQuery = query.Encode() 1425 return req, nil 1426} 1427 1428// restartHandleError handles the Restart error response. 1429func (client *VirtualMachinesClient) restartHandleError(resp *azcore.Response) error { 1430 body, err := ioutil.ReadAll(resp.Body) 1431 if err != nil { 1432 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1433 } 1434 if len(body) == 0 { 1435 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1436 } 1437 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1438} 1439 1440// RetrieveBootDiagnosticsData - The operation to retrieve SAS URIs for a virtual machine's boot diagnostic logs. 1441func (client *VirtualMachinesClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesRetrieveBootDiagnosticsDataOptions) (RetrieveBootDiagnosticsDataResultResponse, error) { 1442 req, err := client.retrieveBootDiagnosticsDataCreateRequest(ctx, resourceGroupName, vmName, options) 1443 if err != nil { 1444 return RetrieveBootDiagnosticsDataResultResponse{}, err 1445 } 1446 resp, err := client.con.Pipeline().Do(req) 1447 if err != nil { 1448 return RetrieveBootDiagnosticsDataResultResponse{}, err 1449 } 1450 if !resp.HasStatusCode(http.StatusOK) { 1451 return RetrieveBootDiagnosticsDataResultResponse{}, client.retrieveBootDiagnosticsDataHandleError(resp) 1452 } 1453 return client.retrieveBootDiagnosticsDataHandleResponse(resp) 1454} 1455 1456// retrieveBootDiagnosticsDataCreateRequest creates the RetrieveBootDiagnosticsData request. 1457func (client *VirtualMachinesClient) retrieveBootDiagnosticsDataCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesRetrieveBootDiagnosticsDataOptions) (*azcore.Request, error) { 1458 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData" 1459 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1460 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1461 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1462 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1463 if err != nil { 1464 return nil, err 1465 } 1466 req.Telemetry(telemetryInfo) 1467 query := req.URL.Query() 1468 if options != nil && options.SasUriExpirationTimeInMinutes != nil { 1469 query.Set("sasUriExpirationTimeInMinutes", strconv.FormatInt(int64(*options.SasUriExpirationTimeInMinutes), 10)) 1470 } 1471 query.Set("api-version", "2020-06-01") 1472 req.URL.RawQuery = query.Encode() 1473 req.Header.Set("Accept", "application/json") 1474 return req, nil 1475} 1476 1477// retrieveBootDiagnosticsDataHandleResponse handles the RetrieveBootDiagnosticsData response. 1478func (client *VirtualMachinesClient) retrieveBootDiagnosticsDataHandleResponse(resp *azcore.Response) (RetrieveBootDiagnosticsDataResultResponse, error) { 1479 var val *RetrieveBootDiagnosticsDataResult 1480 if err := resp.UnmarshalAsJSON(&val); err != nil { 1481 return RetrieveBootDiagnosticsDataResultResponse{}, err 1482 } 1483 return RetrieveBootDiagnosticsDataResultResponse{RawResponse: resp.Response, RetrieveBootDiagnosticsDataResult: val}, nil 1484} 1485 1486// retrieveBootDiagnosticsDataHandleError handles the RetrieveBootDiagnosticsData error response. 1487func (client *VirtualMachinesClient) retrieveBootDiagnosticsDataHandleError(resp *azcore.Response) error { 1488 var err CloudError 1489 if err := resp.UnmarshalAsJSON(&err); err != nil { 1490 return err 1491 } 1492 return azcore.NewResponseError(&err, resp.Response) 1493} 1494 1495// BeginRunCommand - Run command on the VM. 1496func (client *VirtualMachinesClient) BeginRunCommand(ctx context.Context, resourceGroupName string, vmName string, parameters RunCommandInput, options *VirtualMachinesBeginRunCommandOptions) (RunCommandResultPollerResponse, error) { 1497 resp, err := client.runCommand(ctx, resourceGroupName, vmName, parameters, options) 1498 if err != nil { 1499 return RunCommandResultPollerResponse{}, err 1500 } 1501 result := RunCommandResultPollerResponse{ 1502 RawResponse: resp.Response, 1503 } 1504 pt, err := armcore.NewPoller("VirtualMachinesClient.RunCommand", "location", resp, client.runCommandHandleError) 1505 if err != nil { 1506 return RunCommandResultPollerResponse{}, err 1507 } 1508 poller := &runCommandResultPoller{ 1509 pt: pt, 1510 pipeline: client.con.Pipeline(), 1511 } 1512 result.Poller = poller 1513 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (RunCommandResultResponse, error) { 1514 return poller.pollUntilDone(ctx, frequency) 1515 } 1516 return result, nil 1517} 1518 1519// ResumeRunCommand creates a new RunCommandResultPoller from the specified resume token. 1520// token - The value must come from a previous call to RunCommandResultPoller.ResumeToken(). 1521func (client *VirtualMachinesClient) ResumeRunCommand(token string) (RunCommandResultPoller, error) { 1522 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.RunCommand", token, client.runCommandHandleError) 1523 if err != nil { 1524 return nil, err 1525 } 1526 return &runCommandResultPoller{ 1527 pipeline: client.con.Pipeline(), 1528 pt: pt, 1529 }, nil 1530} 1531 1532// RunCommand - Run command on the VM. 1533func (client *VirtualMachinesClient) runCommand(ctx context.Context, resourceGroupName string, vmName string, parameters RunCommandInput, options *VirtualMachinesBeginRunCommandOptions) (*azcore.Response, error) { 1534 req, err := client.runCommandCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 1535 if err != nil { 1536 return nil, err 1537 } 1538 resp, err := client.con.Pipeline().Do(req) 1539 if err != nil { 1540 return nil, err 1541 } 1542 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1543 return nil, client.runCommandHandleError(resp) 1544 } 1545 return resp, nil 1546} 1547 1548// runCommandCreateRequest creates the RunCommand request. 1549func (client *VirtualMachinesClient) runCommandCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters RunCommandInput, options *VirtualMachinesBeginRunCommandOptions) (*azcore.Request, error) { 1550 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand" 1551 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1552 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1553 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1554 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1555 if err != nil { 1556 return nil, err 1557 } 1558 req.Telemetry(telemetryInfo) 1559 query := req.URL.Query() 1560 query.Set("api-version", "2020-06-01") 1561 req.URL.RawQuery = query.Encode() 1562 req.Header.Set("Accept", "application/json, text/json") 1563 return req, req.MarshalAsJSON(parameters) 1564} 1565 1566// runCommandHandleResponse handles the RunCommand response. 1567func (client *VirtualMachinesClient) runCommandHandleResponse(resp *azcore.Response) (RunCommandResultResponse, error) { 1568 var val *RunCommandResult 1569 if err := resp.UnmarshalAsJSON(&val); err != nil { 1570 return RunCommandResultResponse{}, err 1571 } 1572 return RunCommandResultResponse{RawResponse: resp.Response, RunCommandResult: val}, nil 1573} 1574 1575// runCommandHandleError handles the RunCommand error response. 1576func (client *VirtualMachinesClient) runCommandHandleError(resp *azcore.Response) error { 1577 body, err := ioutil.ReadAll(resp.Body) 1578 if err != nil { 1579 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1580 } 1581 if len(body) == 0 { 1582 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1583 } 1584 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1585} 1586 1587// SimulateEviction - The operation to simulate the eviction of spot virtual machine. 1588func (client *VirtualMachinesClient) SimulateEviction(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesSimulateEvictionOptions) (*http.Response, error) { 1589 req, err := client.simulateEvictionCreateRequest(ctx, resourceGroupName, vmName, options) 1590 if err != nil { 1591 return nil, err 1592 } 1593 resp, err := client.con.Pipeline().Do(req) 1594 if err != nil { 1595 return nil, err 1596 } 1597 if !resp.HasStatusCode(http.StatusNoContent) { 1598 return nil, client.simulateEvictionHandleError(resp) 1599 } 1600 return resp.Response, nil 1601} 1602 1603// simulateEvictionCreateRequest creates the SimulateEviction request. 1604func (client *VirtualMachinesClient) simulateEvictionCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesSimulateEvictionOptions) (*azcore.Request, error) { 1605 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction" 1606 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1607 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1608 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1609 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1610 if err != nil { 1611 return nil, err 1612 } 1613 req.Telemetry(telemetryInfo) 1614 query := req.URL.Query() 1615 query.Set("api-version", "2020-06-01") 1616 req.URL.RawQuery = query.Encode() 1617 return req, nil 1618} 1619 1620// simulateEvictionHandleError handles the SimulateEviction error response. 1621func (client *VirtualMachinesClient) simulateEvictionHandleError(resp *azcore.Response) error { 1622 body, err := ioutil.ReadAll(resp.Body) 1623 if err != nil { 1624 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1625 } 1626 if len(body) == 0 { 1627 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1628 } 1629 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1630} 1631 1632// BeginStart - The operation to start a virtual machine. 1633func (client *VirtualMachinesClient) BeginStart(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginStartOptions) (HTTPPollerResponse, error) { 1634 resp, err := client.start(ctx, resourceGroupName, vmName, options) 1635 if err != nil { 1636 return HTTPPollerResponse{}, err 1637 } 1638 result := HTTPPollerResponse{ 1639 RawResponse: resp.Response, 1640 } 1641 pt, err := armcore.NewPoller("VirtualMachinesClient.Start", "", resp, client.startHandleError) 1642 if err != nil { 1643 return HTTPPollerResponse{}, err 1644 } 1645 poller := &httpPoller{ 1646 pt: pt, 1647 pipeline: client.con.Pipeline(), 1648 } 1649 result.Poller = poller 1650 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1651 return poller.pollUntilDone(ctx, frequency) 1652 } 1653 return result, nil 1654} 1655 1656// ResumeStart creates a new HTTPPoller from the specified resume token. 1657// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1658func (client *VirtualMachinesClient) ResumeStart(token string) (HTTPPoller, error) { 1659 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Start", token, client.startHandleError) 1660 if err != nil { 1661 return nil, err 1662 } 1663 return &httpPoller{ 1664 pipeline: client.con.Pipeline(), 1665 pt: pt, 1666 }, nil 1667} 1668 1669// Start - The operation to start a virtual machine. 1670func (client *VirtualMachinesClient) start(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginStartOptions) (*azcore.Response, error) { 1671 req, err := client.startCreateRequest(ctx, resourceGroupName, vmName, options) 1672 if err != nil { 1673 return nil, err 1674 } 1675 resp, err := client.con.Pipeline().Do(req) 1676 if err != nil { 1677 return nil, err 1678 } 1679 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1680 return nil, client.startHandleError(resp) 1681 } 1682 return resp, nil 1683} 1684 1685// startCreateRequest creates the Start request. 1686func (client *VirtualMachinesClient) startCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginStartOptions) (*azcore.Request, error) { 1687 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start" 1688 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1689 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1690 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1691 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1692 if err != nil { 1693 return nil, err 1694 } 1695 req.Telemetry(telemetryInfo) 1696 query := req.URL.Query() 1697 query.Set("api-version", "2020-06-01") 1698 req.URL.RawQuery = query.Encode() 1699 return req, nil 1700} 1701 1702// startHandleError handles the Start error response. 1703func (client *VirtualMachinesClient) startHandleError(resp *azcore.Response) error { 1704 body, err := ioutil.ReadAll(resp.Body) 1705 if err != nil { 1706 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1707 } 1708 if len(body) == 0 { 1709 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1710 } 1711 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1712} 1713 1714// BeginUpdate - The operation to update a virtual machine. 1715func (client *VirtualMachinesClient) BeginUpdate(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineUpdate, options *VirtualMachinesBeginUpdateOptions) (VirtualMachinePollerResponse, error) { 1716 resp, err := client.update(ctx, resourceGroupName, vmName, parameters, options) 1717 if err != nil { 1718 return VirtualMachinePollerResponse{}, err 1719 } 1720 result := VirtualMachinePollerResponse{ 1721 RawResponse: resp.Response, 1722 } 1723 pt, err := armcore.NewPoller("VirtualMachinesClient.Update", "", resp, client.updateHandleError) 1724 if err != nil { 1725 return VirtualMachinePollerResponse{}, err 1726 } 1727 poller := &virtualMachinePoller{ 1728 pt: pt, 1729 pipeline: client.con.Pipeline(), 1730 } 1731 result.Poller = poller 1732 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineResponse, error) { 1733 return poller.pollUntilDone(ctx, frequency) 1734 } 1735 return result, nil 1736} 1737 1738// ResumeUpdate creates a new VirtualMachinePoller from the specified resume token. 1739// token - The value must come from a previous call to VirtualMachinePoller.ResumeToken(). 1740func (client *VirtualMachinesClient) ResumeUpdate(token string) (VirtualMachinePoller, error) { 1741 pt, err := armcore.NewPollerFromResumeToken("VirtualMachinesClient.Update", token, client.updateHandleError) 1742 if err != nil { 1743 return nil, err 1744 } 1745 return &virtualMachinePoller{ 1746 pipeline: client.con.Pipeline(), 1747 pt: pt, 1748 }, nil 1749} 1750 1751// Update - The operation to update a virtual machine. 1752func (client *VirtualMachinesClient) update(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineUpdate, options *VirtualMachinesBeginUpdateOptions) (*azcore.Response, error) { 1753 req, err := client.updateCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 1754 if err != nil { 1755 return nil, err 1756 } 1757 resp, err := client.con.Pipeline().Do(req) 1758 if err != nil { 1759 return nil, err 1760 } 1761 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 1762 return nil, client.updateHandleError(resp) 1763 } 1764 return resp, nil 1765} 1766 1767// updateCreateRequest creates the Update request. 1768func (client *VirtualMachinesClient) updateCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineUpdate, options *VirtualMachinesBeginUpdateOptions) (*azcore.Request, error) { 1769 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 1770 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1771 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1772 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1773 req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1774 if err != nil { 1775 return nil, err 1776 } 1777 req.Telemetry(telemetryInfo) 1778 query := req.URL.Query() 1779 query.Set("api-version", "2020-06-01") 1780 req.URL.RawQuery = query.Encode() 1781 req.Header.Set("Accept", "application/json") 1782 return req, req.MarshalAsJSON(parameters) 1783} 1784 1785// updateHandleResponse handles the Update response. 1786func (client *VirtualMachinesClient) updateHandleResponse(resp *azcore.Response) (VirtualMachineResponse, error) { 1787 var val *VirtualMachine 1788 if err := resp.UnmarshalAsJSON(&val); err != nil { 1789 return VirtualMachineResponse{}, err 1790 } 1791 return VirtualMachineResponse{RawResponse: resp.Response, VirtualMachine: val}, nil 1792} 1793 1794// updateHandleError handles the Update error response. 1795func (client *VirtualMachinesClient) updateHandleError(resp *azcore.Response) error { 1796 body, err := ioutil.ReadAll(resp.Body) 1797 if err != nil { 1798 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1799 } 1800 if len(body) == 0 { 1801 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1802 } 1803 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1804} 1805