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