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