1// +build go1.13 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// Code generated by Microsoft (R) AutoRest Code Generator. 6// Changes may cause incorrect behavior and will be lost if the code is regenerated. 7 8package armcompute 9 10import ( 11 "context" 12 "errors" 13 "fmt" 14 "github.com/Azure/azure-sdk-for-go/sdk/armcore" 15 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 16 "io/ioutil" 17 "net/http" 18 "net/url" 19 "strconv" 20 "strings" 21 "time" 22) 23 24// VirtualMachineScaleSetVMSClient contains the methods for the VirtualMachineScaleSetVMS group. 25// Don't use this type directly, use NewVirtualMachineScaleSetVMSClient() instead. 26type VirtualMachineScaleSetVMSClient struct { 27 con *armcore.Connection 28 subscriptionID string 29} 30 31// NewVirtualMachineScaleSetVMSClient creates a new instance of VirtualMachineScaleSetVMSClient with the specified values. 32func NewVirtualMachineScaleSetVMSClient(con *armcore.Connection, subscriptionID string) *VirtualMachineScaleSetVMSClient { 33 return &VirtualMachineScaleSetVMSClient{con: con, subscriptionID: subscriptionID} 34} 35 36// BeginDeallocate - Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the compute resources it uses. 37// You are not billed for the compute resources of this virtual 38// machine once it is deallocated. 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.NewPoller("VirtualMachineScaleSetVMSClient.Deallocate", "", resp, client.deallocateHandleError) 48 if err != nil { 49 return HTTPPollerResponse{}, err 50 } 51 poller := &httpPoller{ 52 pt: pt, 53 pipeline: client.con.Pipeline(), 54 } 55 result.Poller = poller 56 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 57 return poller.pollUntilDone(ctx, frequency) 58 } 59 return result, nil 60} 61 62// ResumeDeallocate creates a new HTTPPoller from the specified resume token. 63// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 64func (client *VirtualMachineScaleSetVMSClient) ResumeDeallocate(token string) (HTTPPoller, error) { 65 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Deallocate", token, client.deallocateHandleError) 66 if err != nil { 67 return nil, err 68 } 69 return &httpPoller{ 70 pipeline: client.con.Pipeline(), 71 pt: pt, 72 }, nil 73} 74 75// Deallocate - Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the compute resources it uses. You 76// are not billed for the compute resources of this virtual 77// machine once it is deallocated. 78func (client *VirtualMachineScaleSetVMSClient) deallocate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginDeallocateOptions) (*azcore.Response, error) { 79 req, err := client.deallocateCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 80 if err != nil { 81 return nil, err 82 } 83 resp, err := client.con.Pipeline().Do(req) 84 if err != nil { 85 return nil, err 86 } 87 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 88 return nil, client.deallocateHandleError(resp) 89 } 90 return resp, nil 91} 92 93// deallocateCreateRequest creates the Deallocate request. 94func (client *VirtualMachineScaleSetVMSClient) deallocateCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginDeallocateOptions) (*azcore.Request, error) { 95 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate" 96 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 97 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 98 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 99 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 100 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 101 if err != nil { 102 return nil, err 103 } 104 req.Telemetry(telemetryInfo) 105 query := req.URL.Query() 106 query.Set("api-version", "2020-06-01") 107 req.URL.RawQuery = query.Encode() 108 return req, nil 109} 110 111// deallocateHandleError handles the Deallocate error response. 112func (client *VirtualMachineScaleSetVMSClient) deallocateHandleError(resp *azcore.Response) error { 113 body, err := ioutil.ReadAll(resp.Body) 114 if err != nil { 115 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 116 } 117 if len(body) == 0 { 118 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 119 } 120 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 121} 122 123// BeginDelete - Deletes a virtual machine from a VM scale set. 124func (client *VirtualMachineScaleSetVMSClient) BeginDelete(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginDeleteOptions) (HTTPPollerResponse, error) { 125 resp, err := client.delete(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 126 if err != nil { 127 return HTTPPollerResponse{}, err 128 } 129 result := HTTPPollerResponse{ 130 RawResponse: resp.Response, 131 } 132 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.Delete", "", resp, client.deleteHandleError) 133 if err != nil { 134 return HTTPPollerResponse{}, err 135 } 136 poller := &httpPoller{ 137 pt: pt, 138 pipeline: client.con.Pipeline(), 139 } 140 result.Poller = poller 141 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 142 return poller.pollUntilDone(ctx, frequency) 143 } 144 return result, nil 145} 146 147// ResumeDelete creates a new HTTPPoller from the specified resume token. 148// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 149func (client *VirtualMachineScaleSetVMSClient) ResumeDelete(token string) (HTTPPoller, error) { 150 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Delete", token, client.deleteHandleError) 151 if err != nil { 152 return nil, err 153 } 154 return &httpPoller{ 155 pipeline: client.con.Pipeline(), 156 pt: pt, 157 }, nil 158} 159 160// Delete - Deletes a virtual machine from a VM scale set. 161func (client *VirtualMachineScaleSetVMSClient) delete(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginDeleteOptions) (*azcore.Response, error) { 162 req, err := client.deleteCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 163 if err != nil { 164 return nil, err 165 } 166 resp, err := client.con.Pipeline().Do(req) 167 if err != nil { 168 return nil, err 169 } 170 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 171 return nil, client.deleteHandleError(resp) 172 } 173 return resp, nil 174} 175 176// deleteCreateRequest creates the Delete request. 177func (client *VirtualMachineScaleSetVMSClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginDeleteOptions) (*azcore.Request, error) { 178 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}" 179 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 180 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 181 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 182 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 183 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 184 if err != nil { 185 return nil, err 186 } 187 req.Telemetry(telemetryInfo) 188 query := req.URL.Query() 189 query.Set("api-version", "2020-06-01") 190 req.URL.RawQuery = query.Encode() 191 return req, nil 192} 193 194// deleteHandleError handles the Delete error response. 195func (client *VirtualMachineScaleSetVMSClient) deleteHandleError(resp *azcore.Response) error { 196 body, err := ioutil.ReadAll(resp.Body) 197 if err != nil { 198 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 199 } 200 if len(body) == 0 { 201 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 202 } 203 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 204} 205 206// Get - Gets a virtual machine from a VM scale set. 207func (client *VirtualMachineScaleSetVMSClient) Get(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSGetOptions) (VirtualMachineScaleSetVMResponse, error) { 208 req, err := client.getCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 209 if err != nil { 210 return VirtualMachineScaleSetVMResponse{}, err 211 } 212 resp, err := client.con.Pipeline().Do(req) 213 if err != nil { 214 return VirtualMachineScaleSetVMResponse{}, err 215 } 216 if !resp.HasStatusCode(http.StatusOK) { 217 return VirtualMachineScaleSetVMResponse{}, client.getHandleError(resp) 218 } 219 return client.getHandleResponse(resp) 220} 221 222// getCreateRequest creates the Get request. 223func (client *VirtualMachineScaleSetVMSClient) getCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSGetOptions) (*azcore.Request, error) { 224 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}" 225 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 226 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 227 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 228 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 229 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 230 if err != nil { 231 return nil, err 232 } 233 req.Telemetry(telemetryInfo) 234 query := req.URL.Query() 235 if options != nil && options.Expand != nil { 236 query.Set("$expand", "instanceView") 237 } 238 query.Set("api-version", "2020-06-01") 239 req.URL.RawQuery = query.Encode() 240 req.Header.Set("Accept", "application/json") 241 return req, nil 242} 243 244// getHandleResponse handles the Get response. 245func (client *VirtualMachineScaleSetVMSClient) getHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMResponse, error) { 246 var val *VirtualMachineScaleSetVM 247 if err := resp.UnmarshalAsJSON(&val); err != nil { 248 return VirtualMachineScaleSetVMResponse{}, err 249 } 250 return VirtualMachineScaleSetVMResponse{RawResponse: resp.Response, VirtualMachineScaleSetVM: val}, nil 251} 252 253// getHandleError handles the Get error response. 254func (client *VirtualMachineScaleSetVMSClient) getHandleError(resp *azcore.Response) error { 255 body, err := ioutil.ReadAll(resp.Body) 256 if err != nil { 257 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 258 } 259 if len(body) == 0 { 260 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 261 } 262 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 263} 264 265// GetInstanceView - Gets the status of a virtual machine from a VM scale set. 266func (client *VirtualMachineScaleSetVMSClient) GetInstanceView(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSGetInstanceViewOptions) (VirtualMachineScaleSetVMInstanceViewResponse, error) { 267 req, err := client.getInstanceViewCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 268 if err != nil { 269 return VirtualMachineScaleSetVMInstanceViewResponse{}, err 270 } 271 resp, err := client.con.Pipeline().Do(req) 272 if err != nil { 273 return VirtualMachineScaleSetVMInstanceViewResponse{}, err 274 } 275 if !resp.HasStatusCode(http.StatusOK) { 276 return VirtualMachineScaleSetVMInstanceViewResponse{}, client.getInstanceViewHandleError(resp) 277 } 278 return client.getInstanceViewHandleResponse(resp) 279} 280 281// getInstanceViewCreateRequest creates the GetInstanceView request. 282func (client *VirtualMachineScaleSetVMSClient) getInstanceViewCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSGetInstanceViewOptions) (*azcore.Request, error) { 283 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView" 284 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 285 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 286 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 287 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 288 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 289 if err != nil { 290 return nil, err 291 } 292 req.Telemetry(telemetryInfo) 293 query := req.URL.Query() 294 query.Set("api-version", "2020-06-01") 295 req.URL.RawQuery = query.Encode() 296 req.Header.Set("Accept", "application/json") 297 return req, nil 298} 299 300// getInstanceViewHandleResponse handles the GetInstanceView response. 301func (client *VirtualMachineScaleSetVMSClient) getInstanceViewHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMInstanceViewResponse, error) { 302 var val *VirtualMachineScaleSetVMInstanceView 303 if err := resp.UnmarshalAsJSON(&val); err != nil { 304 return VirtualMachineScaleSetVMInstanceViewResponse{}, err 305 } 306 return VirtualMachineScaleSetVMInstanceViewResponse{RawResponse: resp.Response, VirtualMachineScaleSetVMInstanceView: val}, nil 307} 308 309// getInstanceViewHandleError handles the GetInstanceView error response. 310func (client *VirtualMachineScaleSetVMSClient) getInstanceViewHandleError(resp *azcore.Response) error { 311 body, err := ioutil.ReadAll(resp.Body) 312 if err != nil { 313 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 314 } 315 if len(body) == 0 { 316 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 317 } 318 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 319} 320 321// List - Gets a list of all virtual machines in a VM scale sets. 322func (client *VirtualMachineScaleSetVMSClient) List(resourceGroupName string, virtualMachineScaleSetName string, options *VirtualMachineScaleSetVMSListOptions) VirtualMachineScaleSetVMListResultPager { 323 return &virtualMachineScaleSetVMListResultPager{ 324 pipeline: client.con.Pipeline(), 325 requester: func(ctx context.Context) (*azcore.Request, error) { 326 return client.listCreateRequest(ctx, resourceGroupName, virtualMachineScaleSetName, options) 327 }, 328 responder: client.listHandleResponse, 329 errorer: client.listHandleError, 330 advancer: func(ctx context.Context, resp VirtualMachineScaleSetVMListResultResponse) (*azcore.Request, error) { 331 return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineScaleSetVMListResult.NextLink) 332 }, 333 statusCodes: []int{http.StatusOK}, 334 } 335} 336 337// listCreateRequest creates the List request. 338func (client *VirtualMachineScaleSetVMSClient) listCreateRequest(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, options *VirtualMachineScaleSetVMSListOptions) (*azcore.Request, error) { 339 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines" 340 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 341 urlPath = strings.ReplaceAll(urlPath, "{virtualMachineScaleSetName}", url.PathEscape(virtualMachineScaleSetName)) 342 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 343 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 344 if err != nil { 345 return nil, err 346 } 347 req.Telemetry(telemetryInfo) 348 query := req.URL.Query() 349 if options != nil && options.Filter != nil { 350 query.Set("$filter", *options.Filter) 351 } 352 if options != nil && options.SelectParameter != nil { 353 query.Set("$select", *options.SelectParameter) 354 } 355 if options != nil && options.Expand != nil { 356 query.Set("$expand", *options.Expand) 357 } 358 query.Set("api-version", "2020-06-01") 359 req.URL.RawQuery = query.Encode() 360 req.Header.Set("Accept", "application/json") 361 return req, nil 362} 363 364// listHandleResponse handles the List response. 365func (client *VirtualMachineScaleSetVMSClient) listHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMListResultResponse, error) { 366 var val *VirtualMachineScaleSetVMListResult 367 if err := resp.UnmarshalAsJSON(&val); err != nil { 368 return VirtualMachineScaleSetVMListResultResponse{}, err 369 } 370 return VirtualMachineScaleSetVMListResultResponse{RawResponse: resp.Response, VirtualMachineScaleSetVMListResult: val}, nil 371} 372 373// listHandleError handles the List error response. 374func (client *VirtualMachineScaleSetVMSClient) listHandleError(resp *azcore.Response) error { 375 body, err := ioutil.ReadAll(resp.Body) 376 if err != nil { 377 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 378 } 379 if len(body) == 0 { 380 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 381 } 382 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 383} 384 385// BeginPerformMaintenance - Performs maintenance on a virtual machine in a VM scale set. 386func (client *VirtualMachineScaleSetVMSClient) BeginPerformMaintenance(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginPerformMaintenanceOptions) (HTTPPollerResponse, error) { 387 resp, err := client.performMaintenance(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 388 if err != nil { 389 return HTTPPollerResponse{}, err 390 } 391 result := HTTPPollerResponse{ 392 RawResponse: resp.Response, 393 } 394 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.PerformMaintenance", "", resp, client.performMaintenanceHandleError) 395 if err != nil { 396 return HTTPPollerResponse{}, err 397 } 398 poller := &httpPoller{ 399 pt: pt, 400 pipeline: client.con.Pipeline(), 401 } 402 result.Poller = poller 403 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 404 return poller.pollUntilDone(ctx, frequency) 405 } 406 return result, nil 407} 408 409// ResumePerformMaintenance creates a new HTTPPoller from the specified resume token. 410// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 411func (client *VirtualMachineScaleSetVMSClient) ResumePerformMaintenance(token string) (HTTPPoller, error) { 412 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.PerformMaintenance", token, client.performMaintenanceHandleError) 413 if err != nil { 414 return nil, err 415 } 416 return &httpPoller{ 417 pipeline: client.con.Pipeline(), 418 pt: pt, 419 }, nil 420} 421 422// PerformMaintenance - Performs maintenance on a virtual machine in a VM scale set. 423func (client *VirtualMachineScaleSetVMSClient) performMaintenance(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginPerformMaintenanceOptions) (*azcore.Response, error) { 424 req, err := client.performMaintenanceCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 425 if err != nil { 426 return nil, err 427 } 428 resp, err := client.con.Pipeline().Do(req) 429 if err != nil { 430 return nil, err 431 } 432 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 433 return nil, client.performMaintenanceHandleError(resp) 434 } 435 return resp, nil 436} 437 438// performMaintenanceCreateRequest creates the PerformMaintenance request. 439func (client *VirtualMachineScaleSetVMSClient) performMaintenanceCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginPerformMaintenanceOptions) (*azcore.Request, error) { 440 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance" 441 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 442 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 443 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 444 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 445 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 446 if err != nil { 447 return nil, err 448 } 449 req.Telemetry(telemetryInfo) 450 query := req.URL.Query() 451 query.Set("api-version", "2020-06-01") 452 req.URL.RawQuery = query.Encode() 453 return req, nil 454} 455 456// performMaintenanceHandleError handles the PerformMaintenance error response. 457func (client *VirtualMachineScaleSetVMSClient) performMaintenanceHandleError(resp *azcore.Response) error { 458 body, err := ioutil.ReadAll(resp.Body) 459 if err != nil { 460 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 461 } 462 if len(body) == 0 { 463 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 464 } 465 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 466} 467 468// 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. 469// Instead, use deallocate to release resources and avoid 470// charges. 471func (client *VirtualMachineScaleSetVMSClient) BeginPowerOff(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginPowerOffOptions) (HTTPPollerResponse, error) { 472 resp, err := client.powerOff(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 473 if err != nil { 474 return HTTPPollerResponse{}, err 475 } 476 result := HTTPPollerResponse{ 477 RawResponse: resp.Response, 478 } 479 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.PowerOff", "", resp, client.powerOffHandleError) 480 if err != nil { 481 return HTTPPollerResponse{}, err 482 } 483 poller := &httpPoller{ 484 pt: pt, 485 pipeline: client.con.Pipeline(), 486 } 487 result.Poller = poller 488 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 489 return poller.pollUntilDone(ctx, frequency) 490 } 491 return result, nil 492} 493 494// ResumePowerOff creates a new HTTPPoller from the specified resume token. 495// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 496func (client *VirtualMachineScaleSetVMSClient) ResumePowerOff(token string) (HTTPPoller, error) { 497 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.PowerOff", token, client.powerOffHandleError) 498 if err != nil { 499 return nil, err 500 } 501 return &httpPoller{ 502 pipeline: client.con.Pipeline(), 503 pt: pt, 504 }, nil 505} 506 507// 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. 508// Instead, use deallocate to release resources and avoid 509// charges. 510func (client *VirtualMachineScaleSetVMSClient) powerOff(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginPowerOffOptions) (*azcore.Response, error) { 511 req, err := client.powerOffCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 512 if err != nil { 513 return nil, err 514 } 515 resp, err := client.con.Pipeline().Do(req) 516 if err != nil { 517 return nil, err 518 } 519 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 520 return nil, client.powerOffHandleError(resp) 521 } 522 return resp, nil 523} 524 525// powerOffCreateRequest creates the PowerOff request. 526func (client *VirtualMachineScaleSetVMSClient) powerOffCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginPowerOffOptions) (*azcore.Request, error) { 527 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff" 528 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 529 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 530 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 531 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 532 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 533 if err != nil { 534 return nil, err 535 } 536 req.Telemetry(telemetryInfo) 537 query := req.URL.Query() 538 if options != nil && options.SkipShutdown != nil { 539 query.Set("skipShutdown", strconv.FormatBool(*options.SkipShutdown)) 540 } 541 query.Set("api-version", "2020-06-01") 542 req.URL.RawQuery = query.Encode() 543 return req, nil 544} 545 546// powerOffHandleError handles the PowerOff error response. 547func (client *VirtualMachineScaleSetVMSClient) powerOffHandleError(resp *azcore.Response) error { 548 body, err := ioutil.ReadAll(resp.Body) 549 if err != nil { 550 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 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// BeginRedeploy - Shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers it back on. 559func (client *VirtualMachineScaleSetVMSClient) BeginRedeploy(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginRedeployOptions) (HTTPPollerResponse, error) { 560 resp, err := client.redeploy(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 561 if err != nil { 562 return HTTPPollerResponse{}, err 563 } 564 result := HTTPPollerResponse{ 565 RawResponse: resp.Response, 566 } 567 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.Redeploy", "", resp, client.redeployHandleError) 568 if err != nil { 569 return HTTPPollerResponse{}, err 570 } 571 poller := &httpPoller{ 572 pt: pt, 573 pipeline: client.con.Pipeline(), 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// ResumeRedeploy creates a new HTTPPoller from the specified resume token. 583// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 584func (client *VirtualMachineScaleSetVMSClient) ResumeRedeploy(token string) (HTTPPoller, error) { 585 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Redeploy", token, client.redeployHandleError) 586 if err != nil { 587 return nil, err 588 } 589 return &httpPoller{ 590 pipeline: client.con.Pipeline(), 591 pt: pt, 592 }, nil 593} 594 595// Redeploy - Shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers it back on. 596func (client *VirtualMachineScaleSetVMSClient) redeploy(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginRedeployOptions) (*azcore.Response, error) { 597 req, err := client.redeployCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 598 if err != nil { 599 return nil, err 600 } 601 resp, err := client.con.Pipeline().Do(req) 602 if err != nil { 603 return nil, err 604 } 605 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 606 return nil, client.redeployHandleError(resp) 607 } 608 return resp, nil 609} 610 611// redeployCreateRequest creates the Redeploy request. 612func (client *VirtualMachineScaleSetVMSClient) redeployCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginRedeployOptions) (*azcore.Request, error) { 613 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy" 614 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 615 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 616 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 617 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 618 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 619 if err != nil { 620 return nil, err 621 } 622 req.Telemetry(telemetryInfo) 623 query := req.URL.Query() 624 query.Set("api-version", "2020-06-01") 625 req.URL.RawQuery = query.Encode() 626 return req, nil 627} 628 629// redeployHandleError handles the Redeploy error response. 630func (client *VirtualMachineScaleSetVMSClient) redeployHandleError(resp *azcore.Response) error { 631 body, err := ioutil.ReadAll(resp.Body) 632 if err != nil { 633 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 634 } 635 if len(body) == 0 { 636 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 637 } 638 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 639} 640 641// BeginReimage - Reimages (upgrade the operating system) a specific virtual machine in a VM scale set. 642func (client *VirtualMachineScaleSetVMSClient) BeginReimage(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginReimageOptions) (HTTPPollerResponse, error) { 643 resp, err := client.reimage(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 644 if err != nil { 645 return HTTPPollerResponse{}, err 646 } 647 result := HTTPPollerResponse{ 648 RawResponse: resp.Response, 649 } 650 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.Reimage", "", resp, client.reimageHandleError) 651 if err != nil { 652 return HTTPPollerResponse{}, err 653 } 654 poller := &httpPoller{ 655 pt: pt, 656 pipeline: client.con.Pipeline(), 657 } 658 result.Poller = poller 659 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 660 return poller.pollUntilDone(ctx, frequency) 661 } 662 return result, nil 663} 664 665// ResumeReimage creates a new HTTPPoller from the specified resume token. 666// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 667func (client *VirtualMachineScaleSetVMSClient) ResumeReimage(token string) (HTTPPoller, error) { 668 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Reimage", token, client.reimageHandleError) 669 if err != nil { 670 return nil, err 671 } 672 return &httpPoller{ 673 pipeline: client.con.Pipeline(), 674 pt: pt, 675 }, nil 676} 677 678// Reimage - Reimages (upgrade the operating system) a specific virtual machine in a VM scale set. 679func (client *VirtualMachineScaleSetVMSClient) reimage(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginReimageOptions) (*azcore.Response, error) { 680 req, err := client.reimageCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 681 if err != nil { 682 return nil, err 683 } 684 resp, err := client.con.Pipeline().Do(req) 685 if err != nil { 686 return nil, err 687 } 688 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 689 return nil, client.reimageHandleError(resp) 690 } 691 return resp, nil 692} 693 694// reimageCreateRequest creates the Reimage request. 695func (client *VirtualMachineScaleSetVMSClient) reimageCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginReimageOptions) (*azcore.Request, error) { 696 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage" 697 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 698 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 699 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 700 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 701 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 702 if err != nil { 703 return nil, err 704 } 705 req.Telemetry(telemetryInfo) 706 query := req.URL.Query() 707 query.Set("api-version", "2020-06-01") 708 req.URL.RawQuery = query.Encode() 709 if options != nil { 710 return req, req.MarshalAsJSON(options.VMScaleSetVMReimageInput) 711 } 712 return req, nil 713} 714 715// reimageHandleError handles the Reimage error response. 716func (client *VirtualMachineScaleSetVMSClient) reimageHandleError(resp *azcore.Response) error { 717 body, err := ioutil.ReadAll(resp.Body) 718 if err != nil { 719 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 720 } 721 if len(body) == 0 { 722 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 723 } 724 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 725} 726 727// 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 728// managed disks. 729func (client *VirtualMachineScaleSetVMSClient) BeginReimageAll(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginReimageAllOptions) (HTTPPollerResponse, error) { 730 resp, err := client.reimageAll(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 731 if err != nil { 732 return HTTPPollerResponse{}, err 733 } 734 result := HTTPPollerResponse{ 735 RawResponse: resp.Response, 736 } 737 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.ReimageAll", "", resp, client.reimageAllHandleError) 738 if err != nil { 739 return HTTPPollerResponse{}, err 740 } 741 poller := &httpPoller{ 742 pt: pt, 743 pipeline: client.con.Pipeline(), 744 } 745 result.Poller = poller 746 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 747 return poller.pollUntilDone(ctx, frequency) 748 } 749 return result, nil 750} 751 752// ResumeReimageAll creates a new HTTPPoller from the specified resume token. 753// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 754func (client *VirtualMachineScaleSetVMSClient) ResumeReimageAll(token string) (HTTPPoller, error) { 755 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.ReimageAll", token, client.reimageAllHandleError) 756 if err != nil { 757 return nil, err 758 } 759 return &httpPoller{ 760 pipeline: client.con.Pipeline(), 761 pt: pt, 762 }, nil 763} 764 765// 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 766// disks. 767func (client *VirtualMachineScaleSetVMSClient) reimageAll(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginReimageAllOptions) (*azcore.Response, error) { 768 req, err := client.reimageAllCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 769 if err != nil { 770 return nil, err 771 } 772 resp, err := client.con.Pipeline().Do(req) 773 if err != nil { 774 return nil, err 775 } 776 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 777 return nil, client.reimageAllHandleError(resp) 778 } 779 return resp, nil 780} 781 782// reimageAllCreateRequest creates the ReimageAll request. 783func (client *VirtualMachineScaleSetVMSClient) reimageAllCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginReimageAllOptions) (*azcore.Request, error) { 784 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall" 785 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 786 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 787 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 788 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 789 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 790 if err != nil { 791 return nil, err 792 } 793 req.Telemetry(telemetryInfo) 794 query := req.URL.Query() 795 query.Set("api-version", "2020-06-01") 796 req.URL.RawQuery = query.Encode() 797 return req, nil 798} 799 800// reimageAllHandleError handles the ReimageAll error response. 801func (client *VirtualMachineScaleSetVMSClient) reimageAllHandleError(resp *azcore.Response) error { 802 body, err := ioutil.ReadAll(resp.Body) 803 if err != nil { 804 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 805 } 806 if len(body) == 0 { 807 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 808 } 809 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 810} 811 812// BeginRestart - Restarts a virtual machine in a VM scale set. 813func (client *VirtualMachineScaleSetVMSClient) BeginRestart(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginRestartOptions) (HTTPPollerResponse, error) { 814 resp, err := client.restart(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 815 if err != nil { 816 return HTTPPollerResponse{}, err 817 } 818 result := HTTPPollerResponse{ 819 RawResponse: resp.Response, 820 } 821 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.Restart", "", resp, client.restartHandleError) 822 if err != nil { 823 return HTTPPollerResponse{}, err 824 } 825 poller := &httpPoller{ 826 pt: pt, 827 pipeline: client.con.Pipeline(), 828 } 829 result.Poller = poller 830 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 831 return poller.pollUntilDone(ctx, frequency) 832 } 833 return result, nil 834} 835 836// ResumeRestart creates a new HTTPPoller from the specified resume token. 837// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 838func (client *VirtualMachineScaleSetVMSClient) ResumeRestart(token string) (HTTPPoller, error) { 839 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Restart", token, client.restartHandleError) 840 if err != nil { 841 return nil, err 842 } 843 return &httpPoller{ 844 pipeline: client.con.Pipeline(), 845 pt: pt, 846 }, nil 847} 848 849// Restart - Restarts a virtual machine in a VM scale set. 850func (client *VirtualMachineScaleSetVMSClient) restart(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginRestartOptions) (*azcore.Response, error) { 851 req, err := client.restartCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 852 if err != nil { 853 return nil, err 854 } 855 resp, err := client.con.Pipeline().Do(req) 856 if err != nil { 857 return nil, err 858 } 859 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 860 return nil, client.restartHandleError(resp) 861 } 862 return resp, nil 863} 864 865// restartCreateRequest creates the Restart request. 866func (client *VirtualMachineScaleSetVMSClient) restartCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginRestartOptions) (*azcore.Request, error) { 867 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart" 868 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 869 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 870 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 871 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 872 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 873 if err != nil { 874 return nil, err 875 } 876 req.Telemetry(telemetryInfo) 877 query := req.URL.Query() 878 query.Set("api-version", "2020-06-01") 879 req.URL.RawQuery = query.Encode() 880 return req, nil 881} 882 883// restartHandleError handles the Restart error response. 884func (client *VirtualMachineScaleSetVMSClient) restartHandleError(resp *azcore.Response) error { 885 body, err := ioutil.ReadAll(resp.Body) 886 if err != nil { 887 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 888 } 889 if len(body) == 0 { 890 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 891 } 892 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 893} 894 895// RetrieveBootDiagnosticsData - The operation to retrieve SAS URIs of boot diagnostic logs for a virtual machine in a VM scale set. 896func (client *VirtualMachineScaleSetVMSClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSRetrieveBootDiagnosticsDataOptions) (RetrieveBootDiagnosticsDataResultResponse, error) { 897 req, err := client.retrieveBootDiagnosticsDataCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 898 if err != nil { 899 return RetrieveBootDiagnosticsDataResultResponse{}, err 900 } 901 resp, err := client.con.Pipeline().Do(req) 902 if err != nil { 903 return RetrieveBootDiagnosticsDataResultResponse{}, err 904 } 905 if !resp.HasStatusCode(http.StatusOK) { 906 return RetrieveBootDiagnosticsDataResultResponse{}, client.retrieveBootDiagnosticsDataHandleError(resp) 907 } 908 return client.retrieveBootDiagnosticsDataHandleResponse(resp) 909} 910 911// retrieveBootDiagnosticsDataCreateRequest creates the RetrieveBootDiagnosticsData request. 912func (client *VirtualMachineScaleSetVMSClient) retrieveBootDiagnosticsDataCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSRetrieveBootDiagnosticsDataOptions) (*azcore.Request, error) { 913 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData" 914 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 915 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 916 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 917 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 918 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 919 if err != nil { 920 return nil, err 921 } 922 req.Telemetry(telemetryInfo) 923 query := req.URL.Query() 924 if options != nil && options.SasUriExpirationTimeInMinutes != nil { 925 query.Set("sasUriExpirationTimeInMinutes", strconv.FormatInt(int64(*options.SasUriExpirationTimeInMinutes), 10)) 926 } 927 query.Set("api-version", "2020-06-01") 928 req.URL.RawQuery = query.Encode() 929 req.Header.Set("Accept", "application/json") 930 return req, nil 931} 932 933// retrieveBootDiagnosticsDataHandleResponse handles the RetrieveBootDiagnosticsData response. 934func (client *VirtualMachineScaleSetVMSClient) retrieveBootDiagnosticsDataHandleResponse(resp *azcore.Response) (RetrieveBootDiagnosticsDataResultResponse, error) { 935 var val *RetrieveBootDiagnosticsDataResult 936 if err := resp.UnmarshalAsJSON(&val); err != nil { 937 return RetrieveBootDiagnosticsDataResultResponse{}, err 938 } 939 return RetrieveBootDiagnosticsDataResultResponse{RawResponse: resp.Response, RetrieveBootDiagnosticsDataResult: val}, nil 940} 941 942// retrieveBootDiagnosticsDataHandleError handles the RetrieveBootDiagnosticsData error response. 943func (client *VirtualMachineScaleSetVMSClient) retrieveBootDiagnosticsDataHandleError(resp *azcore.Response) error { 944 var err CloudError 945 if err := resp.UnmarshalAsJSON(&err); err != nil { 946 return err 947 } 948 return azcore.NewResponseError(&err, resp.Response) 949} 950 951// BeginRunCommand - Run command on a virtual machine in a VM scale set. 952func (client *VirtualMachineScaleSetVMSClient) BeginRunCommand(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, parameters RunCommandInput, options *VirtualMachineScaleSetVMSBeginRunCommandOptions) (RunCommandResultPollerResponse, error) { 953 resp, err := client.runCommand(ctx, resourceGroupName, vmScaleSetName, instanceId, parameters, options) 954 if err != nil { 955 return RunCommandResultPollerResponse{}, err 956 } 957 result := RunCommandResultPollerResponse{ 958 RawResponse: resp.Response, 959 } 960 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.RunCommand", "location", resp, client.runCommandHandleError) 961 if err != nil { 962 return RunCommandResultPollerResponse{}, err 963 } 964 poller := &runCommandResultPoller{ 965 pt: pt, 966 pipeline: client.con.Pipeline(), 967 } 968 result.Poller = poller 969 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (RunCommandResultResponse, error) { 970 return poller.pollUntilDone(ctx, frequency) 971 } 972 return result, nil 973} 974 975// ResumeRunCommand creates a new RunCommandResultPoller from the specified resume token. 976// token - The value must come from a previous call to RunCommandResultPoller.ResumeToken(). 977func (client *VirtualMachineScaleSetVMSClient) ResumeRunCommand(token string) (RunCommandResultPoller, error) { 978 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.RunCommand", token, client.runCommandHandleError) 979 if err != nil { 980 return nil, err 981 } 982 return &runCommandResultPoller{ 983 pipeline: client.con.Pipeline(), 984 pt: pt, 985 }, nil 986} 987 988// RunCommand - Run command on a virtual machine in a VM scale set. 989func (client *VirtualMachineScaleSetVMSClient) runCommand(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, parameters RunCommandInput, options *VirtualMachineScaleSetVMSBeginRunCommandOptions) (*azcore.Response, error) { 990 req, err := client.runCommandCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, parameters, options) 991 if err != nil { 992 return nil, err 993 } 994 resp, err := client.con.Pipeline().Do(req) 995 if err != nil { 996 return nil, err 997 } 998 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 999 return nil, client.runCommandHandleError(resp) 1000 } 1001 return resp, nil 1002} 1003 1004// runCommandCreateRequest creates the RunCommand request. 1005func (client *VirtualMachineScaleSetVMSClient) runCommandCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, parameters RunCommandInput, options *VirtualMachineScaleSetVMSBeginRunCommandOptions) (*azcore.Request, error) { 1006 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand" 1007 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1008 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1009 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 1010 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1011 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1012 if err != nil { 1013 return nil, err 1014 } 1015 req.Telemetry(telemetryInfo) 1016 query := req.URL.Query() 1017 query.Set("api-version", "2020-06-01") 1018 req.URL.RawQuery = query.Encode() 1019 req.Header.Set("Accept", "application/json, text/json") 1020 return req, req.MarshalAsJSON(parameters) 1021} 1022 1023// runCommandHandleResponse handles the RunCommand response. 1024func (client *VirtualMachineScaleSetVMSClient) runCommandHandleResponse(resp *azcore.Response) (RunCommandResultResponse, error) { 1025 var val *RunCommandResult 1026 if err := resp.UnmarshalAsJSON(&val); err != nil { 1027 return RunCommandResultResponse{}, err 1028 } 1029 return RunCommandResultResponse{RawResponse: resp.Response, RunCommandResult: val}, nil 1030} 1031 1032// runCommandHandleError handles the RunCommand error response. 1033func (client *VirtualMachineScaleSetVMSClient) runCommandHandleError(resp *azcore.Response) error { 1034 body, err := ioutil.ReadAll(resp.Body) 1035 if err != nil { 1036 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1037 } 1038 if len(body) == 0 { 1039 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1040 } 1041 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1042} 1043 1044// SimulateEviction - The operation to simulate the eviction of spot virtual machine in a VM scale set. 1045func (client *VirtualMachineScaleSetVMSClient) SimulateEviction(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSSimulateEvictionOptions) (*http.Response, error) { 1046 req, err := client.simulateEvictionCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 1047 if err != nil { 1048 return nil, err 1049 } 1050 resp, err := client.con.Pipeline().Do(req) 1051 if err != nil { 1052 return nil, err 1053 } 1054 if !resp.HasStatusCode(http.StatusNoContent) { 1055 return nil, client.simulateEvictionHandleError(resp) 1056 } 1057 return resp.Response, nil 1058} 1059 1060// simulateEvictionCreateRequest creates the SimulateEviction request. 1061func (client *VirtualMachineScaleSetVMSClient) simulateEvictionCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSSimulateEvictionOptions) (*azcore.Request, error) { 1062 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction" 1063 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1064 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1065 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 1066 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1067 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1068 if err != nil { 1069 return nil, err 1070 } 1071 req.Telemetry(telemetryInfo) 1072 query := req.URL.Query() 1073 query.Set("api-version", "2020-06-01") 1074 req.URL.RawQuery = query.Encode() 1075 return req, nil 1076} 1077 1078// simulateEvictionHandleError handles the SimulateEviction error response. 1079func (client *VirtualMachineScaleSetVMSClient) simulateEvictionHandleError(resp *azcore.Response) error { 1080 body, err := ioutil.ReadAll(resp.Body) 1081 if err != nil { 1082 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1083 } 1084 if len(body) == 0 { 1085 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1086 } 1087 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1088} 1089 1090// BeginStart - Starts a virtual machine in a VM scale set. 1091func (client *VirtualMachineScaleSetVMSClient) BeginStart(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginStartOptions) (HTTPPollerResponse, error) { 1092 resp, err := client.start(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 1093 if err != nil { 1094 return HTTPPollerResponse{}, err 1095 } 1096 result := HTTPPollerResponse{ 1097 RawResponse: resp.Response, 1098 } 1099 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.Start", "", resp, client.startHandleError) 1100 if err != nil { 1101 return HTTPPollerResponse{}, err 1102 } 1103 poller := &httpPoller{ 1104 pt: pt, 1105 pipeline: client.con.Pipeline(), 1106 } 1107 result.Poller = poller 1108 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 1109 return poller.pollUntilDone(ctx, frequency) 1110 } 1111 return result, nil 1112} 1113 1114// ResumeStart creates a new HTTPPoller from the specified resume token. 1115// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 1116func (client *VirtualMachineScaleSetVMSClient) ResumeStart(token string) (HTTPPoller, error) { 1117 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Start", token, client.startHandleError) 1118 if err != nil { 1119 return nil, err 1120 } 1121 return &httpPoller{ 1122 pipeline: client.con.Pipeline(), 1123 pt: pt, 1124 }, nil 1125} 1126 1127// Start - Starts a virtual machine in a VM scale set. 1128func (client *VirtualMachineScaleSetVMSClient) start(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginStartOptions) (*azcore.Response, error) { 1129 req, err := client.startCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, options) 1130 if err != nil { 1131 return nil, err 1132 } 1133 resp, err := client.con.Pipeline().Do(req) 1134 if err != nil { 1135 return nil, err 1136 } 1137 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1138 return nil, client.startHandleError(resp) 1139 } 1140 return resp, nil 1141} 1142 1143// startCreateRequest creates the Start request. 1144func (client *VirtualMachineScaleSetVMSClient) startCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, options *VirtualMachineScaleSetVMSBeginStartOptions) (*azcore.Request, error) { 1145 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start" 1146 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1147 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1148 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 1149 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1150 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1151 if err != nil { 1152 return nil, err 1153 } 1154 req.Telemetry(telemetryInfo) 1155 query := req.URL.Query() 1156 query.Set("api-version", "2020-06-01") 1157 req.URL.RawQuery = query.Encode() 1158 return req, nil 1159} 1160 1161// startHandleError handles the Start error response. 1162func (client *VirtualMachineScaleSetVMSClient) startHandleError(resp *azcore.Response) error { 1163 body, err := ioutil.ReadAll(resp.Body) 1164 if err != nil { 1165 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1166 } 1167 if len(body) == 0 { 1168 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1169 } 1170 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1171} 1172 1173// BeginUpdate - Updates a virtual machine of a VM scale set. 1174func (client *VirtualMachineScaleSetVMSClient) BeginUpdate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, parameters VirtualMachineScaleSetVM, options *VirtualMachineScaleSetVMSBeginUpdateOptions) (VirtualMachineScaleSetVMPollerResponse, error) { 1175 resp, err := client.update(ctx, resourceGroupName, vmScaleSetName, instanceId, parameters, options) 1176 if err != nil { 1177 return VirtualMachineScaleSetVMPollerResponse{}, err 1178 } 1179 result := VirtualMachineScaleSetVMPollerResponse{ 1180 RawResponse: resp.Response, 1181 } 1182 pt, err := armcore.NewPoller("VirtualMachineScaleSetVMSClient.Update", "", resp, client.updateHandleError) 1183 if err != nil { 1184 return VirtualMachineScaleSetVMPollerResponse{}, err 1185 } 1186 poller := &virtualMachineScaleSetVMPoller{ 1187 pt: pt, 1188 pipeline: client.con.Pipeline(), 1189 } 1190 result.Poller = poller 1191 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineScaleSetVMResponse, error) { 1192 return poller.pollUntilDone(ctx, frequency) 1193 } 1194 return result, nil 1195} 1196 1197// ResumeUpdate creates a new VirtualMachineScaleSetVMPoller from the specified resume token. 1198// token - The value must come from a previous call to VirtualMachineScaleSetVMPoller.ResumeToken(). 1199func (client *VirtualMachineScaleSetVMSClient) ResumeUpdate(token string) (VirtualMachineScaleSetVMPoller, error) { 1200 pt, err := armcore.NewPollerFromResumeToken("VirtualMachineScaleSetVMSClient.Update", token, client.updateHandleError) 1201 if err != nil { 1202 return nil, err 1203 } 1204 return &virtualMachineScaleSetVMPoller{ 1205 pipeline: client.con.Pipeline(), 1206 pt: pt, 1207 }, nil 1208} 1209 1210// Update - Updates a virtual machine of a VM scale set. 1211func (client *VirtualMachineScaleSetVMSClient) update(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, parameters VirtualMachineScaleSetVM, options *VirtualMachineScaleSetVMSBeginUpdateOptions) (*azcore.Response, error) { 1212 req, err := client.updateCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceId, parameters, options) 1213 if err != nil { 1214 return nil, err 1215 } 1216 resp, err := client.con.Pipeline().Do(req) 1217 if err != nil { 1218 return nil, err 1219 } 1220 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 1221 return nil, client.updateHandleError(resp) 1222 } 1223 return resp, nil 1224} 1225 1226// updateCreateRequest creates the Update request. 1227func (client *VirtualMachineScaleSetVMSClient) updateCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceId string, parameters VirtualMachineScaleSetVM, options *VirtualMachineScaleSetVMSBeginUpdateOptions) (*azcore.Request, error) { 1228 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}" 1229 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 1230 urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName)) 1231 urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceId)) 1232 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 1233 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 1234 if err != nil { 1235 return nil, err 1236 } 1237 req.Telemetry(telemetryInfo) 1238 query := req.URL.Query() 1239 query.Set("api-version", "2020-06-01") 1240 req.URL.RawQuery = query.Encode() 1241 req.Header.Set("Accept", "application/json") 1242 return req, req.MarshalAsJSON(parameters) 1243} 1244 1245// updateHandleResponse handles the Update response. 1246func (client *VirtualMachineScaleSetVMSClient) updateHandleResponse(resp *azcore.Response) (VirtualMachineScaleSetVMResponse, error) { 1247 var val *VirtualMachineScaleSetVM 1248 if err := resp.UnmarshalAsJSON(&val); err != nil { 1249 return VirtualMachineScaleSetVMResponse{}, err 1250 } 1251 return VirtualMachineScaleSetVMResponse{RawResponse: resp.Response, VirtualMachineScaleSetVM: val}, nil 1252} 1253 1254// updateHandleError handles the Update error response. 1255func (client *VirtualMachineScaleSetVMSClient) updateHandleError(resp *azcore.Response) error { 1256 body, err := ioutil.ReadAll(resp.Body) 1257 if err != nil { 1258 return fmt.Errorf("%s; failed to read response body: %w", resp.Status, err) 1259 } 1260 if len(body) == 0 { 1261 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 1262 } 1263 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 1264} 1265