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