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