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// VirtualMachineScaleSetVMsClient contains the methods for the VirtualMachineScaleSetVMs group. 24// Don't use this type directly, use NewVirtualMachineScaleSetVMsClient() instead. 25type VirtualMachineScaleSetVMsClient struct { 26 con *armcore.Connection 27 subscriptionID string 28} 29 30// NewVirtualMachineScaleSetVMsClient creates a new instance of VirtualMachineScaleSetVMsClient with the specified values. 31func NewVirtualMachineScaleSetVMsClient(con *armcore.Connection, subscriptionID string) *VirtualMachineScaleSetVMsClient { 32 return &VirtualMachineScaleSetVMsClient{con: con, subscriptionID: subscriptionID} 33} 34 35// BeginDeallocate - Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the compute resources it uses. 36// You are not billed for the compute resources of this virtual 37// machine once it is deallocated. 38// If the operation fails it returns a generic error. 39func (client *VirtualMachineScaleSetVMsClient) BeginDeallocate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginDeallocateOptions) (HTTPPollerResponse, error) { 40 resp, err := client.deallocate(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 41 if err != nil { 42 return HTTPPollerResponse{}, err 43 } 44 result := HTTPPollerResponse{ 45 RawResponse: resp.Response, 46 } 47 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Deallocate", "", resp, client.con.Pipeline(), client.deallocateHandleError) 48 if err != nil { 49 return HTTPPollerResponse{}, err 50 } 51 poller := &httpPoller{ 52 pt: pt, 53 } 54 result.Poller = poller 55 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 56 return poller.pollUntilDone(ctx, frequency) 57 } 58 return result, nil 59} 60 61// ResumeDeallocate creates a new HTTPPoller from the specified resume token. 62// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 63func (client *VirtualMachineScaleSetVMsClient) ResumeDeallocate(ctx context.Context, token string) (HTTPPollerResponse, error) { 64 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Deallocate", token, client.con.Pipeline(), client.deallocateHandleError) 65 if err != nil { 66 return HTTPPollerResponse{}, err 67 } 68 poller := &httpPoller{ 69 pt: pt, 70 } 71 resp, err := poller.Poll(ctx) 72 if err != nil { 73 return HTTPPollerResponse{}, err 74 } 75 result := HTTPPollerResponse{ 76 RawResponse: resp, 77 } 78 result.Poller = poller 79 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 80 return poller.pollUntilDone(ctx, frequency) 81 } 82 return result, nil 83} 84 85// Deallocate - Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the compute resources it uses. You 86// are not billed for the compute resources of this virtual 87// machine once it is deallocated. 88// If the operation fails it returns a generic error. 89func (client *VirtualMachineScaleSetVMsClient) deallocate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginDeallocateOptions) (*azcore.Response, error) { 90 req, err := client.deallocateCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 91 if err != nil { 92 return nil, err 93 } 94 resp, err := client.con.Pipeline().Do(req) 95 if err != nil { 96 return nil, err 97 } 98 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 99 return nil, client.deallocateHandleError(resp) 100 } 101 return resp, nil 102} 103 104// deallocateCreateRequest creates the Deallocate request. 105func (client *VirtualMachineScaleSetVMsClient) deallocateCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginDeallocateOptions) (*azcore.Request, error) { 106 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate" 107 if resourceGroupName == "" { 108 return nil, errors.New("parameter resourceGroupName cannot be empty") 109 } 110 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 111 if vmScaleSetName == "" { 112 return nil, errors.New("parameter vmScaleSetName cannot be empty") 113 } 114 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 115 if instanceID == "" { 116 return nil, errors.New("parameter instanceID cannot be empty") 117 } 118 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 119 if client.subscriptionID == "" { 120 return nil, errors.New("parameter client.subscriptionID cannot be empty") 121 } 122 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 123 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 124 if err != nil { 125 return nil, err 126 } 127 req.Telemetry(telemetryInfo) 128 reqQP := req.URL.Query() 129 reqQP.Set("api-version", "2021-03-01") 130 req.URL.RawQuery = reqQP.Encode() 131 return req, nil 132} 133 134// deallocateHandleError handles the Deallocate error response. 135func (client *VirtualMachineScaleSetVMsClient) deallocateHandleError(resp *azcore.Response) error { 136 body, err := resp.Payload() 137 if err != nil { 138 return azcore.NewResponseError(err, resp.Response) 139 } 140 if len(body) == 0 { 141 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 142 } 143 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 144} 145 146// BeginDelete - Deletes a virtual machine from a VM scale set. 147// If the operation fails it returns a generic error. 148func (client *VirtualMachineScaleSetVMsClient) BeginDelete(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginDeleteOptions) (HTTPPollerResponse, error) { 149 resp, err := client.deleteOperation(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 150 if err != nil { 151 return HTTPPollerResponse{}, err 152 } 153 result := HTTPPollerResponse{ 154 RawResponse: resp.Response, 155 } 156 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Delete", "", resp, client.con.Pipeline(), client.deleteHandleError) 157 if err != nil { 158 return HTTPPollerResponse{}, err 159 } 160 poller := &httpPoller{ 161 pt: pt, 162 } 163 result.Poller = poller 164 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 165 return poller.pollUntilDone(ctx, frequency) 166 } 167 return result, nil 168} 169 170// ResumeDelete creates a new HTTPPoller from the specified resume token. 171// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 172func (client *VirtualMachineScaleSetVMsClient) ResumeDelete(ctx context.Context, token string) (HTTPPollerResponse, error) { 173 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Delete", token, client.con.Pipeline(), client.deleteHandleError) 174 if err != nil { 175 return HTTPPollerResponse{}, err 176 } 177 poller := &httpPoller{ 178 pt: pt, 179 } 180 resp, err := poller.Poll(ctx) 181 if err != nil { 182 return HTTPPollerResponse{}, err 183 } 184 result := HTTPPollerResponse{ 185 RawResponse: resp, 186 } 187 result.Poller = poller 188 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 189 return poller.pollUntilDone(ctx, frequency) 190 } 191 return result, nil 192} 193 194// Delete - Deletes a virtual machine from a VM scale set. 195// If the operation fails it returns a generic error. 196func (client *VirtualMachineScaleSetVMsClient) deleteOperation(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginDeleteOptions) (*azcore.Response, error) { 197 req, err := client.deleteCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 198 if err != nil { 199 return nil, err 200 } 201 resp, err := client.con.Pipeline().Do(req) 202 if err != nil { 203 return nil, err 204 } 205 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 206 return nil, client.deleteHandleError(resp) 207 } 208 return resp, nil 209} 210 211// deleteCreateRequest creates the Delete request. 212func (client *VirtualMachineScaleSetVMsClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginDeleteOptions) (*azcore.Request, error) { 213 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}" 214 if resourceGroupName == "" { 215 return nil, errors.New("parameter resourceGroupName cannot be empty") 216 } 217 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 218 if vmScaleSetName == "" { 219 return nil, errors.New("parameter vmScaleSetName cannot be empty") 220 } 221 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 222 if instanceID == "" { 223 return nil, errors.New("parameter instanceID cannot be empty") 224 } 225 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 226 if client.subscriptionID == "" { 227 return nil, errors.New("parameter client.subscriptionID cannot be empty") 228 } 229 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 230 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 231 if err != nil { 232 return nil, err 233 } 234 req.Telemetry(telemetryInfo) 235 reqQP := req.URL.Query() 236 if options != nil && options.ForceDeletion != nil { 237 reqQP.Set("forceDeletion", strconv.FormatBool(*options.ForceDeletion)) 238 } 239 reqQP.Set("api-version", "2021-03-01") 240 req.URL.RawQuery = reqQP.Encode() 241 return req, nil 242} 243 244// deleteHandleError handles the Delete error response. 245func (client *VirtualMachineScaleSetVMsClient) deleteHandleError(resp *azcore.Response) error { 246 body, err := resp.Payload() 247 if err != nil { 248 return azcore.NewResponseError(err, resp.Response) 249 } 250 if len(body) == 0 { 251 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 252 } 253 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 254} 255 256// Get - Gets a virtual machine from a VM scale set. 257// If the operation fails it returns a generic error. 258func (client *VirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsGetOptions) (VirtualMachineScaleSetVMResponse, error) { 259 req, err := client.getCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 260 if err != nil { 261 return VirtualMachineScaleSetVMResponse{}, err 262 } 263 resp, err := client.con.Pipeline().Do(req) 264 if err != nil { 265 return VirtualMachineScaleSetVMResponse{}, err 266 } 267 if !resp.HasStatusCode(http.StatusOK) { 268 return VirtualMachineScaleSetVMResponse{}, client.getHandleError(resp) 269 } 270 return client.getHandleResponse(resp) 271} 272 273// getCreateRequest creates the Get request. 274func (client *VirtualMachineScaleSetVMsClient) getCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsGetOptions) (*azcore.Request, error) { 275 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}" 276 if resourceGroupName == "" { 277 return nil, errors.New("parameter resourceGroupName cannot be empty") 278 } 279 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 280 if vmScaleSetName == "" { 281 return nil, errors.New("parameter vmScaleSetName cannot be empty") 282 } 283 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 284 if instanceID == "" { 285 return nil, errors.New("parameter instanceID cannot be empty") 286 } 287 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 288 if client.subscriptionID == "" { 289 return nil, errors.New("parameter client.subscriptionID cannot be empty") 290 } 291 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 292 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 293 if err != nil { 294 return nil, err 295 } 296 req.Telemetry(telemetryInfo) 297 reqQP := req.URL.Query() 298 if options != nil && options.Expand != nil { 299 reqQP.Set("$expand", string(*options.Expand)) 300 } 301 reqQP.Set("api-version", "2021-03-01") 302 req.URL.RawQuery = reqQP.Encode() 303 req.Header.Set("Accept", "application/json") 304 return req, nil 305} 306 307// getHandleResponse handles the Get response. 308func (client *VirtualMachineScaleSetVMsClient) getHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMResponse, error) { 309 var val *VirtualMachineScaleSetVM 310 if err := resp.UnmarshalAsJSON(&val); err != nil { 311 return VirtualMachineScaleSetVMResponse{}, err 312 } 313 return VirtualMachineScaleSetVMResponse{RawResponse: resp.Response, VirtualMachineScaleSetVM: val}, nil 314} 315 316// getHandleError handles the Get error response. 317func (client *VirtualMachineScaleSetVMsClient) getHandleError(resp *azcore.Response) error { 318 body, err := resp.Payload() 319 if err != nil { 320 return azcore.NewResponseError(err, resp.Response) 321 } 322 if len(body) == 0 { 323 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 324 } 325 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 326} 327 328// GetInstanceView - Gets the status of a virtual machine from a VM scale set. 329// If the operation fails it returns a generic error. 330func (client *VirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsGetInstanceViewOptions) (VirtualMachineScaleSetVMInstanceViewResponse, error) { 331 req, err := client.getInstanceViewCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 332 if err != nil { 333 return VirtualMachineScaleSetVMInstanceViewResponse{}, err 334 } 335 resp, err := client.con.Pipeline().Do(req) 336 if err != nil { 337 return VirtualMachineScaleSetVMInstanceViewResponse{}, err 338 } 339 if !resp.HasStatusCode(http.StatusOK) { 340 return VirtualMachineScaleSetVMInstanceViewResponse{}, client.getInstanceViewHandleError(resp) 341 } 342 return client.getInstanceViewHandleResponse(resp) 343} 344 345// getInstanceViewCreateRequest creates the GetInstanceView request. 346func (client *VirtualMachineScaleSetVMsClient) getInstanceViewCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsGetInstanceViewOptions) (*azcore.Request, error) { 347 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView" 348 if resourceGroupName == "" { 349 return nil, errors.New("parameter resourceGroupName cannot be empty") 350 } 351 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 352 if vmScaleSetName == "" { 353 return nil, errors.New("parameter vmScaleSetName cannot be empty") 354 } 355 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 356 if instanceID == "" { 357 return nil, errors.New("parameter instanceID cannot be empty") 358 } 359 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 360 if client.subscriptionID == "" { 361 return nil, errors.New("parameter client.subscriptionID cannot be empty") 362 } 363 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 364 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 365 if err != nil { 366 return nil, err 367 } 368 req.Telemetry(telemetryInfo) 369 reqQP := req.URL.Query() 370 reqQP.Set("api-version", "2021-03-01") 371 req.URL.RawQuery = reqQP.Encode() 372 req.Header.Set("Accept", "application/json") 373 return req, nil 374} 375 376// getInstanceViewHandleResponse handles the GetInstanceView response. 377func (client *VirtualMachineScaleSetVMsClient) getInstanceViewHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMInstanceViewResponse, error) { 378 var val *VirtualMachineScaleSetVMInstanceView 379 if err := resp.UnmarshalAsJSON(&val); err != nil { 380 return VirtualMachineScaleSetVMInstanceViewResponse{}, err 381 } 382 return VirtualMachineScaleSetVMInstanceViewResponse{RawResponse: resp.Response, VirtualMachineScaleSetVMInstanceView: val}, nil 383} 384 385// getInstanceViewHandleError handles the GetInstanceView error response. 386func (client *VirtualMachineScaleSetVMsClient) getInstanceViewHandleError(resp *azcore.Response) error { 387 body, err := resp.Payload() 388 if err != nil { 389 return azcore.NewResponseError(err, resp.Response) 390 } 391 if len(body) == 0 { 392 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 393 } 394 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 395} 396 397// List - Gets a list of all virtual machines in a VM scale sets. 398// If the operation fails it returns a generic error. 399func (client *VirtualMachineScaleSetVMsClient) List(resourceGroupName string, virtualMachineScaleSetName string, options *VirtualMachineScaleSetVMsListOptions) VirtualMachineScaleSetVMListResultPager { 400 return &virtualMachineScaleSetVMListResultPager{ 401 pipeline: client.con.Pipeline(), 402 requester: func(ctx context.Context) (*azcore.Request, error) { 403 return client.listCreateRequest(ctx, resourceGroupName, virtualMachineScaleSetName, options) 404 }, 405 responder: client.listHandleResponse, 406 errorer: client.listHandleError, 407 advancer: func(ctx context.Context, resp VirtualMachineScaleSetVMListResultResponse) (*azcore.Request, error) { 408 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineScaleSetVMListResult.NextLink) 409 }, 410 statusCodes: []int{http.StatusOK}, 411 } 412} 413 414// listCreateRequest creates the List request. 415func (client *VirtualMachineScaleSetVMsClient) listCreateRequest(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, options *VirtualMachineScaleSetVMsListOptions) (*azcore.Request, error) { 416 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines" 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 virtualMachineScaleSetName == "" { 422 return nil, errors.New("parameter virtualMachineScaleSetName cannot be empty") 423 } 424 urlPath = strings.ReplaceAll(urlPath, "{virtualMachineScaleSetName}", url.PathEscape(virtualMachineScaleSetName)) 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.MethodGet, 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 if options != nil && options.Filter != nil { 436 reqQP.Set("$filter", *options.Filter) 437 } 438 if options != nil && options.Select != nil { 439 reqQP.Set("$select", *options.Select) 440 } 441 if options != nil && options.Expand != nil { 442 reqQP.Set("$expand", *options.Expand) 443 } 444 reqQP.Set("api-version", "2021-03-01") 445 req.URL.RawQuery = reqQP.Encode() 446 req.Header.Set("Accept", "application/json") 447 return req, nil 448} 449 450// listHandleResponse handles the List response. 451func (client *VirtualMachineScaleSetVMsClient) listHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMListResultResponse, error) { 452 var val *VirtualMachineScaleSetVMListResult 453 if err := resp.UnmarshalAsJSON(&val); err != nil { 454 return VirtualMachineScaleSetVMListResultResponse{}, err 455 } 456 return VirtualMachineScaleSetVMListResultResponse{RawResponse: resp.Response, VirtualMachineScaleSetVMListResult: val}, nil 457} 458 459// listHandleError handles the List error response. 460func (client *VirtualMachineScaleSetVMsClient) listHandleError(resp *azcore.Response) error { 461 body, err := resp.Payload() 462 if err != nil { 463 return azcore.NewResponseError(err, resp.Response) 464 } 465 if len(body) == 0 { 466 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 467 } 468 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 469} 470 471// BeginPerformMaintenance - Performs maintenance on a virtual machine in a VM scale set. 472// If the operation fails it returns a generic error. 473func (client *VirtualMachineScaleSetVMsClient) BeginPerformMaintenance(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginPerformMaintenanceOptions) (HTTPPollerResponse, error) { 474 resp, err := client.performMaintenance(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 475 if err != nil { 476 return HTTPPollerResponse{}, err 477 } 478 result := HTTPPollerResponse{ 479 RawResponse: resp.Response, 480 } 481 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.PerformMaintenance", "", resp, client.con.Pipeline(), client.performMaintenanceHandleError) 482 if err != nil { 483 return HTTPPollerResponse{}, err 484 } 485 poller := &httpPoller{ 486 pt: pt, 487 } 488 result.Poller = poller 489 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 490 return poller.pollUntilDone(ctx, frequency) 491 } 492 return result, nil 493} 494 495// ResumePerformMaintenance creates a new HTTPPoller from the specified resume token. 496// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 497func (client *VirtualMachineScaleSetVMsClient) ResumePerformMaintenance(ctx context.Context, token string) (HTTPPollerResponse, error) { 498 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.PerformMaintenance", token, client.con.Pipeline(), client.performMaintenanceHandleError) 499 if err != nil { 500 return HTTPPollerResponse{}, err 501 } 502 poller := &httpPoller{ 503 pt: pt, 504 } 505 resp, err := poller.Poll(ctx) 506 if err != nil { 507 return HTTPPollerResponse{}, err 508 } 509 result := HTTPPollerResponse{ 510 RawResponse: resp, 511 } 512 result.Poller = poller 513 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 514 return poller.pollUntilDone(ctx, frequency) 515 } 516 return result, nil 517} 518 519// PerformMaintenance - Performs maintenance on a virtual machine in a VM scale set. 520// If the operation fails it returns a generic error. 521func (client *VirtualMachineScaleSetVMsClient) performMaintenance(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginPerformMaintenanceOptions) (*azcore.Response, error) { 522 req, err := client.performMaintenanceCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 523 if err != nil { 524 return nil, err 525 } 526 resp, err := client.con.Pipeline().Do(req) 527 if err != nil { 528 return nil, err 529 } 530 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 531 return nil, client.performMaintenanceHandleError(resp) 532 } 533 return resp, nil 534} 535 536// performMaintenanceCreateRequest creates the PerformMaintenance request. 537func (client *VirtualMachineScaleSetVMsClient) performMaintenanceCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginPerformMaintenanceOptions) (*azcore.Request, error) { 538 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance" 539 if resourceGroupName == "" { 540 return nil, errors.New("parameter resourceGroupName cannot be empty") 541 } 542 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 543 if vmScaleSetName == "" { 544 return nil, errors.New("parameter vmScaleSetName cannot be empty") 545 } 546 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 547 if instanceID == "" { 548 return nil, errors.New("parameter instanceID cannot be empty") 549 } 550 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 551 if client.subscriptionID == "" { 552 return nil, errors.New("parameter client.subscriptionID cannot be empty") 553 } 554 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 555 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 556 if err != nil { 557 return nil, err 558 } 559 req.Telemetry(telemetryInfo) 560 reqQP := req.URL.Query() 561 reqQP.Set("api-version", "2021-03-01") 562 req.URL.RawQuery = reqQP.Encode() 563 return req, nil 564} 565 566// performMaintenanceHandleError handles the PerformMaintenance error response. 567func (client *VirtualMachineScaleSetVMsClient) performMaintenanceHandleError(resp *azcore.Response) error { 568 body, err := resp.Payload() 569 if err != nil { 570 return azcore.NewResponseError(err, resp.Response) 571 } 572 if len(body) == 0 { 573 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 574 } 575 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 576} 577 578// BeginPowerOff - Power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are getting charged for the resources. 579// Instead, use deallocate to release resources and avoid 580// charges. 581// If the operation fails it returns a generic error. 582func (client *VirtualMachineScaleSetVMsClient) BeginPowerOff(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginPowerOffOptions) (HTTPPollerResponse, error) { 583 resp, err := client.powerOff(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 584 if err != nil { 585 return HTTPPollerResponse{}, err 586 } 587 result := HTTPPollerResponse{ 588 RawResponse: resp.Response, 589 } 590 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.PowerOff", "", resp, client.con.Pipeline(), client.powerOffHandleError) 591 if err != nil { 592 return HTTPPollerResponse{}, err 593 } 594 poller := &httpPoller{ 595 pt: pt, 596 } 597 result.Poller = poller 598 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 599 return poller.pollUntilDone(ctx, frequency) 600 } 601 return result, nil 602} 603 604// ResumePowerOff creates a new HTTPPoller from the specified resume token. 605// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 606func (client *VirtualMachineScaleSetVMsClient) ResumePowerOff(ctx context.Context, token string) (HTTPPollerResponse, error) { 607 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.PowerOff", token, client.con.Pipeline(), client.powerOffHandleError) 608 if err != nil { 609 return HTTPPollerResponse{}, err 610 } 611 poller := &httpPoller{ 612 pt: pt, 613 } 614 resp, err := poller.Poll(ctx) 615 if err != nil { 616 return HTTPPollerResponse{}, err 617 } 618 result := HTTPPollerResponse{ 619 RawResponse: resp, 620 } 621 result.Poller = poller 622 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 623 return poller.pollUntilDone(ctx, frequency) 624 } 625 return result, nil 626} 627 628// PowerOff - Power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are getting charged for the resources. 629// Instead, use deallocate to release resources and avoid 630// charges. 631// If the operation fails it returns a generic error. 632func (client *VirtualMachineScaleSetVMsClient) powerOff(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginPowerOffOptions) (*azcore.Response, error) { 633 req, err := client.powerOffCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 634 if err != nil { 635 return nil, err 636 } 637 resp, err := client.con.Pipeline().Do(req) 638 if err != nil { 639 return nil, err 640 } 641 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 642 return nil, client.powerOffHandleError(resp) 643 } 644 return resp, nil 645} 646 647// powerOffCreateRequest creates the PowerOff request. 648func (client *VirtualMachineScaleSetVMsClient) powerOffCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginPowerOffOptions) (*azcore.Request, error) { 649 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff" 650 if resourceGroupName == "" { 651 return nil, errors.New("parameter resourceGroupName cannot be empty") 652 } 653 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 654 if vmScaleSetName == "" { 655 return nil, errors.New("parameter vmScaleSetName cannot be empty") 656 } 657 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 658 if instanceID == "" { 659 return nil, errors.New("parameter instanceID cannot be empty") 660 } 661 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 662 if client.subscriptionID == "" { 663 return nil, errors.New("parameter client.subscriptionID cannot be empty") 664 } 665 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 666 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 667 if err != nil { 668 return nil, err 669 } 670 req.Telemetry(telemetryInfo) 671 reqQP := req.URL.Query() 672 if options != nil && options.SkipShutdown != nil { 673 reqQP.Set("skipShutdown", strconv.FormatBool(*options.SkipShutdown)) 674 } 675 reqQP.Set("api-version", "2021-03-01") 676 req.URL.RawQuery = reqQP.Encode() 677 return req, nil 678} 679 680// powerOffHandleError handles the PowerOff error response. 681func (client *VirtualMachineScaleSetVMsClient) powerOffHandleError(resp *azcore.Response) error { 682 body, err := resp.Payload() 683 if err != nil { 684 return azcore.NewResponseError(err, resp.Response) 685 } 686 if len(body) == 0 { 687 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 688 } 689 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 690} 691 692// BeginRedeploy - Shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers it back on. 693// If the operation fails it returns a generic error. 694func (client *VirtualMachineScaleSetVMsClient) BeginRedeploy(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginRedeployOptions) (HTTPPollerResponse, error) { 695 resp, err := client.redeploy(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 696 if err != nil { 697 return HTTPPollerResponse{}, err 698 } 699 result := HTTPPollerResponse{ 700 RawResponse: resp.Response, 701 } 702 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Redeploy", "", resp, client.con.Pipeline(), client.redeployHandleError) 703 if err != nil { 704 return HTTPPollerResponse{}, err 705 } 706 poller := &httpPoller{ 707 pt: pt, 708 } 709 result.Poller = poller 710 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 711 return poller.pollUntilDone(ctx, frequency) 712 } 713 return result, nil 714} 715 716// ResumeRedeploy creates a new HTTPPoller from the specified resume token. 717// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 718func (client *VirtualMachineScaleSetVMsClient) ResumeRedeploy(ctx context.Context, token string) (HTTPPollerResponse, error) { 719 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Redeploy", token, client.con.Pipeline(), client.redeployHandleError) 720 if err != nil { 721 return HTTPPollerResponse{}, err 722 } 723 poller := &httpPoller{ 724 pt: pt, 725 } 726 resp, err := poller.Poll(ctx) 727 if err != nil { 728 return HTTPPollerResponse{}, err 729 } 730 result := HTTPPollerResponse{ 731 RawResponse: resp, 732 } 733 result.Poller = poller 734 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 735 return poller.pollUntilDone(ctx, frequency) 736 } 737 return result, nil 738} 739 740// Redeploy - Shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers it back on. 741// If the operation fails it returns a generic error. 742func (client *VirtualMachineScaleSetVMsClient) redeploy(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginRedeployOptions) (*azcore.Response, error) { 743 req, err := client.redeployCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 744 if err != nil { 745 return nil, err 746 } 747 resp, err := client.con.Pipeline().Do(req) 748 if err != nil { 749 return nil, err 750 } 751 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 752 return nil, client.redeployHandleError(resp) 753 } 754 return resp, nil 755} 756 757// redeployCreateRequest creates the Redeploy request. 758func (client *VirtualMachineScaleSetVMsClient) redeployCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginRedeployOptions) (*azcore.Request, error) { 759 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy" 760 if resourceGroupName == "" { 761 return nil, errors.New("parameter resourceGroupName cannot be empty") 762 } 763 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 764 if vmScaleSetName == "" { 765 return nil, errors.New("parameter vmScaleSetName cannot be empty") 766 } 767 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 768 if instanceID == "" { 769 return nil, errors.New("parameter instanceID cannot be empty") 770 } 771 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 772 if client.subscriptionID == "" { 773 return nil, errors.New("parameter client.subscriptionID cannot be empty") 774 } 775 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 776 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 777 if err != nil { 778 return nil, err 779 } 780 req.Telemetry(telemetryInfo) 781 reqQP := req.URL.Query() 782 reqQP.Set("api-version", "2021-03-01") 783 req.URL.RawQuery = reqQP.Encode() 784 return req, nil 785} 786 787// redeployHandleError handles the Redeploy error response. 788func (client *VirtualMachineScaleSetVMsClient) redeployHandleError(resp *azcore.Response) error { 789 body, err := resp.Payload() 790 if err != nil { 791 return azcore.NewResponseError(err, resp.Response) 792 } 793 if len(body) == 0 { 794 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 795 } 796 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 797} 798 799// BeginReimage - Reimages (upgrade the operating system) a specific virtual machine in a VM scale set. 800// If the operation fails it returns a generic error. 801func (client *VirtualMachineScaleSetVMsClient) BeginReimage(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginReimageOptions) (HTTPPollerResponse, error) { 802 resp, err := client.reimage(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 803 if err != nil { 804 return HTTPPollerResponse{}, err 805 } 806 result := HTTPPollerResponse{ 807 RawResponse: resp.Response, 808 } 809 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Reimage", "", resp, client.con.Pipeline(), client.reimageHandleError) 810 if err != nil { 811 return HTTPPollerResponse{}, err 812 } 813 poller := &httpPoller{ 814 pt: pt, 815 } 816 result.Poller = poller 817 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 818 return poller.pollUntilDone(ctx, frequency) 819 } 820 return result, nil 821} 822 823// ResumeReimage creates a new HTTPPoller from the specified resume token. 824// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 825func (client *VirtualMachineScaleSetVMsClient) ResumeReimage(ctx context.Context, token string) (HTTPPollerResponse, error) { 826 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Reimage", token, client.con.Pipeline(), client.reimageHandleError) 827 if err != nil { 828 return HTTPPollerResponse{}, err 829 } 830 poller := &httpPoller{ 831 pt: pt, 832 } 833 resp, err := poller.Poll(ctx) 834 if err != nil { 835 return HTTPPollerResponse{}, err 836 } 837 result := HTTPPollerResponse{ 838 RawResponse: resp, 839 } 840 result.Poller = poller 841 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 842 return poller.pollUntilDone(ctx, frequency) 843 } 844 return result, nil 845} 846 847// Reimage - Reimages (upgrade the operating system) a specific virtual machine in a VM scale set. 848// If the operation fails it returns a generic error. 849func (client *VirtualMachineScaleSetVMsClient) reimage(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginReimageOptions) (*azcore.Response, error) { 850 req, err := client.reimageCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 851 if err != nil { 852 return nil, err 853 } 854 resp, err := client.con.Pipeline().Do(req) 855 if err != nil { 856 return nil, err 857 } 858 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 859 return nil, client.reimageHandleError(resp) 860 } 861 return resp, nil 862} 863 864// reimageCreateRequest creates the Reimage request. 865func (client *VirtualMachineScaleSetVMsClient) reimageCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginReimageOptions) (*azcore.Request, error) { 866 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage" 867 if resourceGroupName == "" { 868 return nil, errors.New("parameter resourceGroupName cannot be empty") 869 } 870 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 871 if vmScaleSetName == "" { 872 return nil, errors.New("parameter vmScaleSetName cannot be empty") 873 } 874 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 875 if instanceID == "" { 876 return nil, errors.New("parameter instanceID cannot be empty") 877 } 878 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 879 if client.subscriptionID == "" { 880 return nil, errors.New("parameter client.subscriptionID cannot be empty") 881 } 882 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 883 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 884 if err != nil { 885 return nil, err 886 } 887 req.Telemetry(telemetryInfo) 888 reqQP := req.URL.Query() 889 reqQP.Set("api-version", "2021-03-01") 890 req.URL.RawQuery = reqQP.Encode() 891 if options != nil && options.VMScaleSetVMReimageInput != nil { 892 return req, req.MarshalAsJSON(*options.VMScaleSetVMReimageInput) 893 } 894 return req, nil 895} 896 897// reimageHandleError handles the Reimage error response. 898func (client *VirtualMachineScaleSetVMsClient) reimageHandleError(resp *azcore.Response) error { 899 body, err := resp.Payload() 900 if err != nil { 901 return azcore.NewResponseError(err, resp.Response) 902 } 903 if len(body) == 0 { 904 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 905 } 906 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 907} 908 909// BeginReimageAll - Allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This operation is only supported for 910// managed disks. 911// If the operation fails it returns a generic error. 912func (client *VirtualMachineScaleSetVMsClient) BeginReimageAll(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginReimageAllOptions) (HTTPPollerResponse, error) { 913 resp, err := client.reimageAll(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 914 if err != nil { 915 return HTTPPollerResponse{}, err 916 } 917 result := HTTPPollerResponse{ 918 RawResponse: resp.Response, 919 } 920 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.ReimageAll", "", resp, client.con.Pipeline(), client.reimageAllHandleError) 921 if err != nil { 922 return HTTPPollerResponse{}, err 923 } 924 poller := &httpPoller{ 925 pt: pt, 926 } 927 result.Poller = poller 928 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 929 return poller.pollUntilDone(ctx, frequency) 930 } 931 return result, nil 932} 933 934// ResumeReimageAll creates a new HTTPPoller from the specified resume token. 935// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 936func (client *VirtualMachineScaleSetVMsClient) ResumeReimageAll(ctx context.Context, token string) (HTTPPollerResponse, error) { 937 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.ReimageAll", token, client.con.Pipeline(), client.reimageAllHandleError) 938 if err != nil { 939 return HTTPPollerResponse{}, err 940 } 941 poller := &httpPoller{ 942 pt: pt, 943 } 944 resp, err := poller.Poll(ctx) 945 if err != nil { 946 return HTTPPollerResponse{}, err 947 } 948 result := HTTPPollerResponse{ 949 RawResponse: resp, 950 } 951 result.Poller = poller 952 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 953 return poller.pollUntilDone(ctx, frequency) 954 } 955 return result, nil 956} 957 958// ReimageAll - Allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This operation is only supported for managed 959// disks. 960// If the operation fails it returns a generic error. 961func (client *VirtualMachineScaleSetVMsClient) reimageAll(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginReimageAllOptions) (*azcore.Response, error) { 962 req, err := client.reimageAllCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 963 if err != nil { 964 return nil, err 965 } 966 resp, err := client.con.Pipeline().Do(req) 967 if err != nil { 968 return nil, err 969 } 970 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 971 return nil, client.reimageAllHandleError(resp) 972 } 973 return resp, nil 974} 975 976// reimageAllCreateRequest creates the ReimageAll request. 977func (client *VirtualMachineScaleSetVMsClient) reimageAllCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginReimageAllOptions) (*azcore.Request, error) { 978 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall" 979 if resourceGroupName == "" { 980 return nil, errors.New("parameter resourceGroupName cannot be empty") 981 } 982 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 983 if vmScaleSetName == "" { 984 return nil, errors.New("parameter vmScaleSetName cannot be empty") 985 } 986 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 987 if instanceID == "" { 988 return nil, errors.New("parameter instanceID cannot be empty") 989 } 990 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 991 if client.subscriptionID == "" { 992 return nil, errors.New("parameter client.subscriptionID cannot be empty") 993 } 994 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 995 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 996 if err != nil { 997 return nil, err 998 } 999 req.Telemetry(telemetryInfo) 1000 reqQP := req.URL.Query() 1001 reqQP.Set("api-version", "2021-03-01") 1002 req.URL.RawQuery = reqQP.Encode() 1003 return req, nil 1004} 1005 1006// reimageAllHandleError handles the ReimageAll error response. 1007func (client *VirtualMachineScaleSetVMsClient) reimageAllHandleError(resp *azcore.Response) error { 1008 body, err := resp.Payload() 1009 if err != nil { 1010 return azcore.NewResponseError(err, resp.Response) 1011 } 1012 if len(body) == 0 { 1013 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1014 } 1015 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1016} 1017 1018// BeginRestart - Restarts a virtual machine in a VM scale set. 1019// If the operation fails it returns a generic error. 1020func (client *VirtualMachineScaleSetVMsClient) BeginRestart(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginRestartOptions) (HTTPPollerResponse, error) { 1021 resp, err := client.restart(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 1022 if err != nil { 1023 return HTTPPollerResponse{}, err 1024 } 1025 result := HTTPPollerResponse{ 1026 RawResponse: resp.Response, 1027 } 1028 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Restart", "", resp, client.con.Pipeline(), client.restartHandleError) 1029 if err != nil { 1030 return HTTPPollerResponse{}, err 1031 } 1032 poller := &httpPoller{ 1033 pt: pt, 1034 } 1035 result.Poller = poller 1036 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1037 return poller.pollUntilDone(ctx, frequency) 1038 } 1039 return result, nil 1040} 1041 1042// ResumeRestart creates a new HTTPPoller from the specified resume token. 1043// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1044func (client *VirtualMachineScaleSetVMsClient) ResumeRestart(ctx context.Context, token string) (HTTPPollerResponse, error) { 1045 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Restart", token, client.con.Pipeline(), client.restartHandleError) 1046 if err != nil { 1047 return HTTPPollerResponse{}, err 1048 } 1049 poller := &httpPoller{ 1050 pt: pt, 1051 } 1052 resp, err := poller.Poll(ctx) 1053 if err != nil { 1054 return HTTPPollerResponse{}, err 1055 } 1056 result := HTTPPollerResponse{ 1057 RawResponse: resp, 1058 } 1059 result.Poller = poller 1060 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1061 return poller.pollUntilDone(ctx, frequency) 1062 } 1063 return result, nil 1064} 1065 1066// Restart - Restarts a virtual machine in a VM scale set. 1067// If the operation fails it returns a generic error. 1068func (client *VirtualMachineScaleSetVMsClient) restart(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginRestartOptions) (*azcore.Response, error) { 1069 req, err := client.restartCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 1070 if err != nil { 1071 return nil, err 1072 } 1073 resp, err := client.con.Pipeline().Do(req) 1074 if err != nil { 1075 return nil, err 1076 } 1077 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1078 return nil, client.restartHandleError(resp) 1079 } 1080 return resp, nil 1081} 1082 1083// restartCreateRequest creates the Restart request. 1084func (client *VirtualMachineScaleSetVMsClient) restartCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginRestartOptions) (*azcore.Request, error) { 1085 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart" 1086 if resourceGroupName == "" { 1087 return nil, errors.New("parameter resourceGroupName cannot be empty") 1088 } 1089 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1090 if vmScaleSetName == "" { 1091 return nil, errors.New("parameter vmScaleSetName cannot be empty") 1092 } 1093 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1094 if instanceID == "" { 1095 return nil, errors.New("parameter instanceID cannot be empty") 1096 } 1097 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 1098 if client.subscriptionID == "" { 1099 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1100 } 1101 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1102 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1103 if err != nil { 1104 return nil, err 1105 } 1106 req.Telemetry(telemetryInfo) 1107 reqQP := req.URL.Query() 1108 reqQP.Set("api-version", "2021-03-01") 1109 req.URL.RawQuery = reqQP.Encode() 1110 return req, nil 1111} 1112 1113// restartHandleError handles the Restart error response. 1114func (client *VirtualMachineScaleSetVMsClient) restartHandleError(resp *azcore.Response) error { 1115 body, err := resp.Payload() 1116 if err != nil { 1117 return azcore.NewResponseError(err, resp.Response) 1118 } 1119 if len(body) == 0 { 1120 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1121 } 1122 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1123} 1124 1125// RetrieveBootDiagnosticsData - The operation to retrieve SAS URIs of boot diagnostic logs for a virtual machine in a VM scale set. 1126// If the operation fails it returns the *CloudError error type. 1127func (client *VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsRetrieveBootDiagnosticsDataOptions) (RetrieveBootDiagnosticsDataResultResponse, error) { 1128 req, err := client.retrieveBootDiagnosticsDataCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 1129 if err != nil { 1130 return RetrieveBootDiagnosticsDataResultResponse{}, err 1131 } 1132 resp, err := client.con.Pipeline().Do(req) 1133 if err != nil { 1134 return RetrieveBootDiagnosticsDataResultResponse{}, err 1135 } 1136 if !resp.HasStatusCode(http.StatusOK) { 1137 return RetrieveBootDiagnosticsDataResultResponse{}, client.retrieveBootDiagnosticsDataHandleError(resp) 1138 } 1139 return client.retrieveBootDiagnosticsDataHandleResponse(resp) 1140} 1141 1142// retrieveBootDiagnosticsDataCreateRequest creates the RetrieveBootDiagnosticsData request. 1143func (client *VirtualMachineScaleSetVMsClient) retrieveBootDiagnosticsDataCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsRetrieveBootDiagnosticsDataOptions) (*azcore.Request, error) { 1144 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData" 1145 if resourceGroupName == "" { 1146 return nil, errors.New("parameter resourceGroupName cannot be empty") 1147 } 1148 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1149 if vmScaleSetName == "" { 1150 return nil, errors.New("parameter vmScaleSetName cannot be empty") 1151 } 1152 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1153 if instanceID == "" { 1154 return nil, errors.New("parameter instanceID cannot be empty") 1155 } 1156 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 1157 if client.subscriptionID == "" { 1158 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1159 } 1160 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1161 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1162 if err != nil { 1163 return nil, err 1164 } 1165 req.Telemetry(telemetryInfo) 1166 reqQP := req.URL.Query() 1167 if options != nil && options.SasURIExpirationTimeInMinutes != nil { 1168 reqQP.Set("sasUriExpirationTimeInMinutes", strconv.FormatInt(int64(*options.SasURIExpirationTimeInMinutes), 10)) 1169 } 1170 reqQP.Set("api-version", "2021-03-01") 1171 req.URL.RawQuery = reqQP.Encode() 1172 req.Header.Set("Accept", "application/json") 1173 return req, nil 1174} 1175 1176// retrieveBootDiagnosticsDataHandleResponse handles the RetrieveBootDiagnosticsData response. 1177func (client *VirtualMachineScaleSetVMsClient) retrieveBootDiagnosticsDataHandleResponse(resp *azcore.Response) (RetrieveBootDiagnosticsDataResultResponse, error) { 1178 var val *RetrieveBootDiagnosticsDataResult 1179 if err := resp.UnmarshalAsJSON(&val); err != nil { 1180 return RetrieveBootDiagnosticsDataResultResponse{}, err 1181 } 1182 return RetrieveBootDiagnosticsDataResultResponse{RawResponse: resp.Response, RetrieveBootDiagnosticsDataResult: val}, nil 1183} 1184 1185// retrieveBootDiagnosticsDataHandleError handles the RetrieveBootDiagnosticsData error response. 1186func (client *VirtualMachineScaleSetVMsClient) retrieveBootDiagnosticsDataHandleError(resp *azcore.Response) error { 1187 body, err := resp.Payload() 1188 if err != nil { 1189 return azcore.NewResponseError(err, resp.Response) 1190 } 1191 errType := CloudError{raw: string(body)} 1192 if err := resp.UnmarshalAsJSON(&errType); err != nil { 1193 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 1194 } 1195 return azcore.NewResponseError(&errType, resp.Response) 1196} 1197 1198// BeginRunCommand - Run command on a virtual machine in a VM scale set. 1199// If the operation fails it returns a generic error. 1200func (client *VirtualMachineScaleSetVMsClient) BeginRunCommand(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, parameters RunCommandInput, options *VirtualMachineScaleSetVMsBeginRunCommandOptions) (RunCommandResultPollerResponse, error) { 1201 resp, err := client.runCommand(ctx, resourceGroupName, vmScaleSetName, instanceID, parameters, options) 1202 if err != nil { 1203 return RunCommandResultPollerResponse{}, err 1204 } 1205 result := RunCommandResultPollerResponse{ 1206 RawResponse: resp.Response, 1207 } 1208 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.RunCommand", "location", resp, client.con.Pipeline(), client.runCommandHandleError) 1209 if err != nil { 1210 return RunCommandResultPollerResponse{}, err 1211 } 1212 poller := &runCommandResultPoller{ 1213 pt: pt, 1214 } 1215 result.Poller = poller 1216 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (RunCommandResultResponse, error) { 1217 return poller.pollUntilDone(ctx, frequency) 1218 } 1219 return result, nil 1220} 1221 1222// ResumeRunCommand creates a new RunCommandResultPoller from the specified resume token. 1223// token - The value must come from a previous call to RunCommandResultPoller.ResumeToken(). 1224func (client *VirtualMachineScaleSetVMsClient) ResumeRunCommand(ctx context.Context, token string) (RunCommandResultPollerResponse, error) { 1225 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.RunCommand", token, client.con.Pipeline(), client.runCommandHandleError) 1226 if err != nil { 1227 return RunCommandResultPollerResponse{}, err 1228 } 1229 poller := &runCommandResultPoller{ 1230 pt: pt, 1231 } 1232 resp, err := poller.Poll(ctx) 1233 if err != nil { 1234 return RunCommandResultPollerResponse{}, err 1235 } 1236 result := RunCommandResultPollerResponse{ 1237 RawResponse: resp, 1238 } 1239 result.Poller = poller 1240 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (RunCommandResultResponse, error) { 1241 return poller.pollUntilDone(ctx, frequency) 1242 } 1243 return result, nil 1244} 1245 1246// RunCommand - Run command on a virtual machine in a VM scale set. 1247// If the operation fails it returns a generic error. 1248func (client *VirtualMachineScaleSetVMsClient) runCommand(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, parameters RunCommandInput, options *VirtualMachineScaleSetVMsBeginRunCommandOptions) (*azcore.Response, error) { 1249 req, err := client.runCommandCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, parameters, options) 1250 if err != nil { 1251 return nil, err 1252 } 1253 resp, err := client.con.Pipeline().Do(req) 1254 if err != nil { 1255 return nil, err 1256 } 1257 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1258 return nil, client.runCommandHandleError(resp) 1259 } 1260 return resp, nil 1261} 1262 1263// runCommandCreateRequest creates the RunCommand request. 1264func (client *VirtualMachineScaleSetVMsClient) runCommandCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, parameters RunCommandInput, options *VirtualMachineScaleSetVMsBeginRunCommandOptions) (*azcore.Request, error) { 1265 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand" 1266 if resourceGroupName == "" { 1267 return nil, errors.New("parameter resourceGroupName cannot be empty") 1268 } 1269 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1270 if vmScaleSetName == "" { 1271 return nil, errors.New("parameter vmScaleSetName cannot be empty") 1272 } 1273 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1274 if instanceID == "" { 1275 return nil, errors.New("parameter instanceID cannot be empty") 1276 } 1277 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 1278 if client.subscriptionID == "" { 1279 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1280 } 1281 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1282 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1283 if err != nil { 1284 return nil, err 1285 } 1286 req.Telemetry(telemetryInfo) 1287 reqQP := req.URL.Query() 1288 reqQP.Set("api-version", "2021-03-01") 1289 req.URL.RawQuery = reqQP.Encode() 1290 req.Header.Set("Accept", "application/json, text/json") 1291 return req, req.MarshalAsJSON(parameters) 1292} 1293 1294// runCommandHandleError handles the RunCommand error response. 1295func (client *VirtualMachineScaleSetVMsClient) runCommandHandleError(resp *azcore.Response) error { 1296 body, err := resp.Payload() 1297 if err != nil { 1298 return azcore.NewResponseError(err, resp.Response) 1299 } 1300 if len(body) == 0 { 1301 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1302 } 1303 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1304} 1305 1306// SimulateEviction - The operation to simulate the eviction of spot virtual machine in a VM scale set. 1307// If the operation fails it returns a generic error. 1308func (client *VirtualMachineScaleSetVMsClient) SimulateEviction(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsSimulateEvictionOptions) (*http.Response, error) { 1309 req, err := client.simulateEvictionCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 1310 if err != nil { 1311 return nil, err 1312 } 1313 resp, err := client.con.Pipeline().Do(req) 1314 if err != nil { 1315 return nil, err 1316 } 1317 if !resp.HasStatusCode(http.StatusNoContent) { 1318 return nil, client.simulateEvictionHandleError(resp) 1319 } 1320 return resp.Response, nil 1321} 1322 1323// simulateEvictionCreateRequest creates the SimulateEviction request. 1324func (client *VirtualMachineScaleSetVMsClient) simulateEvictionCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsSimulateEvictionOptions) (*azcore.Request, error) { 1325 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction" 1326 if resourceGroupName == "" { 1327 return nil, errors.New("parameter resourceGroupName cannot be empty") 1328 } 1329 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1330 if vmScaleSetName == "" { 1331 return nil, errors.New("parameter vmScaleSetName cannot be empty") 1332 } 1333 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1334 if instanceID == "" { 1335 return nil, errors.New("parameter instanceID cannot be empty") 1336 } 1337 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 1338 if client.subscriptionID == "" { 1339 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1340 } 1341 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1342 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1343 if err != nil { 1344 return nil, err 1345 } 1346 req.Telemetry(telemetryInfo) 1347 reqQP := req.URL.Query() 1348 reqQP.Set("api-version", "2021-03-01") 1349 req.URL.RawQuery = reqQP.Encode() 1350 return req, nil 1351} 1352 1353// simulateEvictionHandleError handles the SimulateEviction error response. 1354func (client *VirtualMachineScaleSetVMsClient) simulateEvictionHandleError(resp *azcore.Response) error { 1355 body, err := resp.Payload() 1356 if err != nil { 1357 return azcore.NewResponseError(err, resp.Response) 1358 } 1359 if len(body) == 0 { 1360 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1361 } 1362 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1363} 1364 1365// BeginStart - Starts a virtual machine in a VM scale set. 1366// If the operation fails it returns a generic error. 1367func (client *VirtualMachineScaleSetVMsClient) BeginStart(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginStartOptions) (HTTPPollerResponse, error) { 1368 resp, err := client.start(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 1369 if err != nil { 1370 return HTTPPollerResponse{}, err 1371 } 1372 result := HTTPPollerResponse{ 1373 RawResponse: resp.Response, 1374 } 1375 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Start", "", resp, client.con.Pipeline(), client.startHandleError) 1376 if err != nil { 1377 return HTTPPollerResponse{}, err 1378 } 1379 poller := &httpPoller{ 1380 pt: pt, 1381 } 1382 result.Poller = poller 1383 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1384 return poller.pollUntilDone(ctx, frequency) 1385 } 1386 return result, nil 1387} 1388 1389// ResumeStart creates a new HTTPPoller from the specified resume token. 1390// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1391func (client *VirtualMachineScaleSetVMsClient) ResumeStart(ctx context.Context, token string) (HTTPPollerResponse, error) { 1392 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Start", token, client.con.Pipeline(), client.startHandleError) 1393 if err != nil { 1394 return HTTPPollerResponse{}, err 1395 } 1396 poller := &httpPoller{ 1397 pt: pt, 1398 } 1399 resp, err := poller.Poll(ctx) 1400 if err != nil { 1401 return HTTPPollerResponse{}, err 1402 } 1403 result := HTTPPollerResponse{ 1404 RawResponse: resp, 1405 } 1406 result.Poller = poller 1407 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1408 return poller.pollUntilDone(ctx, frequency) 1409 } 1410 return result, nil 1411} 1412 1413// Start - Starts a virtual machine in a VM scale set. 1414// If the operation fails it returns a generic error. 1415func (client *VirtualMachineScaleSetVMsClient) start(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginStartOptions) (*azcore.Response, error) { 1416 req, err := client.startCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options) 1417 if err != nil { 1418 return nil, err 1419 } 1420 resp, err := client.con.Pipeline().Do(req) 1421 if err != nil { 1422 return nil, err 1423 } 1424 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1425 return nil, client.startHandleError(resp) 1426 } 1427 return resp, nil 1428} 1429 1430// startCreateRequest creates the Start request. 1431func (client *VirtualMachineScaleSetVMsClient) startCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMsBeginStartOptions) (*azcore.Request, error) { 1432 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start" 1433 if resourceGroupName == "" { 1434 return nil, errors.New("parameter resourceGroupName cannot be empty") 1435 } 1436 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1437 if vmScaleSetName == "" { 1438 return nil, errors.New("parameter vmScaleSetName cannot be empty") 1439 } 1440 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1441 if instanceID == "" { 1442 return nil, errors.New("parameter instanceID cannot be empty") 1443 } 1444 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 1445 if client.subscriptionID == "" { 1446 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1447 } 1448 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1449 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1450 if err != nil { 1451 return nil, err 1452 } 1453 req.Telemetry(telemetryInfo) 1454 reqQP := req.URL.Query() 1455 reqQP.Set("api-version", "2021-03-01") 1456 req.URL.RawQuery = reqQP.Encode() 1457 return req, nil 1458} 1459 1460// startHandleError handles the Start error response. 1461func (client *VirtualMachineScaleSetVMsClient) startHandleError(resp *azcore.Response) error { 1462 body, err := resp.Payload() 1463 if err != nil { 1464 return azcore.NewResponseError(err, resp.Response) 1465 } 1466 if len(body) == 0 { 1467 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1468 } 1469 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1470} 1471 1472// BeginUpdate - Updates a virtual machine of a VM scale set. 1473// If the operation fails it returns a generic error. 1474func (client *VirtualMachineScaleSetVMsClient) BeginUpdate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM, options *VirtualMachineScaleSetVMsBeginUpdateOptions) (VirtualMachineScaleSetVMPollerResponse, error) { 1475 resp, err := client.update(ctx, resourceGroupName, vmScaleSetName, instanceID, parameters, options) 1476 if err != nil { 1477 return VirtualMachineScaleSetVMPollerResponse{}, err 1478 } 1479 result := VirtualMachineScaleSetVMPollerResponse{ 1480 RawResponse: resp.Response, 1481 } 1482 pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMsClient.Update", "", resp, client.con.Pipeline(), client.updateHandleError) 1483 if err != nil { 1484 return VirtualMachineScaleSetVMPollerResponse{}, err 1485 } 1486 poller := &virtualMachineScaleSetVMPoller{ 1487 pt: pt, 1488 } 1489 result.Poller = poller 1490 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineScaleSetVMResponse, error) { 1491 return poller.pollUntilDone(ctx, frequency) 1492 } 1493 return result, nil 1494} 1495 1496// ResumeUpdate creates a new VirtualMachineScaleSetVMPoller from the specified resume token. 1497// token - The value must come from a previous call to VirtualMachineScaleSetVMPoller.ResumeToken(). 1498func (client *VirtualMachineScaleSetVMsClient) ResumeUpdate(ctx context.Context, token string) (VirtualMachineScaleSetVMPollerResponse, error) { 1499 pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMsClient.Update", token, client.con.Pipeline(), client.updateHandleError) 1500 if err != nil { 1501 return VirtualMachineScaleSetVMPollerResponse{}, err 1502 } 1503 poller := &virtualMachineScaleSetVMPoller{ 1504 pt: pt, 1505 } 1506 resp, err := poller.Poll(ctx) 1507 if err != nil { 1508 return VirtualMachineScaleSetVMPollerResponse{}, err 1509 } 1510 result := VirtualMachineScaleSetVMPollerResponse{ 1511 RawResponse: resp, 1512 } 1513 result.Poller = poller 1514 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineScaleSetVMResponse, error) { 1515 return poller.pollUntilDone(ctx, frequency) 1516 } 1517 return result, nil 1518} 1519 1520// Update - Updates a virtual machine of a VM scale set. 1521// If the operation fails it returns a generic error. 1522func (client *VirtualMachineScaleSetVMsClient) update(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM, options *VirtualMachineScaleSetVMsBeginUpdateOptions) (*azcore.Response, error) { 1523 req, err := client.updateCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, parameters, options) 1524 if err != nil { 1525 return nil, err 1526 } 1527 resp, err := client.con.Pipeline().Do(req) 1528 if err != nil { 1529 return nil, err 1530 } 1531 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1532 return nil, client.updateHandleError(resp) 1533 } 1534 return resp, nil 1535} 1536 1537// updateCreateRequest creates the Update request. 1538func (client *VirtualMachineScaleSetVMsClient) updateCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM, options *VirtualMachineScaleSetVMsBeginUpdateOptions) (*azcore.Request, error) { 1539 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}" 1540 if resourceGroupName == "" { 1541 return nil, errors.New("parameter resourceGroupName cannot be empty") 1542 } 1543 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1544 if vmScaleSetName == "" { 1545 return nil, errors.New("parameter vmScaleSetName cannot be empty") 1546 } 1547 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1548 if instanceID == "" { 1549 return nil, errors.New("parameter instanceID cannot be empty") 1550 } 1551 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID)) 1552 if client.subscriptionID == "" { 1553 return nil, errors.New("parameter client.subscriptionID cannot be empty") 1554 } 1555 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1556 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1557 if err != nil { 1558 return nil, err 1559 } 1560 req.Telemetry(telemetryInfo) 1561 reqQP := req.URL.Query() 1562 reqQP.Set("api-version", "2021-03-01") 1563 req.URL.RawQuery = reqQP.Encode() 1564 req.Header.Set("Accept", "application/json") 1565 return req, req.MarshalAsJSON(parameters) 1566} 1567 1568// updateHandleError handles the Update error response. 1569func (client *VirtualMachineScaleSetVMsClient) updateHandleError(resp *azcore.Response) error { 1570 body, err := resp.Payload() 1571 if err != nil { 1572 return azcore.NewResponseError(err, resp.Response) 1573 } 1574 if len(body) == 0 { 1575 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1576 } 1577 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1578} 1579