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 "net/http" 17 "net/url" 18 "strconv" 19 "strings" 20 "time" 21) 22 23// VirtualMachinesClient contains the methods for the VirtualMachines group. 24// Don't use this type directly, use NewVirtualMachinesClient() instead. 25type VirtualMachinesClient struct { 26 con *armcore.Connection 27 subscriptionID string 28} 29 30// NewVirtualMachinesClient creates a new instance of VirtualMachinesClient with the specified values. 31func NewVirtualMachinesClient(con *armcore.Connection, subscriptionID string) *VirtualMachinesClient { 32 return &VirtualMachinesClient{con: con, subscriptionID: subscriptionID} 33} 34 35// BeginAssessPatches - Assess patches on the VM. 36// If the operation fails it returns the *CloudError error type. 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.NewLROPoller("VirtualMachinesClient.AssessPatches", "location", resp, client.con.Pipeline(), client.assessPatchesHandleError) 46 if err != nil { 47 return VirtualMachineAssessPatchesResultPollerResponse{}, err 48 } 49 poller := &virtualMachineAssessPatchesResultPoller{ 50 pt: pt, 51 } 52 result.Poller = poller 53 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineAssessPatchesResultResponse, error) { 54 return poller.pollUntilDone(ctx, frequency) 55 } 56 return result, nil 57} 58 59// ResumeAssessPatches creates a new VirtualMachineAssessPatchesResultPoller from the specified resume token. 60// token - The value must come from a previous call to VirtualMachineAssessPatchesResultPoller.ResumeToken(). 61func (client *VirtualMachinesClient) ResumeAssessPatches(ctx context.Context, token string) (VirtualMachineAssessPatchesResultPollerResponse, error) { 62 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.AssessPatches", token, client.con.Pipeline(), client.assessPatchesHandleError) 63 if err != nil { 64 return VirtualMachineAssessPatchesResultPollerResponse{}, err 65 } 66 poller := &virtualMachineAssessPatchesResultPoller{ 67 pt: pt, 68 } 69 resp, err := poller.Poll(ctx) 70 if err != nil { 71 return VirtualMachineAssessPatchesResultPollerResponse{}, err 72 } 73 result := VirtualMachineAssessPatchesResultPollerResponse{ 74 RawResponse: resp, 75 } 76 result.Poller = poller 77 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineAssessPatchesResultResponse, error) { 78 return poller.pollUntilDone(ctx, frequency) 79 } 80 return result, nil 81} 82 83// AssessPatches - Assess patches on the VM. 84// If the operation fails it returns the *CloudError error type. 85func (client *VirtualMachinesClient) assessPatches(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginAssessPatchesOptions) (*azcore.Response, error) { 86 req, err := client.assessPatchesCreateRequest(ctx, resourceGroupName, vmName, options) 87 if err != nil { 88 return nil, err 89 } 90 resp, err := client.con.Pipeline().Do(req) 91 if err != nil { 92 return nil, err 93 } 94 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 95 return nil, client.assessPatchesHandleError(resp) 96 } 97 return resp, nil 98} 99 100// assessPatchesCreateRequest creates the AssessPatches request. 101func (client *VirtualMachinesClient) assessPatchesCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginAssessPatchesOptions) (*azcore.Request, error) { 102 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches" 103 if resourceGroupName == "" { 104 return nil, errors.New("parameter resourceGroupName cannot be empty") 105 } 106 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 107 if vmName == "" { 108 return nil, errors.New("parameter vmName cannot be empty") 109 } 110 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 111 if client.subscriptionID == "" { 112 return nil, errors.New("parameter client.subscriptionID cannot be empty") 113 } 114 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 115 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 116 if err != nil { 117 return nil, err 118 } 119 req.Telemetry(telemetryInfo) 120 reqQP := req.URL.Query() 121 reqQP.Set("api-version", "2021-03-01") 122 req.URL.RawQuery = reqQP.Encode() 123 req.Header.Set("Accept", "application/json") 124 return req, nil 125} 126 127// assessPatchesHandleError handles the AssessPatches error response. 128func (client *VirtualMachinesClient) assessPatchesHandleError(resp *azcore.Response) error { 129 body, err := resp.Payload() 130 if err != nil { 131 return azcore.NewResponseError(err, resp.Response) 132 } 133 errType := CloudError{raw: string(body)} 134 if err := resp.UnmarshalAsJSON(&errType); err != nil { 135 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 136 } 137 return azcore.NewResponseError(&errType, resp.Response) 138} 139 140// BeginCapture - Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create similar VMs. 141// If the operation fails it returns a generic error. 142func (client *VirtualMachinesClient) BeginCapture(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineCaptureParameters, options *VirtualMachinesBeginCaptureOptions) (VirtualMachineCaptureResultPollerResponse, error) { 143 resp, err := client.capture(ctx, resourceGroupName, vmName, parameters, options) 144 if err != nil { 145 return VirtualMachineCaptureResultPollerResponse{}, err 146 } 147 result := VirtualMachineCaptureResultPollerResponse{ 148 RawResponse: resp.Response, 149 } 150 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Capture", "location", resp, client.con.Pipeline(), client.captureHandleError) 151 if err != nil { 152 return VirtualMachineCaptureResultPollerResponse{}, err 153 } 154 poller := &virtualMachineCaptureResultPoller{ 155 pt: pt, 156 } 157 result.Poller = poller 158 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineCaptureResultResponse, error) { 159 return poller.pollUntilDone(ctx, frequency) 160 } 161 return result, nil 162} 163 164// ResumeCapture creates a new VirtualMachineCaptureResultPoller from the specified resume token. 165// token - The value must come from a previous call to VirtualMachineCaptureResultPoller.ResumeToken(). 166func (client *VirtualMachinesClient) ResumeCapture(ctx context.Context, token string) (VirtualMachineCaptureResultPollerResponse, error) { 167 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Capture", token, client.con.Pipeline(), client.captureHandleError) 168 if err != nil { 169 return VirtualMachineCaptureResultPollerResponse{}, err 170 } 171 poller := &virtualMachineCaptureResultPoller{ 172 pt: pt, 173 } 174 resp, err := poller.Poll(ctx) 175 if err != nil { 176 return VirtualMachineCaptureResultPollerResponse{}, err 177 } 178 result := VirtualMachineCaptureResultPollerResponse{ 179 RawResponse: resp, 180 } 181 result.Poller = poller 182 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineCaptureResultResponse, error) { 183 return poller.pollUntilDone(ctx, frequency) 184 } 185 return result, nil 186} 187 188// Capture - Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create similar VMs. 189// If the operation fails it returns a generic error. 190func (client *VirtualMachinesClient) capture(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineCaptureParameters, options *VirtualMachinesBeginCaptureOptions) (*azcore.Response, error) { 191 req, err := client.captureCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 192 if err != nil { 193 return nil, err 194 } 195 resp, err := client.con.Pipeline().Do(req) 196 if err != nil { 197 return nil, err 198 } 199 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 200 return nil, client.captureHandleError(resp) 201 } 202 return resp, nil 203} 204 205// captureCreateRequest creates the Capture request. 206func (client *VirtualMachinesClient) captureCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineCaptureParameters, options *VirtualMachinesBeginCaptureOptions) (*azcore.Request, error) { 207 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture" 208 if resourceGroupName == "" { 209 return nil, errors.New("parameter resourceGroupName cannot be empty") 210 } 211 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 212 if vmName == "" { 213 return nil, errors.New("parameter vmName cannot be empty") 214 } 215 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 216 if client.subscriptionID == "" { 217 return nil, errors.New("parameter client.subscriptionID cannot be empty") 218 } 219 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 220 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 221 if err != nil { 222 return nil, err 223 } 224 req.Telemetry(telemetryInfo) 225 reqQP := req.URL.Query() 226 reqQP.Set("api-version", "2021-03-01") 227 req.URL.RawQuery = reqQP.Encode() 228 req.Header.Set("Accept", "application/json") 229 return req, req.MarshalAsJSON(parameters) 230} 231 232// captureHandleError handles the Capture error response. 233func (client *VirtualMachinesClient) captureHandleError(resp *azcore.Response) error { 234 body, err := resp.Payload() 235 if err != nil { 236 return azcore.NewResponseError(err, resp.Response) 237 } 238 if len(body) == 0 { 239 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 240 } 241 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 242} 243 244// BeginConvertToManagedDisks - Converts virtual machine disks from blob-based to managed disks. Virtual machine must be stop-deallocated before invoking 245// this operation. 246// If the operation fails it returns a generic error. 247func (client *VirtualMachinesClient) BeginConvertToManagedDisks(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginConvertToManagedDisksOptions) (HTTPPollerResponse, error) { 248 resp, err := client.convertToManagedDisks(ctx, resourceGroupName, vmName, options) 249 if err != nil { 250 return HTTPPollerResponse{}, err 251 } 252 result := HTTPPollerResponse{ 253 RawResponse: resp.Response, 254 } 255 pt, err := armcore.NewLROPoller("VirtualMachinesClient.ConvertToManagedDisks", "", resp, client.con.Pipeline(), client.convertToManagedDisksHandleError) 256 if err != nil { 257 return HTTPPollerResponse{}, err 258 } 259 poller := &httpPoller{ 260 pt: pt, 261 } 262 result.Poller = poller 263 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 264 return poller.pollUntilDone(ctx, frequency) 265 } 266 return result, nil 267} 268 269// ResumeConvertToManagedDisks creates a new HTTPPoller from the specified resume token. 270// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 271func (client *VirtualMachinesClient) ResumeConvertToManagedDisks(ctx context.Context, token string) (HTTPPollerResponse, error) { 272 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.ConvertToManagedDisks", token, client.con.Pipeline(), client.convertToManagedDisksHandleError) 273 if err != nil { 274 return HTTPPollerResponse{}, err 275 } 276 poller := &httpPoller{ 277 pt: pt, 278 } 279 resp, err := poller.Poll(ctx) 280 if err != nil { 281 return HTTPPollerResponse{}, err 282 } 283 result := HTTPPollerResponse{ 284 RawResponse: resp, 285 } 286 result.Poller = poller 287 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 288 return poller.pollUntilDone(ctx, frequency) 289 } 290 return result, nil 291} 292 293// ConvertToManagedDisks - Converts virtual machine disks from blob-based to managed disks. Virtual machine must be stop-deallocated before invoking this 294// operation. 295// If the operation fails it returns a generic error. 296func (client *VirtualMachinesClient) convertToManagedDisks(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginConvertToManagedDisksOptions) (*azcore.Response, error) { 297 req, err := client.convertToManagedDisksCreateRequest(ctx, resourceGroupName, vmName, options) 298 if err != nil { 299 return nil, err 300 } 301 resp, err := client.con.Pipeline().Do(req) 302 if err != nil { 303 return nil, err 304 } 305 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 306 return nil, client.convertToManagedDisksHandleError(resp) 307 } 308 return resp, nil 309} 310 311// convertToManagedDisksCreateRequest creates the ConvertToManagedDisks request. 312func (client *VirtualMachinesClient) convertToManagedDisksCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginConvertToManagedDisksOptions) (*azcore.Request, error) { 313 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks" 314 if resourceGroupName == "" { 315 return nil, errors.New("parameter resourceGroupName cannot be empty") 316 } 317 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 318 if vmName == "" { 319 return nil, errors.New("parameter vmName cannot be empty") 320 } 321 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 322 if client.subscriptionID == "" { 323 return nil, errors.New("parameter client.subscriptionID cannot be empty") 324 } 325 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 326 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 327 if err != nil { 328 return nil, err 329 } 330 req.Telemetry(telemetryInfo) 331 reqQP := req.URL.Query() 332 reqQP.Set("api-version", "2021-03-01") 333 req.URL.RawQuery = reqQP.Encode() 334 return req, nil 335} 336 337// convertToManagedDisksHandleError handles the ConvertToManagedDisks error response. 338func (client *VirtualMachinesClient) convertToManagedDisksHandleError(resp *azcore.Response) error { 339 body, err := resp.Payload() 340 if err != nil { 341 return azcore.NewResponseError(err, resp.Response) 342 } 343 if len(body) == 0 { 344 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 345 } 346 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 347} 348 349// BeginCreateOrUpdate - The operation to create or update a virtual machine. Please note some properties can be set only during virtual machine creation. 350// If the operation fails it returns a generic error. 351func (client *VirtualMachinesClient) BeginCreateOrUpdate(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachine, options *VirtualMachinesBeginCreateOrUpdateOptions) (VirtualMachinePollerResponse, error) { 352 resp, err := client.createOrUpdate(ctx, resourceGroupName, vmName, parameters, options) 353 if err != nil { 354 return VirtualMachinePollerResponse{}, err 355 } 356 result := VirtualMachinePollerResponse{ 357 RawResponse: resp.Response, 358 } 359 pt, err := armcore.NewLROPoller("VirtualMachinesClient.CreateOrUpdate", "", resp, client.con.Pipeline(), client.createOrUpdateHandleError) 360 if err != nil { 361 return VirtualMachinePollerResponse{}, err 362 } 363 poller := &virtualMachinePoller{ 364 pt: pt, 365 } 366 result.Poller = poller 367 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineResponse, error) { 368 return poller.pollUntilDone(ctx, frequency) 369 } 370 return result, nil 371} 372 373// ResumeCreateOrUpdate creates a new VirtualMachinePoller from the specified resume token. 374// token - The value must come from a previous call to VirtualMachinePoller.ResumeToken(). 375func (client *VirtualMachinesClient) ResumeCreateOrUpdate(ctx context.Context, token string) (VirtualMachinePollerResponse, error) { 376 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.CreateOrUpdate", token, client.con.Pipeline(), client.createOrUpdateHandleError) 377 if err != nil { 378 return VirtualMachinePollerResponse{}, err 379 } 380 poller := &virtualMachinePoller{ 381 pt: pt, 382 } 383 resp, err := poller.Poll(ctx) 384 if err != nil { 385 return VirtualMachinePollerResponse{}, err 386 } 387 result := VirtualMachinePollerResponse{ 388 RawResponse: resp, 389 } 390 result.Poller = poller 391 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineResponse, error) { 392 return poller.pollUntilDone(ctx, frequency) 393 } 394 return result, nil 395} 396 397// CreateOrUpdate - The operation to create or update a virtual machine. Please note some properties can be set only during virtual machine creation. 398// If the operation fails it returns a generic error. 399func (client *VirtualMachinesClient) createOrUpdate(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachine, options *VirtualMachinesBeginCreateOrUpdateOptions) (*azcore.Response, error) { 400 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 401 if err != nil { 402 return nil, err 403 } 404 resp, err := client.con.Pipeline().Do(req) 405 if err != nil { 406 return nil, err 407 } 408 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 409 return nil, client.createOrUpdateHandleError(resp) 410 } 411 return resp, nil 412} 413 414// createOrUpdateCreateRequest creates the CreateOrUpdate request. 415func (client *VirtualMachinesClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachine, options *VirtualMachinesBeginCreateOrUpdateOptions) (*azcore.Request, error) { 416 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 417 if resourceGroupName == "" { 418 return nil, errors.New("parameter resourceGroupName cannot be empty") 419 } 420 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 421 if vmName == "" { 422 return nil, errors.New("parameter vmName cannot be empty") 423 } 424 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 425 if client.subscriptionID == "" { 426 return nil, errors.New("parameter client.subscriptionID cannot be empty") 427 } 428 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 429 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 430 if err != nil { 431 return nil, err 432 } 433 req.Telemetry(telemetryInfo) 434 reqQP := req.URL.Query() 435 reqQP.Set("api-version", "2021-03-01") 436 req.URL.RawQuery = reqQP.Encode() 437 req.Header.Set("Accept", "application/json") 438 return req, req.MarshalAsJSON(parameters) 439} 440 441// createOrUpdateHandleError handles the CreateOrUpdate error response. 442func (client *VirtualMachinesClient) createOrUpdateHandleError(resp *azcore.Response) error { 443 body, err := resp.Payload() 444 if err != nil { 445 return azcore.NewResponseError(err, resp.Response) 446 } 447 if len(body) == 0 { 448 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 449 } 450 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 451} 452 453// BeginDeallocate - Shuts down the virtual machine and releases the compute resources. You are not billed for the compute resources that this virtual machine 454// uses. 455// If the operation fails it returns a generic error. 456func (client *VirtualMachinesClient) BeginDeallocate(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeallocateOptions) (HTTPPollerResponse, error) { 457 resp, err := client.deallocate(ctx, resourceGroupName, vmName, options) 458 if err != nil { 459 return HTTPPollerResponse{}, err 460 } 461 result := HTTPPollerResponse{ 462 RawResponse: resp.Response, 463 } 464 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Deallocate", "", resp, client.con.Pipeline(), client.deallocateHandleError) 465 if err != nil { 466 return HTTPPollerResponse{}, err 467 } 468 poller := &httpPoller{ 469 pt: pt, 470 } 471 result.Poller = poller 472 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 473 return poller.pollUntilDone(ctx, frequency) 474 } 475 return result, nil 476} 477 478// ResumeDeallocate creates a new HTTPPoller from the specified resume token. 479// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 480func (client *VirtualMachinesClient) ResumeDeallocate(ctx context.Context, token string) (HTTPPollerResponse, error) { 481 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Deallocate", token, client.con.Pipeline(), client.deallocateHandleError) 482 if err != nil { 483 return HTTPPollerResponse{}, err 484 } 485 poller := &httpPoller{ 486 pt: pt, 487 } 488 resp, err := poller.Poll(ctx) 489 if err != nil { 490 return HTTPPollerResponse{}, err 491 } 492 result := HTTPPollerResponse{ 493 RawResponse: resp, 494 } 495 result.Poller = poller 496 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 497 return poller.pollUntilDone(ctx, frequency) 498 } 499 return result, nil 500} 501 502// Deallocate - Shuts down the virtual machine and releases the compute resources. You are not billed for the compute resources that this virtual machine 503// uses. 504// If the operation fails it returns a generic error. 505func (client *VirtualMachinesClient) deallocate(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeallocateOptions) (*azcore.Response, error) { 506 req, err := client.deallocateCreateRequest(ctx, resourceGroupName, vmName, options) 507 if err != nil { 508 return nil, err 509 } 510 resp, err := client.con.Pipeline().Do(req) 511 if err != nil { 512 return nil, err 513 } 514 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 515 return nil, client.deallocateHandleError(resp) 516 } 517 return resp, nil 518} 519 520// deallocateCreateRequest creates the Deallocate request. 521func (client *VirtualMachinesClient) deallocateCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeallocateOptions) (*azcore.Request, error) { 522 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate" 523 if resourceGroupName == "" { 524 return nil, errors.New("parameter resourceGroupName cannot be empty") 525 } 526 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 527 if vmName == "" { 528 return nil, errors.New("parameter vmName cannot be empty") 529 } 530 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 531 if client.subscriptionID == "" { 532 return nil, errors.New("parameter client.subscriptionID cannot be empty") 533 } 534 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 535 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 536 if err != nil { 537 return nil, err 538 } 539 req.Telemetry(telemetryInfo) 540 reqQP := req.URL.Query() 541 reqQP.Set("api-version", "2021-03-01") 542 req.URL.RawQuery = reqQP.Encode() 543 return req, nil 544} 545 546// deallocateHandleError handles the Deallocate error response. 547func (client *VirtualMachinesClient) deallocateHandleError(resp *azcore.Response) error { 548 body, err := resp.Payload() 549 if err != nil { 550 return azcore.NewResponseError(err, resp.Response) 551 } 552 if len(body) == 0 { 553 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 554 } 555 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 556} 557 558// BeginDelete - The operation to delete a virtual machine. 559// If the operation fails it returns a generic error. 560func (client *VirtualMachinesClient) BeginDelete(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeleteOptions) (HTTPPollerResponse, error) { 561 resp, err := client.deleteOperation(ctx, resourceGroupName, vmName, options) 562 if err != nil { 563 return HTTPPollerResponse{}, err 564 } 565 result := HTTPPollerResponse{ 566 RawResponse: resp.Response, 567 } 568 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Delete", "", resp, client.con.Pipeline(), client.deleteHandleError) 569 if err != nil { 570 return HTTPPollerResponse{}, err 571 } 572 poller := &httpPoller{ 573 pt: pt, 574 } 575 result.Poller = poller 576 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 577 return poller.pollUntilDone(ctx, frequency) 578 } 579 return result, nil 580} 581 582// ResumeDelete creates a new HTTPPoller from the specified resume token. 583// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 584func (client *VirtualMachinesClient) ResumeDelete(ctx context.Context, token string) (HTTPPollerResponse, error) { 585 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Delete", token, client.con.Pipeline(), client.deleteHandleError) 586 if err != nil { 587 return HTTPPollerResponse{}, err 588 } 589 poller := &httpPoller{ 590 pt: pt, 591 } 592 resp, err := poller.Poll(ctx) 593 if err != nil { 594 return HTTPPollerResponse{}, err 595 } 596 result := HTTPPollerResponse{ 597 RawResponse: resp, 598 } 599 result.Poller = poller 600 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 601 return poller.pollUntilDone(ctx, frequency) 602 } 603 return result, nil 604} 605 606// Delete - The operation to delete a virtual machine. 607// If the operation fails it returns a generic error. 608func (client *VirtualMachinesClient) deleteOperation(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeleteOptions) (*azcore.Response, error) { 609 req, err := client.deleteCreateRequest(ctx, resourceGroupName, vmName, options) 610 if err != nil { 611 return nil, err 612 } 613 resp, err := client.con.Pipeline().Do(req) 614 if err != nil { 615 return nil, err 616 } 617 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 618 return nil, client.deleteHandleError(resp) 619 } 620 return resp, nil 621} 622 623// deleteCreateRequest creates the Delete request. 624func (client *VirtualMachinesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginDeleteOptions) (*azcore.Request, error) { 625 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 626 if resourceGroupName == "" { 627 return nil, errors.New("parameter resourceGroupName cannot be empty") 628 } 629 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 630 if vmName == "" { 631 return nil, errors.New("parameter vmName cannot be empty") 632 } 633 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 634 if client.subscriptionID == "" { 635 return nil, errors.New("parameter client.subscriptionID cannot be empty") 636 } 637 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 638 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 639 if err != nil { 640 return nil, err 641 } 642 req.Telemetry(telemetryInfo) 643 reqQP := req.URL.Query() 644 if options != nil && options.ForceDeletion != nil { 645 reqQP.Set("forceDeletion", strconv.FormatBool(*options.ForceDeletion)) 646 } 647 reqQP.Set("api-version", "2021-03-01") 648 req.URL.RawQuery = reqQP.Encode() 649 return req, nil 650} 651 652// deleteHandleError handles the Delete error response. 653func (client *VirtualMachinesClient) deleteHandleError(resp *azcore.Response) error { 654 body, err := resp.Payload() 655 if err != nil { 656 return azcore.NewResponseError(err, resp.Response) 657 } 658 if len(body) == 0 { 659 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 660 } 661 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 662} 663 664// Generalize - Sets the OS state of the virtual machine to generalized. It is recommended to sysprep the virtual machine before performing this operation. 665// For Windows, please refer to Create a managed image of a 666// generalized VM in Azure [https://docs.microsoft.com/azure/virtual-machines/windows/capture-image-resource]. For Linux, please refer to How to create 667// an image of a virtual machine or VHD 668// [https://docs.microsoft.com/azure/virtual-machines/linux/capture-image]. 669// If the operation fails it returns a generic error. 670func (client *VirtualMachinesClient) Generalize(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGeneralizeOptions) (*http.Response, error) { 671 req, err := client.generalizeCreateRequest(ctx, resourceGroupName, vmName, options) 672 if err != nil { 673 return nil, err 674 } 675 resp, err := client.con.Pipeline().Do(req) 676 if err != nil { 677 return nil, err 678 } 679 if !resp.HasStatusCode(http.StatusOK) { 680 return nil, client.generalizeHandleError(resp) 681 } 682 return resp.Response, nil 683} 684 685// generalizeCreateRequest creates the Generalize request. 686func (client *VirtualMachinesClient) generalizeCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGeneralizeOptions) (*azcore.Request, error) { 687 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize" 688 if resourceGroupName == "" { 689 return nil, errors.New("parameter resourceGroupName cannot be empty") 690 } 691 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 692 if vmName == "" { 693 return nil, errors.New("parameter vmName cannot be empty") 694 } 695 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 696 if client.subscriptionID == "" { 697 return nil, errors.New("parameter client.subscriptionID cannot be empty") 698 } 699 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 700 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 701 if err != nil { 702 return nil, err 703 } 704 req.Telemetry(telemetryInfo) 705 reqQP := req.URL.Query() 706 reqQP.Set("api-version", "2021-03-01") 707 req.URL.RawQuery = reqQP.Encode() 708 return req, nil 709} 710 711// generalizeHandleError handles the Generalize error response. 712func (client *VirtualMachinesClient) generalizeHandleError(resp *azcore.Response) error { 713 body, err := resp.Payload() 714 if err != nil { 715 return azcore.NewResponseError(err, resp.Response) 716 } 717 if len(body) == 0 { 718 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 719 } 720 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 721} 722 723// Get - Retrieves information about the model view or the instance view of a virtual machine. 724// If the operation fails it returns a generic error. 725func (client *VirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGetOptions) (VirtualMachineResponse, error) { 726 req, err := client.getCreateRequest(ctx, resourceGroupName, vmName, options) 727 if err != nil { 728 return VirtualMachineResponse{}, err 729 } 730 resp, err := client.con.Pipeline().Do(req) 731 if err != nil { 732 return VirtualMachineResponse{}, err 733 } 734 if !resp.HasStatusCode(http.StatusOK) { 735 return VirtualMachineResponse{}, client.getHandleError(resp) 736 } 737 return client.getHandleResponse(resp) 738} 739 740// getCreateRequest creates the Get request. 741func (client *VirtualMachinesClient) getCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesGetOptions) (*azcore.Request, error) { 742 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 743 if resourceGroupName == "" { 744 return nil, errors.New("parameter resourceGroupName cannot be empty") 745 } 746 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 747 if vmName == "" { 748 return nil, errors.New("parameter vmName cannot be empty") 749 } 750 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 751 if client.subscriptionID == "" { 752 return nil, errors.New("parameter client.subscriptionID cannot be empty") 753 } 754 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 755 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 756 if err != nil { 757 return nil, err 758 } 759 req.Telemetry(telemetryInfo) 760 reqQP := req.URL.Query() 761 if options != nil && options.Expand != nil { 762 reqQP.Set("$expand", string(*options.Expand)) 763 } 764 reqQP.Set("api-version", "2021-03-01") 765 req.URL.RawQuery = reqQP.Encode() 766 req.Header.Set("Accept", "application/json") 767 return req, nil 768} 769 770// getHandleResponse handles the Get response. 771func (client *VirtualMachinesClient) getHandleResponse(resp *azcore.Response) (VirtualMachineResponse, error) { 772 var val *VirtualMachine 773 if err := resp.UnmarshalAsJSON(&val); err != nil { 774 return VirtualMachineResponse{}, err 775 } 776 return VirtualMachineResponse{RawResponse: resp.Response, VirtualMachine: val}, nil 777} 778 779// getHandleError handles the Get error response. 780func (client *VirtualMachinesClient) getHandleError(resp *azcore.Response) error { 781 body, err := resp.Payload() 782 if err != nil { 783 return azcore.NewResponseError(err, resp.Response) 784 } 785 if len(body) == 0 { 786 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 787 } 788 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 789} 790 791// BeginInstallPatches - Installs patches on the VM. 792// If the operation fails it returns the *CloudError error type. 793func (client *VirtualMachinesClient) BeginInstallPatches(ctx context.Context, resourceGroupName string, vmName string, installPatchesInput VirtualMachineInstallPatchesParameters, options *VirtualMachinesBeginInstallPatchesOptions) (VirtualMachineInstallPatchesResultPollerResponse, error) { 794 resp, err := client.installPatches(ctx, resourceGroupName, vmName, installPatchesInput, options) 795 if err != nil { 796 return VirtualMachineInstallPatchesResultPollerResponse{}, err 797 } 798 result := VirtualMachineInstallPatchesResultPollerResponse{ 799 RawResponse: resp.Response, 800 } 801 pt, err := armcore.NewLROPoller("VirtualMachinesClient.InstallPatches", "location", resp, client.con.Pipeline(), client.installPatchesHandleError) 802 if err != nil { 803 return VirtualMachineInstallPatchesResultPollerResponse{}, err 804 } 805 poller := &virtualMachineInstallPatchesResultPoller{ 806 pt: pt, 807 } 808 result.Poller = poller 809 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineInstallPatchesResultResponse, error) { 810 return poller.pollUntilDone(ctx, frequency) 811 } 812 return result, nil 813} 814 815// ResumeInstallPatches creates a new VirtualMachineInstallPatchesResultPoller from the specified resume token. 816// token - The value must come from a previous call to VirtualMachineInstallPatchesResultPoller.ResumeToken(). 817func (client *VirtualMachinesClient) ResumeInstallPatches(ctx context.Context, token string) (VirtualMachineInstallPatchesResultPollerResponse, error) { 818 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.InstallPatches", token, client.con.Pipeline(), client.installPatchesHandleError) 819 if err != nil { 820 return VirtualMachineInstallPatchesResultPollerResponse{}, err 821 } 822 poller := &virtualMachineInstallPatchesResultPoller{ 823 pt: pt, 824 } 825 resp, err := poller.Poll(ctx) 826 if err != nil { 827 return VirtualMachineInstallPatchesResultPollerResponse{}, err 828 } 829 result := VirtualMachineInstallPatchesResultPollerResponse{ 830 RawResponse: resp, 831 } 832 result.Poller = poller 833 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineInstallPatchesResultResponse, error) { 834 return poller.pollUntilDone(ctx, frequency) 835 } 836 return result, nil 837} 838 839// InstallPatches - Installs patches on the VM. 840// If the operation fails it returns the *CloudError error type. 841func (client *VirtualMachinesClient) installPatches(ctx context.Context, resourceGroupName string, vmName string, installPatchesInput VirtualMachineInstallPatchesParameters, options *VirtualMachinesBeginInstallPatchesOptions) (*azcore.Response, error) { 842 req, err := client.installPatchesCreateRequest(ctx, resourceGroupName, vmName, installPatchesInput, options) 843 if err != nil { 844 return nil, err 845 } 846 resp, err := client.con.Pipeline().Do(req) 847 if err != nil { 848 return nil, err 849 } 850 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 851 return nil, client.installPatchesHandleError(resp) 852 } 853 return resp, nil 854} 855 856// installPatchesCreateRequest creates the InstallPatches request. 857func (client *VirtualMachinesClient) installPatchesCreateRequest(ctx context.Context, resourceGroupName string, vmName string, installPatchesInput VirtualMachineInstallPatchesParameters, options *VirtualMachinesBeginInstallPatchesOptions) (*azcore.Request, error) { 858 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/installPatches" 859 if resourceGroupName == "" { 860 return nil, errors.New("parameter resourceGroupName cannot be empty") 861 } 862 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 863 if vmName == "" { 864 return nil, errors.New("parameter vmName cannot be empty") 865 } 866 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 867 if client.subscriptionID == "" { 868 return nil, errors.New("parameter client.subscriptionID cannot be empty") 869 } 870 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 871 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 872 if err != nil { 873 return nil, err 874 } 875 req.Telemetry(telemetryInfo) 876 reqQP := req.URL.Query() 877 reqQP.Set("api-version", "2021-03-01") 878 req.URL.RawQuery = reqQP.Encode() 879 req.Header.Set("Accept", "application/json") 880 return req, req.MarshalAsJSON(installPatchesInput) 881} 882 883// installPatchesHandleError handles the InstallPatches error response. 884func (client *VirtualMachinesClient) installPatchesHandleError(resp *azcore.Response) error { 885 body, err := resp.Payload() 886 if err != nil { 887 return azcore.NewResponseError(err, resp.Response) 888 } 889 errType := CloudError{raw: string(body)} 890 if err := resp.UnmarshalAsJSON(&errType); err != nil { 891 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 892 } 893 return azcore.NewResponseError(&errType, resp.Response) 894} 895 896// InstanceView - Retrieves information about the run-time state of a virtual machine. 897// If the operation fails it returns a generic error. 898func (client *VirtualMachinesClient) InstanceView(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesInstanceViewOptions) (VirtualMachineInstanceViewResponse, error) { 899 req, err := client.instanceViewCreateRequest(ctx, resourceGroupName, vmName, options) 900 if err != nil { 901 return VirtualMachineInstanceViewResponse{}, err 902 } 903 resp, err := client.con.Pipeline().Do(req) 904 if err != nil { 905 return VirtualMachineInstanceViewResponse{}, err 906 } 907 if !resp.HasStatusCode(http.StatusOK) { 908 return VirtualMachineInstanceViewResponse{}, client.instanceViewHandleError(resp) 909 } 910 return client.instanceViewHandleResponse(resp) 911} 912 913// instanceViewCreateRequest creates the InstanceView request. 914func (client *VirtualMachinesClient) instanceViewCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesInstanceViewOptions) (*azcore.Request, error) { 915 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView" 916 if resourceGroupName == "" { 917 return nil, errors.New("parameter resourceGroupName cannot be empty") 918 } 919 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 920 if vmName == "" { 921 return nil, errors.New("parameter vmName cannot be empty") 922 } 923 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 924 if client.subscriptionID == "" { 925 return nil, errors.New("parameter client.subscriptionID cannot be empty") 926 } 927 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 928 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 929 if err != nil { 930 return nil, err 931 } 932 req.Telemetry(telemetryInfo) 933 reqQP := req.URL.Query() 934 reqQP.Set("api-version", "2021-03-01") 935 req.URL.RawQuery = reqQP.Encode() 936 req.Header.Set("Accept", "application/json") 937 return req, nil 938} 939 940// instanceViewHandleResponse handles the InstanceView response. 941func (client *VirtualMachinesClient) instanceViewHandleResponse(resp *azcore.Response) (VirtualMachineInstanceViewResponse, error) { 942 var val *VirtualMachineInstanceView 943 if err := resp.UnmarshalAsJSON(&val); err != nil { 944 return VirtualMachineInstanceViewResponse{}, err 945 } 946 return VirtualMachineInstanceViewResponse{RawResponse: resp.Response, VirtualMachineInstanceView: val}, nil 947} 948 949// instanceViewHandleError handles the InstanceView error response. 950func (client *VirtualMachinesClient) instanceViewHandleError(resp *azcore.Response) error { 951 body, err := resp.Payload() 952 if err != nil { 953 return azcore.NewResponseError(err, resp.Response) 954 } 955 if len(body) == 0 { 956 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 957 } 958 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 959} 960 961// 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. 962// If the operation fails it returns a generic error. 963func (client *VirtualMachinesClient) List(resourceGroupName string, options *VirtualMachinesListOptions) VirtualMachineListResultPager { 964 return &virtualMachineListResultPager{ 965 pipeline: client.con.Pipeline(), 966 requester: func(ctx context.Context) (*azcore.Request, error) { 967 return client.listCreateRequest(ctx, resourceGroupName, options) 968 }, 969 responder: client.listHandleResponse, 970 errorer: client.listHandleError, 971 advancer: func(ctx context.Context, resp VirtualMachineListResultResponse) (*azcore.Request, error) { 972 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineListResult.NextLink) 973 }, 974 statusCodes: []int{http.StatusOK}, 975 } 976} 977 978// listCreateRequest creates the List request. 979func (client *VirtualMachinesClient) listCreateRequest(ctx context.Context, resourceGroupName string, options *VirtualMachinesListOptions) (*azcore.Request, error) { 980 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines" 981 if resourceGroupName == "" { 982 return nil, errors.New("parameter resourceGroupName cannot be empty") 983 } 984 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 985 if client.subscriptionID == "" { 986 return nil, errors.New("parameter client.subscriptionID cannot be empty") 987 } 988 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 989 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 990 if err != nil { 991 return nil, err 992 } 993 req.Telemetry(telemetryInfo) 994 reqQP := req.URL.Query() 995 reqQP.Set("api-version", "2021-03-01") 996 req.URL.RawQuery = reqQP.Encode() 997 req.Header.Set("Accept", "application/json") 998 return req, nil 999} 1000 1001// listHandleResponse handles the List response. 1002func (client *VirtualMachinesClient) listHandleResponse(resp *azcore.Response) (VirtualMachineListResultResponse, error) { 1003 var val *VirtualMachineListResult 1004 if err := resp.UnmarshalAsJSON(&val); err != nil { 1005 return VirtualMachineListResultResponse{}, err 1006 } 1007 return VirtualMachineListResultResponse{RawResponse: resp.Response, VirtualMachineListResult: val}, nil 1008} 1009 1010// listHandleError handles the List error response. 1011func (client *VirtualMachinesClient) listHandleError(resp *azcore.Response) error { 1012 body, err := resp.Payload() 1013 if err != nil { 1014 return azcore.NewResponseError(err, resp.Response) 1015 } 1016 if len(body) == 0 { 1017 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1018 } 1019 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1020} 1021 1022// 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 1023// machines. 1024// If the operation fails it returns a generic error. 1025func (client *VirtualMachinesClient) ListAll(options *VirtualMachinesListAllOptions) VirtualMachineListResultPager { 1026 return &virtualMachineListResultPager{ 1027 pipeline: client.con.Pipeline(), 1028 requester: func(ctx context.Context) (*azcore.Request, error) { 1029 return client.listAllCreateRequest(ctx, options) 1030 }, 1031 responder: client.listAllHandleResponse, 1032 errorer: client.listAllHandleError, 1033 advancer: func(ctx context.Context, resp VirtualMachineListResultResponse) (*azcore.Request, error) { 1034 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineListResult.NextLink) 1035 }, 1036 statusCodes: []int{http.StatusOK}, 1037 } 1038} 1039 1040// listAllCreateRequest creates the ListAll request. 1041func (client *VirtualMachinesClient) listAllCreateRequest(ctx context.Context, options *VirtualMachinesListAllOptions) (*azcore.Request, error) { 1042 urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines" 1043 if client.subscriptionID == "" { 1044 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1045 } 1046 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1047 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1048 if err != nil { 1049 return nil, err 1050 } 1051 req.Telemetry(telemetryInfo) 1052 reqQP := req.URL.Query() 1053 reqQP.Set("api-version", "2021-03-01") 1054 if options != nil && options.StatusOnly != nil { 1055 reqQP.Set("statusOnly", *options.StatusOnly) 1056 } 1057 req.URL.RawQuery = reqQP.Encode() 1058 req.Header.Set("Accept", "application/json") 1059 return req, nil 1060} 1061 1062// listAllHandleResponse handles the ListAll response. 1063func (client *VirtualMachinesClient) listAllHandleResponse(resp *azcore.Response) (VirtualMachineListResultResponse, error) { 1064 var val *VirtualMachineListResult 1065 if err := resp.UnmarshalAsJSON(&val); err != nil { 1066 return VirtualMachineListResultResponse{}, err 1067 } 1068 return VirtualMachineListResultResponse{RawResponse: resp.Response, VirtualMachineListResult: val}, nil 1069} 1070 1071// listAllHandleError handles the ListAll error response. 1072func (client *VirtualMachinesClient) listAllHandleError(resp *azcore.Response) error { 1073 body, err := resp.Payload() 1074 if err != nil { 1075 return azcore.NewResponseError(err, resp.Response) 1076 } 1077 if len(body) == 0 { 1078 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1079 } 1080 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1081} 1082 1083// ListAvailableSizes - Lists all available virtual machine sizes to which the specified virtual machine can be resized. 1084// If the operation fails it returns a generic error. 1085func (client *VirtualMachinesClient) ListAvailableSizes(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesListAvailableSizesOptions) (VirtualMachineSizeListResultResponse, error) { 1086 req, err := client.listAvailableSizesCreateRequest(ctx, resourceGroupName, vmName, options) 1087 if err != nil { 1088 return VirtualMachineSizeListResultResponse{}, err 1089 } 1090 resp, err := client.con.Pipeline().Do(req) 1091 if err != nil { 1092 return VirtualMachineSizeListResultResponse{}, err 1093 } 1094 if !resp.HasStatusCode(http.StatusOK) { 1095 return VirtualMachineSizeListResultResponse{}, client.listAvailableSizesHandleError(resp) 1096 } 1097 return client.listAvailableSizesHandleResponse(resp) 1098} 1099 1100// listAvailableSizesCreateRequest creates the ListAvailableSizes request. 1101func (client *VirtualMachinesClient) listAvailableSizesCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesListAvailableSizesOptions) (*azcore.Request, error) { 1102 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes" 1103 if resourceGroupName == "" { 1104 return nil, errors.New("parameter resourceGroupName cannot be empty") 1105 } 1106 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1107 if vmName == "" { 1108 return nil, errors.New("parameter vmName cannot be empty") 1109 } 1110 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1111 if client.subscriptionID == "" { 1112 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1113 } 1114 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1115 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1116 if err != nil { 1117 return nil, err 1118 } 1119 req.Telemetry(telemetryInfo) 1120 reqQP := req.URL.Query() 1121 reqQP.Set("api-version", "2021-03-01") 1122 req.URL.RawQuery = reqQP.Encode() 1123 req.Header.Set("Accept", "application/json") 1124 return req, nil 1125} 1126 1127// listAvailableSizesHandleResponse handles the ListAvailableSizes response. 1128func (client *VirtualMachinesClient) listAvailableSizesHandleResponse(resp *azcore.Response) (VirtualMachineSizeListResultResponse, error) { 1129 var val *VirtualMachineSizeListResult 1130 if err := resp.UnmarshalAsJSON(&val); err != nil { 1131 return VirtualMachineSizeListResultResponse{}, err 1132 } 1133 return VirtualMachineSizeListResultResponse{RawResponse: resp.Response, VirtualMachineSizeListResult: val}, nil 1134} 1135 1136// listAvailableSizesHandleError handles the ListAvailableSizes error response. 1137func (client *VirtualMachinesClient) listAvailableSizesHandleError(resp *azcore.Response) error { 1138 body, err := resp.Payload() 1139 if err != nil { 1140 return azcore.NewResponseError(err, resp.Response) 1141 } 1142 if len(body) == 0 { 1143 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1144 } 1145 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1146} 1147 1148// ListByLocation - Gets all the virtual machines under the specified subscription for the specified location. 1149// If the operation fails it returns a generic error. 1150func (client *VirtualMachinesClient) ListByLocation(location string, options *VirtualMachinesListByLocationOptions) VirtualMachineListResultPager { 1151 return &virtualMachineListResultPager{ 1152 pipeline: client.con.Pipeline(), 1153 requester: func(ctx context.Context) (*azcore.Request, error) { 1154 return client.listByLocationCreateRequest(ctx, location, options) 1155 }, 1156 responder: client.listByLocationHandleResponse, 1157 errorer: client.listByLocationHandleError, 1158 advancer: func(ctx context.Context, resp VirtualMachineListResultResponse) (*azcore.Request, error) { 1159 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineListResult.NextLink) 1160 }, 1161 statusCodes: []int{http.StatusOK}, 1162 } 1163} 1164 1165// listByLocationCreateRequest creates the ListByLocation request. 1166func (client *VirtualMachinesClient) listByLocationCreateRequest(ctx context.Context, location string, options *VirtualMachinesListByLocationOptions) (*azcore.Request, error) { 1167 urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines" 1168 if location == "" { 1169 return nil, errors.New("parameter location cannot be empty") 1170 } 1171 urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location)) 1172 if client.subscriptionID == "" { 1173 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1174 } 1175 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1176 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1177 if err != nil { 1178 return nil, err 1179 } 1180 req.Telemetry(telemetryInfo) 1181 reqQP := req.URL.Query() 1182 reqQP.Set("api-version", "2021-03-01") 1183 req.URL.RawQuery = reqQP.Encode() 1184 req.Header.Set("Accept", "application/json") 1185 return req, nil 1186} 1187 1188// listByLocationHandleResponse handles the ListByLocation response. 1189func (client *VirtualMachinesClient) listByLocationHandleResponse(resp *azcore.Response) (VirtualMachineListResultResponse, error) { 1190 var val *VirtualMachineListResult 1191 if err := resp.UnmarshalAsJSON(&val); err != nil { 1192 return VirtualMachineListResultResponse{}, err 1193 } 1194 return VirtualMachineListResultResponse{RawResponse: resp.Response, VirtualMachineListResult: val}, nil 1195} 1196 1197// listByLocationHandleError handles the ListByLocation error response. 1198func (client *VirtualMachinesClient) listByLocationHandleError(resp *azcore.Response) error { 1199 body, err := resp.Payload() 1200 if err != nil { 1201 return azcore.NewResponseError(err, resp.Response) 1202 } 1203 if len(body) == 0 { 1204 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1205 } 1206 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1207} 1208 1209// BeginPerformMaintenance - The operation to perform maintenance on a virtual machine. 1210// If the operation fails it returns a generic error. 1211func (client *VirtualMachinesClient) BeginPerformMaintenance(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPerformMaintenanceOptions) (HTTPPollerResponse, error) { 1212 resp, err := client.performMaintenance(ctx, resourceGroupName, vmName, options) 1213 if err != nil { 1214 return HTTPPollerResponse{}, err 1215 } 1216 result := HTTPPollerResponse{ 1217 RawResponse: resp.Response, 1218 } 1219 pt, err := armcore.NewLROPoller("VirtualMachinesClient.PerformMaintenance", "", resp, client.con.Pipeline(), client.performMaintenanceHandleError) 1220 if err != nil { 1221 return HTTPPollerResponse{}, err 1222 } 1223 poller := &httpPoller{ 1224 pt: pt, 1225 } 1226 result.Poller = poller 1227 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1228 return poller.pollUntilDone(ctx, frequency) 1229 } 1230 return result, nil 1231} 1232 1233// ResumePerformMaintenance creates a new HTTPPoller from the specified resume token. 1234// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1235func (client *VirtualMachinesClient) ResumePerformMaintenance(ctx context.Context, token string) (HTTPPollerResponse, error) { 1236 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.PerformMaintenance", token, client.con.Pipeline(), client.performMaintenanceHandleError) 1237 if err != nil { 1238 return HTTPPollerResponse{}, err 1239 } 1240 poller := &httpPoller{ 1241 pt: pt, 1242 } 1243 resp, err := poller.Poll(ctx) 1244 if err != nil { 1245 return HTTPPollerResponse{}, err 1246 } 1247 result := HTTPPollerResponse{ 1248 RawResponse: resp, 1249 } 1250 result.Poller = poller 1251 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1252 return poller.pollUntilDone(ctx, frequency) 1253 } 1254 return result, nil 1255} 1256 1257// PerformMaintenance - The operation to perform maintenance on a virtual machine. 1258// If the operation fails it returns a generic error. 1259func (client *VirtualMachinesClient) performMaintenance(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPerformMaintenanceOptions) (*azcore.Response, error) { 1260 req, err := client.performMaintenanceCreateRequest(ctx, resourceGroupName, vmName, options) 1261 if err != nil { 1262 return nil, err 1263 } 1264 resp, err := client.con.Pipeline().Do(req) 1265 if err != nil { 1266 return nil, err 1267 } 1268 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1269 return nil, client.performMaintenanceHandleError(resp) 1270 } 1271 return resp, nil 1272} 1273 1274// performMaintenanceCreateRequest creates the PerformMaintenance request. 1275func (client *VirtualMachinesClient) performMaintenanceCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPerformMaintenanceOptions) (*azcore.Request, error) { 1276 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance" 1277 if resourceGroupName == "" { 1278 return nil, errors.New("parameter resourceGroupName cannot be empty") 1279 } 1280 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1281 if vmName == "" { 1282 return nil, errors.New("parameter vmName cannot be empty") 1283 } 1284 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1285 if client.subscriptionID == "" { 1286 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1287 } 1288 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1289 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1290 if err != nil { 1291 return nil, err 1292 } 1293 req.Telemetry(telemetryInfo) 1294 reqQP := req.URL.Query() 1295 reqQP.Set("api-version", "2021-03-01") 1296 req.URL.RawQuery = reqQP.Encode() 1297 return req, nil 1298} 1299 1300// performMaintenanceHandleError handles the PerformMaintenance error response. 1301func (client *VirtualMachinesClient) performMaintenanceHandleError(resp *azcore.Response) error { 1302 body, err := resp.Payload() 1303 if err != nil { 1304 return azcore.NewResponseError(err, resp.Response) 1305 } 1306 if len(body) == 0 { 1307 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1308 } 1309 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1310} 1311 1312// BeginPowerOff - The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same provisioned resources. You are 1313// still charged for this virtual machine. 1314// If the operation fails it returns a generic error. 1315func (client *VirtualMachinesClient) BeginPowerOff(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPowerOffOptions) (HTTPPollerResponse, error) { 1316 resp, err := client.powerOff(ctx, resourceGroupName, vmName, options) 1317 if err != nil { 1318 return HTTPPollerResponse{}, err 1319 } 1320 result := HTTPPollerResponse{ 1321 RawResponse: resp.Response, 1322 } 1323 pt, err := armcore.NewLROPoller("VirtualMachinesClient.PowerOff", "", resp, client.con.Pipeline(), client.powerOffHandleError) 1324 if err != nil { 1325 return HTTPPollerResponse{}, err 1326 } 1327 poller := &httpPoller{ 1328 pt: pt, 1329 } 1330 result.Poller = poller 1331 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1332 return poller.pollUntilDone(ctx, frequency) 1333 } 1334 return result, nil 1335} 1336 1337// ResumePowerOff creates a new HTTPPoller from the specified resume token. 1338// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1339func (client *VirtualMachinesClient) ResumePowerOff(ctx context.Context, token string) (HTTPPollerResponse, error) { 1340 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.PowerOff", token, client.con.Pipeline(), client.powerOffHandleError) 1341 if err != nil { 1342 return HTTPPollerResponse{}, err 1343 } 1344 poller := &httpPoller{ 1345 pt: pt, 1346 } 1347 resp, err := poller.Poll(ctx) 1348 if err != nil { 1349 return HTTPPollerResponse{}, err 1350 } 1351 result := HTTPPollerResponse{ 1352 RawResponse: resp, 1353 } 1354 result.Poller = poller 1355 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1356 return poller.pollUntilDone(ctx, frequency) 1357 } 1358 return result, nil 1359} 1360 1361// PowerOff - The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same provisioned resources. You are still 1362// charged for this virtual machine. 1363// If the operation fails it returns a generic error. 1364func (client *VirtualMachinesClient) powerOff(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPowerOffOptions) (*azcore.Response, error) { 1365 req, err := client.powerOffCreateRequest(ctx, resourceGroupName, vmName, options) 1366 if err != nil { 1367 return nil, err 1368 } 1369 resp, err := client.con.Pipeline().Do(req) 1370 if err != nil { 1371 return nil, err 1372 } 1373 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1374 return nil, client.powerOffHandleError(resp) 1375 } 1376 return resp, nil 1377} 1378 1379// powerOffCreateRequest creates the PowerOff request. 1380func (client *VirtualMachinesClient) powerOffCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginPowerOffOptions) (*azcore.Request, error) { 1381 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff" 1382 if resourceGroupName == "" { 1383 return nil, errors.New("parameter resourceGroupName cannot be empty") 1384 } 1385 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1386 if vmName == "" { 1387 return nil, errors.New("parameter vmName cannot be empty") 1388 } 1389 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1390 if client.subscriptionID == "" { 1391 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1392 } 1393 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1394 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1395 if err != nil { 1396 return nil, err 1397 } 1398 req.Telemetry(telemetryInfo) 1399 reqQP := req.URL.Query() 1400 if options != nil && options.SkipShutdown != nil { 1401 reqQP.Set("skipShutdown", strconv.FormatBool(*options.SkipShutdown)) 1402 } 1403 reqQP.Set("api-version", "2021-03-01") 1404 req.URL.RawQuery = reqQP.Encode() 1405 return req, nil 1406} 1407 1408// powerOffHandleError handles the PowerOff error response. 1409func (client *VirtualMachinesClient) powerOffHandleError(resp *azcore.Response) error { 1410 body, err := resp.Payload() 1411 if err != nil { 1412 return azcore.NewResponseError(err, resp.Response) 1413 } 1414 if len(body) == 0 { 1415 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1416 } 1417 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1418} 1419 1420// BeginReapply - The operation to reapply a virtual machine's state. 1421// If the operation fails it returns the *CloudError error type. 1422func (client *VirtualMachinesClient) BeginReapply(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReapplyOptions) (HTTPPollerResponse, error) { 1423 resp, err := client.reapply(ctx, resourceGroupName, vmName, options) 1424 if err != nil { 1425 return HTTPPollerResponse{}, err 1426 } 1427 result := HTTPPollerResponse{ 1428 RawResponse: resp.Response, 1429 } 1430 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Reapply", "", resp, client.con.Pipeline(), client.reapplyHandleError) 1431 if err != nil { 1432 return HTTPPollerResponse{}, err 1433 } 1434 poller := &httpPoller{ 1435 pt: pt, 1436 } 1437 result.Poller = poller 1438 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1439 return poller.pollUntilDone(ctx, frequency) 1440 } 1441 return result, nil 1442} 1443 1444// ResumeReapply creates a new HTTPPoller from the specified resume token. 1445// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1446func (client *VirtualMachinesClient) ResumeReapply(ctx context.Context, token string) (HTTPPollerResponse, error) { 1447 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Reapply", token, client.con.Pipeline(), client.reapplyHandleError) 1448 if err != nil { 1449 return HTTPPollerResponse{}, err 1450 } 1451 poller := &httpPoller{ 1452 pt: pt, 1453 } 1454 resp, err := poller.Poll(ctx) 1455 if err != nil { 1456 return HTTPPollerResponse{}, err 1457 } 1458 result := HTTPPollerResponse{ 1459 RawResponse: resp, 1460 } 1461 result.Poller = poller 1462 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1463 return poller.pollUntilDone(ctx, frequency) 1464 } 1465 return result, nil 1466} 1467 1468// Reapply - The operation to reapply a virtual machine's state. 1469// If the operation fails it returns the *CloudError error type. 1470func (client *VirtualMachinesClient) reapply(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReapplyOptions) (*azcore.Response, error) { 1471 req, err := client.reapplyCreateRequest(ctx, resourceGroupName, vmName, options) 1472 if err != nil { 1473 return nil, err 1474 } 1475 resp, err := client.con.Pipeline().Do(req) 1476 if err != nil { 1477 return nil, err 1478 } 1479 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1480 return nil, client.reapplyHandleError(resp) 1481 } 1482 return resp, nil 1483} 1484 1485// reapplyCreateRequest creates the Reapply request. 1486func (client *VirtualMachinesClient) reapplyCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReapplyOptions) (*azcore.Request, error) { 1487 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply" 1488 if resourceGroupName == "" { 1489 return nil, errors.New("parameter resourceGroupName cannot be empty") 1490 } 1491 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1492 if vmName == "" { 1493 return nil, errors.New("parameter vmName cannot be empty") 1494 } 1495 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1496 if client.subscriptionID == "" { 1497 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1498 } 1499 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1500 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1501 if err != nil { 1502 return nil, err 1503 } 1504 req.Telemetry(telemetryInfo) 1505 reqQP := req.URL.Query() 1506 reqQP.Set("api-version", "2021-03-01") 1507 req.URL.RawQuery = reqQP.Encode() 1508 req.Header.Set("Accept", "application/json") 1509 return req, nil 1510} 1511 1512// reapplyHandleError handles the Reapply error response. 1513func (client *VirtualMachinesClient) reapplyHandleError(resp *azcore.Response) error { 1514 body, err := resp.Payload() 1515 if err != nil { 1516 return azcore.NewResponseError(err, resp.Response) 1517 } 1518 errType := CloudError{raw: string(body)} 1519 if err := resp.UnmarshalAsJSON(&errType); err != nil { 1520 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 1521 } 1522 return azcore.NewResponseError(&errType, resp.Response) 1523} 1524 1525// BeginRedeploy - Shuts down the virtual machine, moves it to a new node, and powers it back on. 1526// If the operation fails it returns a generic error. 1527func (client *VirtualMachinesClient) BeginRedeploy(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRedeployOptions) (HTTPPollerResponse, error) { 1528 resp, err := client.redeploy(ctx, resourceGroupName, vmName, options) 1529 if err != nil { 1530 return HTTPPollerResponse{}, err 1531 } 1532 result := HTTPPollerResponse{ 1533 RawResponse: resp.Response, 1534 } 1535 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Redeploy", "", resp, client.con.Pipeline(), client.redeployHandleError) 1536 if err != nil { 1537 return HTTPPollerResponse{}, err 1538 } 1539 poller := &httpPoller{ 1540 pt: pt, 1541 } 1542 result.Poller = poller 1543 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1544 return poller.pollUntilDone(ctx, frequency) 1545 } 1546 return result, nil 1547} 1548 1549// ResumeRedeploy creates a new HTTPPoller from the specified resume token. 1550// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1551func (client *VirtualMachinesClient) ResumeRedeploy(ctx context.Context, token string) (HTTPPollerResponse, error) { 1552 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Redeploy", token, client.con.Pipeline(), client.redeployHandleError) 1553 if err != nil { 1554 return HTTPPollerResponse{}, err 1555 } 1556 poller := &httpPoller{ 1557 pt: pt, 1558 } 1559 resp, err := poller.Poll(ctx) 1560 if err != nil { 1561 return HTTPPollerResponse{}, err 1562 } 1563 result := HTTPPollerResponse{ 1564 RawResponse: resp, 1565 } 1566 result.Poller = poller 1567 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1568 return poller.pollUntilDone(ctx, frequency) 1569 } 1570 return result, nil 1571} 1572 1573// Redeploy - Shuts down the virtual machine, moves it to a new node, and powers it back on. 1574// If the operation fails it returns a generic error. 1575func (client *VirtualMachinesClient) redeploy(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRedeployOptions) (*azcore.Response, error) { 1576 req, err := client.redeployCreateRequest(ctx, resourceGroupName, vmName, options) 1577 if err != nil { 1578 return nil, err 1579 } 1580 resp, err := client.con.Pipeline().Do(req) 1581 if err != nil { 1582 return nil, err 1583 } 1584 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1585 return nil, client.redeployHandleError(resp) 1586 } 1587 return resp, nil 1588} 1589 1590// redeployCreateRequest creates the Redeploy request. 1591func (client *VirtualMachinesClient) redeployCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRedeployOptions) (*azcore.Request, error) { 1592 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy" 1593 if resourceGroupName == "" { 1594 return nil, errors.New("parameter resourceGroupName cannot be empty") 1595 } 1596 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1597 if vmName == "" { 1598 return nil, errors.New("parameter vmName cannot be empty") 1599 } 1600 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1601 if client.subscriptionID == "" { 1602 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1603 } 1604 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1605 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1606 if err != nil { 1607 return nil, err 1608 } 1609 req.Telemetry(telemetryInfo) 1610 reqQP := req.URL.Query() 1611 reqQP.Set("api-version", "2021-03-01") 1612 req.URL.RawQuery = reqQP.Encode() 1613 return req, nil 1614} 1615 1616// redeployHandleError handles the Redeploy error response. 1617func (client *VirtualMachinesClient) redeployHandleError(resp *azcore.Response) error { 1618 body, err := resp.Payload() 1619 if err != nil { 1620 return azcore.NewResponseError(err, resp.Response) 1621 } 1622 if len(body) == 0 { 1623 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1624 } 1625 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1626} 1627 1628// BeginReimage - Reimages the virtual machine which has an ephemeral OS disk back to its initial state. 1629// If the operation fails it returns a generic error. 1630func (client *VirtualMachinesClient) BeginReimage(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReimageOptions) (HTTPPollerResponse, error) { 1631 resp, err := client.reimage(ctx, resourceGroupName, vmName, options) 1632 if err != nil { 1633 return HTTPPollerResponse{}, err 1634 } 1635 result := HTTPPollerResponse{ 1636 RawResponse: resp.Response, 1637 } 1638 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Reimage", "", resp, client.con.Pipeline(), client.reimageHandleError) 1639 if err != nil { 1640 return HTTPPollerResponse{}, err 1641 } 1642 poller := &httpPoller{ 1643 pt: pt, 1644 } 1645 result.Poller = poller 1646 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1647 return poller.pollUntilDone(ctx, frequency) 1648 } 1649 return result, nil 1650} 1651 1652// ResumeReimage creates a new HTTPPoller from the specified resume token. 1653// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1654func (client *VirtualMachinesClient) ResumeReimage(ctx context.Context, token string) (HTTPPollerResponse, error) { 1655 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Reimage", token, client.con.Pipeline(), client.reimageHandleError) 1656 if err != nil { 1657 return HTTPPollerResponse{}, err 1658 } 1659 poller := &httpPoller{ 1660 pt: pt, 1661 } 1662 resp, err := poller.Poll(ctx) 1663 if err != nil { 1664 return HTTPPollerResponse{}, err 1665 } 1666 result := HTTPPollerResponse{ 1667 RawResponse: resp, 1668 } 1669 result.Poller = poller 1670 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1671 return poller.pollUntilDone(ctx, frequency) 1672 } 1673 return result, nil 1674} 1675 1676// Reimage - Reimages the virtual machine which has an ephemeral OS disk back to its initial state. 1677// If the operation fails it returns a generic error. 1678func (client *VirtualMachinesClient) reimage(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReimageOptions) (*azcore.Response, error) { 1679 req, err := client.reimageCreateRequest(ctx, resourceGroupName, vmName, options) 1680 if err != nil { 1681 return nil, err 1682 } 1683 resp, err := client.con.Pipeline().Do(req) 1684 if err != nil { 1685 return nil, err 1686 } 1687 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1688 return nil, client.reimageHandleError(resp) 1689 } 1690 return resp, nil 1691} 1692 1693// reimageCreateRequest creates the Reimage request. 1694func (client *VirtualMachinesClient) reimageCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginReimageOptions) (*azcore.Request, error) { 1695 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage" 1696 if resourceGroupName == "" { 1697 return nil, errors.New("parameter resourceGroupName cannot be empty") 1698 } 1699 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1700 if vmName == "" { 1701 return nil, errors.New("parameter vmName cannot be empty") 1702 } 1703 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1704 if client.subscriptionID == "" { 1705 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1706 } 1707 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1708 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1709 if err != nil { 1710 return nil, err 1711 } 1712 req.Telemetry(telemetryInfo) 1713 reqQP := req.URL.Query() 1714 reqQP.Set("api-version", "2021-03-01") 1715 req.URL.RawQuery = reqQP.Encode() 1716 if options != nil && options.Parameters != nil { 1717 return req, req.MarshalAsJSON(*options.Parameters) 1718 } 1719 return req, nil 1720} 1721 1722// reimageHandleError handles the Reimage error response. 1723func (client *VirtualMachinesClient) reimageHandleError(resp *azcore.Response) error { 1724 body, err := resp.Payload() 1725 if err != nil { 1726 return azcore.NewResponseError(err, resp.Response) 1727 } 1728 if len(body) == 0 { 1729 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1730 } 1731 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1732} 1733 1734// BeginRestart - The operation to restart a virtual machine. 1735// If the operation fails it returns a generic error. 1736func (client *VirtualMachinesClient) BeginRestart(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRestartOptions) (HTTPPollerResponse, error) { 1737 resp, err := client.restart(ctx, resourceGroupName, vmName, options) 1738 if err != nil { 1739 return HTTPPollerResponse{}, err 1740 } 1741 result := HTTPPollerResponse{ 1742 RawResponse: resp.Response, 1743 } 1744 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Restart", "", resp, client.con.Pipeline(), client.restartHandleError) 1745 if err != nil { 1746 return HTTPPollerResponse{}, err 1747 } 1748 poller := &httpPoller{ 1749 pt: pt, 1750 } 1751 result.Poller = poller 1752 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1753 return poller.pollUntilDone(ctx, frequency) 1754 } 1755 return result, nil 1756} 1757 1758// ResumeRestart creates a new HTTPPoller from the specified resume token. 1759// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1760func (client *VirtualMachinesClient) ResumeRestart(ctx context.Context, token string) (HTTPPollerResponse, error) { 1761 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Restart", token, client.con.Pipeline(), client.restartHandleError) 1762 if err != nil { 1763 return HTTPPollerResponse{}, err 1764 } 1765 poller := &httpPoller{ 1766 pt: pt, 1767 } 1768 resp, err := poller.Poll(ctx) 1769 if err != nil { 1770 return HTTPPollerResponse{}, err 1771 } 1772 result := HTTPPollerResponse{ 1773 RawResponse: resp, 1774 } 1775 result.Poller = poller 1776 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1777 return poller.pollUntilDone(ctx, frequency) 1778 } 1779 return result, nil 1780} 1781 1782// Restart - The operation to restart a virtual machine. 1783// If the operation fails it returns a generic error. 1784func (client *VirtualMachinesClient) restart(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRestartOptions) (*azcore.Response, error) { 1785 req, err := client.restartCreateRequest(ctx, resourceGroupName, vmName, options) 1786 if err != nil { 1787 return nil, err 1788 } 1789 resp, err := client.con.Pipeline().Do(req) 1790 if err != nil { 1791 return nil, err 1792 } 1793 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1794 return nil, client.restartHandleError(resp) 1795 } 1796 return resp, nil 1797} 1798 1799// restartCreateRequest creates the Restart request. 1800func (client *VirtualMachinesClient) restartCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginRestartOptions) (*azcore.Request, error) { 1801 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart" 1802 if resourceGroupName == "" { 1803 return nil, errors.New("parameter resourceGroupName cannot be empty") 1804 } 1805 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1806 if vmName == "" { 1807 return nil, errors.New("parameter vmName cannot be empty") 1808 } 1809 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1810 if client.subscriptionID == "" { 1811 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1812 } 1813 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1814 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1815 if err != nil { 1816 return nil, err 1817 } 1818 req.Telemetry(telemetryInfo) 1819 reqQP := req.URL.Query() 1820 reqQP.Set("api-version", "2021-03-01") 1821 req.URL.RawQuery = reqQP.Encode() 1822 return req, nil 1823} 1824 1825// restartHandleError handles the Restart error response. 1826func (client *VirtualMachinesClient) restartHandleError(resp *azcore.Response) error { 1827 body, err := resp.Payload() 1828 if err != nil { 1829 return azcore.NewResponseError(err, resp.Response) 1830 } 1831 if len(body) == 0 { 1832 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1833 } 1834 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1835} 1836 1837// RetrieveBootDiagnosticsData - The operation to retrieve SAS URIs for a virtual machine's boot diagnostic logs. 1838// If the operation fails it returns the *CloudError error type. 1839func (client *VirtualMachinesClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesRetrieveBootDiagnosticsDataOptions) (RetrieveBootDiagnosticsDataResultResponse, error) { 1840 req, err := client.retrieveBootDiagnosticsDataCreateRequest(ctx, resourceGroupName, vmName, options) 1841 if err != nil { 1842 return RetrieveBootDiagnosticsDataResultResponse{}, err 1843 } 1844 resp, err := client.con.Pipeline().Do(req) 1845 if err != nil { 1846 return RetrieveBootDiagnosticsDataResultResponse{}, err 1847 } 1848 if !resp.HasStatusCode(http.StatusOK) { 1849 return RetrieveBootDiagnosticsDataResultResponse{}, client.retrieveBootDiagnosticsDataHandleError(resp) 1850 } 1851 return client.retrieveBootDiagnosticsDataHandleResponse(resp) 1852} 1853 1854// retrieveBootDiagnosticsDataCreateRequest creates the RetrieveBootDiagnosticsData request. 1855func (client *VirtualMachinesClient) retrieveBootDiagnosticsDataCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesRetrieveBootDiagnosticsDataOptions) (*azcore.Request, error) { 1856 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData" 1857 if resourceGroupName == "" { 1858 return nil, errors.New("parameter resourceGroupName cannot be empty") 1859 } 1860 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1861 if vmName == "" { 1862 return nil, errors.New("parameter vmName cannot be empty") 1863 } 1864 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1865 if client.subscriptionID == "" { 1866 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1867 } 1868 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1869 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1870 if err != nil { 1871 return nil, err 1872 } 1873 req.Telemetry(telemetryInfo) 1874 reqQP := req.URL.Query() 1875 if options != nil && options.SasURIExpirationTimeInMinutes != nil { 1876 reqQP.Set("sasUriExpirationTimeInMinutes", strconv.FormatInt(int64(*options.SasURIExpirationTimeInMinutes), 10)) 1877 } 1878 reqQP.Set("api-version", "2021-03-01") 1879 req.URL.RawQuery = reqQP.Encode() 1880 req.Header.Set("Accept", "application/json") 1881 return req, nil 1882} 1883 1884// retrieveBootDiagnosticsDataHandleResponse handles the RetrieveBootDiagnosticsData response. 1885func (client *VirtualMachinesClient) retrieveBootDiagnosticsDataHandleResponse(resp *azcore.Response) (RetrieveBootDiagnosticsDataResultResponse, error) { 1886 var val *RetrieveBootDiagnosticsDataResult 1887 if err := resp.UnmarshalAsJSON(&val); err != nil { 1888 return RetrieveBootDiagnosticsDataResultResponse{}, err 1889 } 1890 return RetrieveBootDiagnosticsDataResultResponse{RawResponse: resp.Response, RetrieveBootDiagnosticsDataResult: val}, nil 1891} 1892 1893// retrieveBootDiagnosticsDataHandleError handles the RetrieveBootDiagnosticsData error response. 1894func (client *VirtualMachinesClient) retrieveBootDiagnosticsDataHandleError(resp *azcore.Response) error { 1895 body, err := resp.Payload() 1896 if err != nil { 1897 return azcore.NewResponseError(err, resp.Response) 1898 } 1899 errType := CloudError{raw: string(body)} 1900 if err := resp.UnmarshalAsJSON(&errType); err != nil { 1901 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 1902 } 1903 return azcore.NewResponseError(&errType, resp.Response) 1904} 1905 1906// BeginRunCommand - Run command on the VM. 1907// If the operation fails it returns a generic error. 1908func (client *VirtualMachinesClient) BeginRunCommand(ctx context.Context, resourceGroupName string, vmName string, parameters RunCommandInput, options *VirtualMachinesBeginRunCommandOptions) (RunCommandResultPollerResponse, error) { 1909 resp, err := client.runCommand(ctx, resourceGroupName, vmName, parameters, options) 1910 if err != nil { 1911 return RunCommandResultPollerResponse{}, err 1912 } 1913 result := RunCommandResultPollerResponse{ 1914 RawResponse: resp.Response, 1915 } 1916 pt, err := armcore.NewLROPoller("VirtualMachinesClient.RunCommand", "location", resp, client.con.Pipeline(), client.runCommandHandleError) 1917 if err != nil { 1918 return RunCommandResultPollerResponse{}, err 1919 } 1920 poller := &runCommandResultPoller{ 1921 pt: pt, 1922 } 1923 result.Poller = poller 1924 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (RunCommandResultResponse, error) { 1925 return poller.pollUntilDone(ctx, frequency) 1926 } 1927 return result, nil 1928} 1929 1930// ResumeRunCommand creates a new RunCommandResultPoller from the specified resume token. 1931// token - The value must come from a previous call to RunCommandResultPoller.ResumeToken(). 1932func (client *VirtualMachinesClient) ResumeRunCommand(ctx context.Context, token string) (RunCommandResultPollerResponse, error) { 1933 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.RunCommand", token, client.con.Pipeline(), client.runCommandHandleError) 1934 if err != nil { 1935 return RunCommandResultPollerResponse{}, err 1936 } 1937 poller := &runCommandResultPoller{ 1938 pt: pt, 1939 } 1940 resp, err := poller.Poll(ctx) 1941 if err != nil { 1942 return RunCommandResultPollerResponse{}, err 1943 } 1944 result := RunCommandResultPollerResponse{ 1945 RawResponse: resp, 1946 } 1947 result.Poller = poller 1948 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (RunCommandResultResponse, error) { 1949 return poller.pollUntilDone(ctx, frequency) 1950 } 1951 return result, nil 1952} 1953 1954// RunCommand - Run command on the VM. 1955// If the operation fails it returns a generic error. 1956func (client *VirtualMachinesClient) runCommand(ctx context.Context, resourceGroupName string, vmName string, parameters RunCommandInput, options *VirtualMachinesBeginRunCommandOptions) (*azcore.Response, error) { 1957 req, err := client.runCommandCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 1958 if err != nil { 1959 return nil, err 1960 } 1961 resp, err := client.con.Pipeline().Do(req) 1962 if err != nil { 1963 return nil, err 1964 } 1965 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1966 return nil, client.runCommandHandleError(resp) 1967 } 1968 return resp, nil 1969} 1970 1971// runCommandCreateRequest creates the RunCommand request. 1972func (client *VirtualMachinesClient) runCommandCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters RunCommandInput, options *VirtualMachinesBeginRunCommandOptions) (*azcore.Request, error) { 1973 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand" 1974 if resourceGroupName == "" { 1975 return nil, errors.New("parameter resourceGroupName cannot be empty") 1976 } 1977 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1978 if vmName == "" { 1979 return nil, errors.New("parameter vmName cannot be empty") 1980 } 1981 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 1982 if client.subscriptionID == "" { 1983 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1984 } 1985 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1986 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1987 if err != nil { 1988 return nil, err 1989 } 1990 req.Telemetry(telemetryInfo) 1991 reqQP := req.URL.Query() 1992 reqQP.Set("api-version", "2021-03-01") 1993 req.URL.RawQuery = reqQP.Encode() 1994 req.Header.Set("Accept", "application/json, text/json") 1995 return req, req.MarshalAsJSON(parameters) 1996} 1997 1998// runCommandHandleError handles the RunCommand error response. 1999func (client *VirtualMachinesClient) runCommandHandleError(resp *azcore.Response) error { 2000 body, err := resp.Payload() 2001 if err != nil { 2002 return azcore.NewResponseError(err, resp.Response) 2003 } 2004 if len(body) == 0 { 2005 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 2006 } 2007 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 2008} 2009 2010// SimulateEviction - The operation to simulate the eviction of spot virtual machine. 2011// If the operation fails it returns a generic error. 2012func (client *VirtualMachinesClient) SimulateEviction(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesSimulateEvictionOptions) (*http.Response, error) { 2013 req, err := client.simulateEvictionCreateRequest(ctx, resourceGroupName, vmName, options) 2014 if err != nil { 2015 return nil, err 2016 } 2017 resp, err := client.con.Pipeline().Do(req) 2018 if err != nil { 2019 return nil, err 2020 } 2021 if !resp.HasStatusCode(http.StatusNoContent) { 2022 return nil, client.simulateEvictionHandleError(resp) 2023 } 2024 return resp.Response, nil 2025} 2026 2027// simulateEvictionCreateRequest creates the SimulateEviction request. 2028func (client *VirtualMachinesClient) simulateEvictionCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesSimulateEvictionOptions) (*azcore.Request, error) { 2029 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction" 2030 if resourceGroupName == "" { 2031 return nil, errors.New("parameter resourceGroupName cannot be empty") 2032 } 2033 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 2034 if vmName == "" { 2035 return nil, errors.New("parameter vmName cannot be empty") 2036 } 2037 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 2038 if client.subscriptionID == "" { 2039 return nil, errors.New("parameter client.subscriptionID cannot be empty") 2040 } 2041 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 2042 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 2043 if err != nil { 2044 return nil, err 2045 } 2046 req.Telemetry(telemetryInfo) 2047 reqQP := req.URL.Query() 2048 reqQP.Set("api-version", "2021-03-01") 2049 req.URL.RawQuery = reqQP.Encode() 2050 return req, nil 2051} 2052 2053// simulateEvictionHandleError handles the SimulateEviction error response. 2054func (client *VirtualMachinesClient) simulateEvictionHandleError(resp *azcore.Response) error { 2055 body, err := resp.Payload() 2056 if err != nil { 2057 return azcore.NewResponseError(err, resp.Response) 2058 } 2059 if len(body) == 0 { 2060 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 2061 } 2062 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 2063} 2064 2065// BeginStart - The operation to start a virtual machine. 2066// If the operation fails it returns a generic error. 2067func (client *VirtualMachinesClient) BeginStart(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginStartOptions) (HTTPPollerResponse, error) { 2068 resp, err := client.start(ctx, resourceGroupName, vmName, options) 2069 if err != nil { 2070 return HTTPPollerResponse{}, err 2071 } 2072 result := HTTPPollerResponse{ 2073 RawResponse: resp.Response, 2074 } 2075 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Start", "", resp, client.con.Pipeline(), client.startHandleError) 2076 if err != nil { 2077 return HTTPPollerResponse{}, err 2078 } 2079 poller := &httpPoller{ 2080 pt: pt, 2081 } 2082 result.Poller = poller 2083 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 2084 return poller.pollUntilDone(ctx, frequency) 2085 } 2086 return result, nil 2087} 2088 2089// ResumeStart creates a new HTTPPoller from the specified resume token. 2090// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 2091func (client *VirtualMachinesClient) ResumeStart(ctx context.Context, token string) (HTTPPollerResponse, error) { 2092 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Start", token, client.con.Pipeline(), client.startHandleError) 2093 if err != nil { 2094 return HTTPPollerResponse{}, err 2095 } 2096 poller := &httpPoller{ 2097 pt: pt, 2098 } 2099 resp, err := poller.Poll(ctx) 2100 if err != nil { 2101 return HTTPPollerResponse{}, err 2102 } 2103 result := HTTPPollerResponse{ 2104 RawResponse: resp, 2105 } 2106 result.Poller = poller 2107 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 2108 return poller.pollUntilDone(ctx, frequency) 2109 } 2110 return result, nil 2111} 2112 2113// Start - The operation to start a virtual machine. 2114// If the operation fails it returns a generic error. 2115func (client *VirtualMachinesClient) start(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginStartOptions) (*azcore.Response, error) { 2116 req, err := client.startCreateRequest(ctx, resourceGroupName, vmName, options) 2117 if err != nil { 2118 return nil, err 2119 } 2120 resp, err := client.con.Pipeline().Do(req) 2121 if err != nil { 2122 return nil, err 2123 } 2124 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 2125 return nil, client.startHandleError(resp) 2126 } 2127 return resp, nil 2128} 2129 2130// startCreateRequest creates the Start request. 2131func (client *VirtualMachinesClient) startCreateRequest(ctx context.Context, resourceGroupName string, vmName string, options *VirtualMachinesBeginStartOptions) (*azcore.Request, error) { 2132 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start" 2133 if resourceGroupName == "" { 2134 return nil, errors.New("parameter resourceGroupName cannot be empty") 2135 } 2136 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 2137 if vmName == "" { 2138 return nil, errors.New("parameter vmName cannot be empty") 2139 } 2140 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 2141 if client.subscriptionID == "" { 2142 return nil, errors.New("parameter client.subscriptionID cannot be empty") 2143 } 2144 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 2145 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 2146 if err != nil { 2147 return nil, err 2148 } 2149 req.Telemetry(telemetryInfo) 2150 reqQP := req.URL.Query() 2151 reqQP.Set("api-version", "2021-03-01") 2152 req.URL.RawQuery = reqQP.Encode() 2153 return req, nil 2154} 2155 2156// startHandleError handles the Start error response. 2157func (client *VirtualMachinesClient) startHandleError(resp *azcore.Response) error { 2158 body, err := resp.Payload() 2159 if err != nil { 2160 return azcore.NewResponseError(err, resp.Response) 2161 } 2162 if len(body) == 0 { 2163 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 2164 } 2165 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 2166} 2167 2168// BeginUpdate - The operation to update a virtual machine. 2169// If the operation fails it returns a generic error. 2170func (client *VirtualMachinesClient) BeginUpdate(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineUpdate, options *VirtualMachinesBeginUpdateOptions) (VirtualMachinePollerResponse, error) { 2171 resp, err := client.update(ctx, resourceGroupName, vmName, parameters, options) 2172 if err != nil { 2173 return VirtualMachinePollerResponse{}, err 2174 } 2175 result := VirtualMachinePollerResponse{ 2176 RawResponse: resp.Response, 2177 } 2178 pt, err := armcore.NewLROPoller("VirtualMachinesClient.Update", "", resp, client.con.Pipeline(), client.updateHandleError) 2179 if err != nil { 2180 return VirtualMachinePollerResponse{}, err 2181 } 2182 poller := &virtualMachinePoller{ 2183 pt: pt, 2184 } 2185 result.Poller = poller 2186 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineResponse, error) { 2187 return poller.pollUntilDone(ctx, frequency) 2188 } 2189 return result, nil 2190} 2191 2192// ResumeUpdate creates a new VirtualMachinePoller from the specified resume token. 2193// token - The value must come from a previous call to VirtualMachinePoller.ResumeToken(). 2194func (client *VirtualMachinesClient) ResumeUpdate(ctx context.Context, token string) (VirtualMachinePollerResponse, error) { 2195 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachinesClient.Update", token, client.con.Pipeline(), client.updateHandleError) 2196 if err != nil { 2197 return VirtualMachinePollerResponse{}, err 2198 } 2199 poller := &virtualMachinePoller{ 2200 pt: pt, 2201 } 2202 resp, err := poller.Poll(ctx) 2203 if err != nil { 2204 return VirtualMachinePollerResponse{}, err 2205 } 2206 result := VirtualMachinePollerResponse{ 2207 RawResponse: resp, 2208 } 2209 result.Poller = poller 2210 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineResponse, error) { 2211 return poller.pollUntilDone(ctx, frequency) 2212 } 2213 return result, nil 2214} 2215 2216// Update - The operation to update a virtual machine. 2217// If the operation fails it returns a generic error. 2218func (client *VirtualMachinesClient) update(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineUpdate, options *VirtualMachinesBeginUpdateOptions) (*azcore.Response, error) { 2219 req, err := client.updateCreateRequest(ctx, resourceGroupName, vmName, parameters, options) 2220 if err != nil { 2221 return nil, err 2222 } 2223 resp, err := client.con.Pipeline().Do(req) 2224 if err != nil { 2225 return nil, err 2226 } 2227 if !resp.HasStatusCode(http.StatusOK) { 2228 return nil, client.updateHandleError(resp) 2229 } 2230 return resp, nil 2231} 2232 2233// updateCreateRequest creates the Update request. 2234func (client *VirtualMachinesClient) updateCreateRequest(ctx context.Context, resourceGroupName string, vmName string, parameters VirtualMachineUpdate, options *VirtualMachinesBeginUpdateOptions) (*azcore.Request, error) { 2235 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" 2236 if resourceGroupName == "" { 2237 return nil, errors.New("parameter resourceGroupName cannot be empty") 2238 } 2239 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 2240 if vmName == "" { 2241 return nil, errors.New("parameter vmName cannot be empty") 2242 } 2243 urlPath = strings.ReplaceAll(urlPath, "{vmName}", url.PathEscape(vmName)) 2244 if client.subscriptionID == "" { 2245 return nil, errors.New("parameter client.subscriptionID cannot be empty") 2246 } 2247 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 2248 req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 2249 if err != nil { 2250 return nil, err 2251 } 2252 req.Telemetry(telemetryInfo) 2253 reqQP := req.URL.Query() 2254 reqQP.Set("api-version", "2021-03-01") 2255 req.URL.RawQuery = reqQP.Encode() 2256 req.Header.Set("Accept", "application/json") 2257 return req, req.MarshalAsJSON(parameters) 2258} 2259 2260// updateHandleError handles the Update error response. 2261func (client *VirtualMachinesClient) updateHandleError(resp *azcore.Response) error { 2262 body, err := resp.Payload() 2263 if err != nil { 2264 return azcore.NewResponseError(err, resp.Response) 2265 } 2266 if len(body) == 0 { 2267 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 2268 } 2269 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 2270} 2271