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	"strings"
19	"time"
20)
21
22// VirtualMachineScaleSetVMRunCommandsClient contains the methods for the VirtualMachineScaleSetVMRunCommands group.
23// Don't use this type directly, use NewVirtualMachineScaleSetVMRunCommandsClient() instead.
24type VirtualMachineScaleSetVMRunCommandsClient struct {
25	con            *armcore.Connection
26	subscriptionID string
27}
28
29// NewVirtualMachineScaleSetVMRunCommandsClient creates a new instance of VirtualMachineScaleSetVMRunCommandsClient with the specified values.
30func NewVirtualMachineScaleSetVMRunCommandsClient(con *armcore.Connection, subscriptionID string) *VirtualMachineScaleSetVMRunCommandsClient {
31	return &VirtualMachineScaleSetVMRunCommandsClient{con: con, subscriptionID: subscriptionID}
32}
33
34// BeginCreateOrUpdate - The operation to create or update the VMSS VM run command.
35// If the operation fails it returns the *CloudError error type.
36func (client *VirtualMachineScaleSetVMRunCommandsClient) BeginCreateOrUpdate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand, options *VirtualMachineScaleSetVMRunCommandsBeginCreateOrUpdateOptions) (VirtualMachineRunCommandPollerResponse, error) {
37	resp, err := client.createOrUpdate(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, runCommand, options)
38	if err != nil {
39		return VirtualMachineRunCommandPollerResponse{}, err
40	}
41	result := VirtualMachineRunCommandPollerResponse{
42		RawResponse: resp.Response,
43	}
44	pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMRunCommandsClient.CreateOrUpdate", "", resp, client.con.Pipeline(), client.createOrUpdateHandleError)
45	if err != nil {
46		return VirtualMachineRunCommandPollerResponse{}, err
47	}
48	poller := &virtualMachineRunCommandPoller{
49		pt: pt,
50	}
51	result.Poller = poller
52	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineRunCommandResponse, error) {
53		return poller.pollUntilDone(ctx, frequency)
54	}
55	return result, nil
56}
57
58// ResumeCreateOrUpdate creates a new VirtualMachineRunCommandPoller from the specified resume token.
59// token - The value must come from a previous call to VirtualMachineRunCommandPoller.ResumeToken().
60func (client *VirtualMachineScaleSetVMRunCommandsClient) ResumeCreateOrUpdate(ctx context.Context, token string) (VirtualMachineRunCommandPollerResponse, error) {
61	pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMRunCommandsClient.CreateOrUpdate", token, client.con.Pipeline(), client.createOrUpdateHandleError)
62	if err != nil {
63		return VirtualMachineRunCommandPollerResponse{}, err
64	}
65	poller := &virtualMachineRunCommandPoller{
66		pt: pt,
67	}
68	resp, err := poller.Poll(ctx)
69	if err != nil {
70		return VirtualMachineRunCommandPollerResponse{}, err
71	}
72	result := VirtualMachineRunCommandPollerResponse{
73		RawResponse: resp,
74	}
75	result.Poller = poller
76	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineRunCommandResponse, error) {
77		return poller.pollUntilDone(ctx, frequency)
78	}
79	return result, nil
80}
81
82// CreateOrUpdate - The operation to create or update the VMSS VM run command.
83// If the operation fails it returns the *CloudError error type.
84func (client *VirtualMachineScaleSetVMRunCommandsClient) createOrUpdate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand, options *VirtualMachineScaleSetVMRunCommandsBeginCreateOrUpdateOptions) (*azcore.Response, error) {
85	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, runCommand, options)
86	if err != nil {
87		return nil, err
88	}
89	resp, err := client.con.Pipeline().Do(req)
90	if err != nil {
91		return nil, err
92	}
93	if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) {
94		return nil, client.createOrUpdateHandleError(resp)
95	}
96	return resp, nil
97}
98
99// createOrUpdateCreateRequest creates the CreateOrUpdate request.
100func (client *VirtualMachineScaleSetVMRunCommandsClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand, options *VirtualMachineScaleSetVMRunCommandsBeginCreateOrUpdateOptions) (*azcore.Request, error) {
101	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}"
102	if resourceGroupName == "" {
103		return nil, errors.New("parameter resourceGroupName cannot be empty")
104	}
105	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
106	if vmScaleSetName == "" {
107		return nil, errors.New("parameter vmScaleSetName cannot be empty")
108	}
109	urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName))
110	if instanceID == "" {
111		return nil, errors.New("parameter instanceID cannot be empty")
112	}
113	urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID))
114	if runCommandName == "" {
115		return nil, errors.New("parameter runCommandName cannot be empty")
116	}
117	urlPath = strings.ReplaceAll(urlPath, "{runCommandName}", url.PathEscape(runCommandName))
118	if client.subscriptionID == "" {
119		return nil, errors.New("parameter client.subscriptionID cannot be empty")
120	}
121	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
122	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
123	if err != nil {
124		return nil, err
125	}
126	req.Telemetry(telemetryInfo)
127	reqQP := req.URL.Query()
128	reqQP.Set("api-version", "2021-03-01")
129	req.URL.RawQuery = reqQP.Encode()
130	req.Header.Set("Accept", "application/json, text/json")
131	return req, req.MarshalAsJSON(runCommand)
132}
133
134// createOrUpdateHandleError handles the CreateOrUpdate error response.
135func (client *VirtualMachineScaleSetVMRunCommandsClient) createOrUpdateHandleError(resp *azcore.Response) error {
136	body, err := resp.Payload()
137	if err != nil {
138		return azcore.NewResponseError(err, resp.Response)
139	}
140	errType := CloudError{raw: string(body)}
141	if err := resp.UnmarshalAsJSON(&errType); err != nil {
142		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
143	}
144	return azcore.NewResponseError(&errType, resp.Response)
145}
146
147// BeginDelete - The operation to delete the VMSS VM run command.
148// If the operation fails it returns the *CloudError error type.
149func (client *VirtualMachineScaleSetVMRunCommandsClient) BeginDelete(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, options *VirtualMachineScaleSetVMRunCommandsBeginDeleteOptions) (HTTPPollerResponse, error) {
150	resp, err := client.deleteOperation(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, options)
151	if err != nil {
152		return HTTPPollerResponse{}, err
153	}
154	result := HTTPPollerResponse{
155		RawResponse: resp.Response,
156	}
157	pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMRunCommandsClient.Delete", "", resp, client.con.Pipeline(), client.deleteHandleError)
158	if err != nil {
159		return HTTPPollerResponse{}, err
160	}
161	poller := &httpPoller{
162		pt: pt,
163	}
164	result.Poller = poller
165	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
166		return poller.pollUntilDone(ctx, frequency)
167	}
168	return result, nil
169}
170
171// ResumeDelete creates a new HTTPPoller from the specified resume token.
172// token - The value must come from a previous call to HTTPPoller.ResumeToken().
173func (client *VirtualMachineScaleSetVMRunCommandsClient) ResumeDelete(ctx context.Context, token string) (HTTPPollerResponse, error) {
174	pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMRunCommandsClient.Delete", token, client.con.Pipeline(), client.deleteHandleError)
175	if err != nil {
176		return HTTPPollerResponse{}, err
177	}
178	poller := &httpPoller{
179		pt: pt,
180	}
181	resp, err := poller.Poll(ctx)
182	if err != nil {
183		return HTTPPollerResponse{}, err
184	}
185	result := HTTPPollerResponse{
186		RawResponse: resp,
187	}
188	result.Poller = poller
189	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
190		return poller.pollUntilDone(ctx, frequency)
191	}
192	return result, nil
193}
194
195// Delete - The operation to delete the VMSS VM run command.
196// If the operation fails it returns the *CloudError error type.
197func (client *VirtualMachineScaleSetVMRunCommandsClient) deleteOperation(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, options *VirtualMachineScaleSetVMRunCommandsBeginDeleteOptions) (*azcore.Response, error) {
198	req, err := client.deleteCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, options)
199	if err != nil {
200		return nil, err
201	}
202	resp, err := client.con.Pipeline().Do(req)
203	if err != nil {
204		return nil, err
205	}
206	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) {
207		return nil, client.deleteHandleError(resp)
208	}
209	return resp, nil
210}
211
212// deleteCreateRequest creates the Delete request.
213func (client *VirtualMachineScaleSetVMRunCommandsClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, options *VirtualMachineScaleSetVMRunCommandsBeginDeleteOptions) (*azcore.Request, error) {
214	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}"
215	if resourceGroupName == "" {
216		return nil, errors.New("parameter resourceGroupName cannot be empty")
217	}
218	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
219	if vmScaleSetName == "" {
220		return nil, errors.New("parameter vmScaleSetName cannot be empty")
221	}
222	urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName))
223	if instanceID == "" {
224		return nil, errors.New("parameter instanceID cannot be empty")
225	}
226	urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID))
227	if runCommandName == "" {
228		return nil, errors.New("parameter runCommandName cannot be empty")
229	}
230	urlPath = strings.ReplaceAll(urlPath, "{runCommandName}", url.PathEscape(runCommandName))
231	if client.subscriptionID == "" {
232		return nil, errors.New("parameter client.subscriptionID cannot be empty")
233	}
234	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
235	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
236	if err != nil {
237		return nil, err
238	}
239	req.Telemetry(telemetryInfo)
240	reqQP := req.URL.Query()
241	reqQP.Set("api-version", "2021-03-01")
242	req.URL.RawQuery = reqQP.Encode()
243	req.Header.Set("Accept", "application/json, text/json")
244	return req, nil
245}
246
247// deleteHandleError handles the Delete error response.
248func (client *VirtualMachineScaleSetVMRunCommandsClient) deleteHandleError(resp *azcore.Response) error {
249	body, err := resp.Payload()
250	if err != nil {
251		return azcore.NewResponseError(err, resp.Response)
252	}
253	errType := CloudError{raw: string(body)}
254	if err := resp.UnmarshalAsJSON(&errType); err != nil {
255		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
256	}
257	return azcore.NewResponseError(&errType, resp.Response)
258}
259
260// Get - The operation to get the VMSS VM run command.
261// If the operation fails it returns the *CloudError error type.
262func (client *VirtualMachineScaleSetVMRunCommandsClient) Get(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, options *VirtualMachineScaleSetVMRunCommandsGetOptions) (VirtualMachineRunCommandResponse, error) {
263	req, err := client.getCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, options)
264	if err != nil {
265		return VirtualMachineRunCommandResponse{}, err
266	}
267	resp, err := client.con.Pipeline().Do(req)
268	if err != nil {
269		return VirtualMachineRunCommandResponse{}, err
270	}
271	if !resp.HasStatusCode(http.StatusOK) {
272		return VirtualMachineRunCommandResponse{}, client.getHandleError(resp)
273	}
274	return client.getHandleResponse(resp)
275}
276
277// getCreateRequest creates the Get request.
278func (client *VirtualMachineScaleSetVMRunCommandsClient) getCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, options *VirtualMachineScaleSetVMRunCommandsGetOptions) (*azcore.Request, error) {
279	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}"
280	if resourceGroupName == "" {
281		return nil, errors.New("parameter resourceGroupName cannot be empty")
282	}
283	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
284	if vmScaleSetName == "" {
285		return nil, errors.New("parameter vmScaleSetName cannot be empty")
286	}
287	urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName))
288	if instanceID == "" {
289		return nil, errors.New("parameter instanceID cannot be empty")
290	}
291	urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID))
292	if runCommandName == "" {
293		return nil, errors.New("parameter runCommandName cannot be empty")
294	}
295	urlPath = strings.ReplaceAll(urlPath, "{runCommandName}", url.PathEscape(runCommandName))
296	if client.subscriptionID == "" {
297		return nil, errors.New("parameter client.subscriptionID cannot be empty")
298	}
299	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
300	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
301	if err != nil {
302		return nil, err
303	}
304	req.Telemetry(telemetryInfo)
305	reqQP := req.URL.Query()
306	if options != nil && options.Expand != nil {
307		reqQP.Set("$expand", *options.Expand)
308	}
309	reqQP.Set("api-version", "2021-03-01")
310	req.URL.RawQuery = reqQP.Encode()
311	req.Header.Set("Accept", "application/json, text/json")
312	return req, nil
313}
314
315// getHandleResponse handles the Get response.
316func (client *VirtualMachineScaleSetVMRunCommandsClient) getHandleResponse(resp *azcore.Response) (VirtualMachineRunCommandResponse, error) {
317	var val *VirtualMachineRunCommand
318	if err := resp.UnmarshalAsJSON(&val); err != nil {
319		return VirtualMachineRunCommandResponse{}, err
320	}
321	return VirtualMachineRunCommandResponse{RawResponse: resp.Response, VirtualMachineRunCommand: val}, nil
322}
323
324// getHandleError handles the Get error response.
325func (client *VirtualMachineScaleSetVMRunCommandsClient) getHandleError(resp *azcore.Response) error {
326	body, err := resp.Payload()
327	if err != nil {
328		return azcore.NewResponseError(err, resp.Response)
329	}
330	errType := CloudError{raw: string(body)}
331	if err := resp.UnmarshalAsJSON(&errType); err != nil {
332		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
333	}
334	return azcore.NewResponseError(&errType, resp.Response)
335}
336
337// List - The operation to get all run commands of an instance in Virtual Machine Scaleset.
338// If the operation fails it returns the *CloudError error type.
339func (client *VirtualMachineScaleSetVMRunCommandsClient) List(resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMRunCommandsListOptions) VirtualMachineRunCommandsListResultPager {
340	return &virtualMachineRunCommandsListResultPager{
341		pipeline: client.con.Pipeline(),
342		requester: func(ctx context.Context) (*azcore.Request, error) {
343			return client.listCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, options)
344		},
345		responder: client.listHandleResponse,
346		errorer:   client.listHandleError,
347		advancer: func(ctx context.Context, resp VirtualMachineRunCommandsListResultResponse) (*azcore.Request, error) {
348			return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualMachineRunCommandsListResult.NextLink)
349		},
350		statusCodes: []int{http.StatusOK},
351	}
352}
353
354// listCreateRequest creates the List request.
355func (client *VirtualMachineScaleSetVMRunCommandsClient) listCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, options *VirtualMachineScaleSetVMRunCommandsListOptions) (*azcore.Request, error) {
356	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands"
357	if resourceGroupName == "" {
358		return nil, errors.New("parameter resourceGroupName cannot be empty")
359	}
360	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
361	if vmScaleSetName == "" {
362		return nil, errors.New("parameter vmScaleSetName cannot be empty")
363	}
364	urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName))
365	if instanceID == "" {
366		return nil, errors.New("parameter instanceID cannot be empty")
367	}
368	urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID))
369	if client.subscriptionID == "" {
370		return nil, errors.New("parameter client.subscriptionID cannot be empty")
371	}
372	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
373	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
374	if err != nil {
375		return nil, err
376	}
377	req.Telemetry(telemetryInfo)
378	reqQP := req.URL.Query()
379	if options != nil && options.Expand != nil {
380		reqQP.Set("$expand", *options.Expand)
381	}
382	reqQP.Set("api-version", "2021-03-01")
383	req.URL.RawQuery = reqQP.Encode()
384	req.Header.Set("Accept", "application/json, text/json")
385	return req, nil
386}
387
388// listHandleResponse handles the List response.
389func (client *VirtualMachineScaleSetVMRunCommandsClient) listHandleResponse(resp *azcore.Response) (VirtualMachineRunCommandsListResultResponse, error) {
390	var val *VirtualMachineRunCommandsListResult
391	if err := resp.UnmarshalAsJSON(&val); err != nil {
392		return VirtualMachineRunCommandsListResultResponse{}, err
393	}
394	return VirtualMachineRunCommandsListResultResponse{RawResponse: resp.Response, VirtualMachineRunCommandsListResult: val}, nil
395}
396
397// listHandleError handles the List error response.
398func (client *VirtualMachineScaleSetVMRunCommandsClient) listHandleError(resp *azcore.Response) error {
399	body, err := resp.Payload()
400	if err != nil {
401		return azcore.NewResponseError(err, resp.Response)
402	}
403	errType := CloudError{raw: string(body)}
404	if err := resp.UnmarshalAsJSON(&errType); err != nil {
405		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
406	}
407	return azcore.NewResponseError(&errType, resp.Response)
408}
409
410// BeginUpdate - The operation to update the VMSS VM run command.
411// If the operation fails it returns the *CloudError error type.
412func (client *VirtualMachineScaleSetVMRunCommandsClient) BeginUpdate(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate, options *VirtualMachineScaleSetVMRunCommandsBeginUpdateOptions) (VirtualMachineRunCommandPollerResponse, error) {
413	resp, err := client.update(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, runCommand, options)
414	if err != nil {
415		return VirtualMachineRunCommandPollerResponse{}, err
416	}
417	result := VirtualMachineRunCommandPollerResponse{
418		RawResponse: resp.Response,
419	}
420	pt, err := armcore.NewLROPoller("VirtualMachineScaleSetVMRunCommandsClient.Update", "", resp, client.con.Pipeline(), client.updateHandleError)
421	if err != nil {
422		return VirtualMachineRunCommandPollerResponse{}, err
423	}
424	poller := &virtualMachineRunCommandPoller{
425		pt: pt,
426	}
427	result.Poller = poller
428	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineRunCommandResponse, error) {
429		return poller.pollUntilDone(ctx, frequency)
430	}
431	return result, nil
432}
433
434// ResumeUpdate creates a new VirtualMachineRunCommandPoller from the specified resume token.
435// token - The value must come from a previous call to VirtualMachineRunCommandPoller.ResumeToken().
436func (client *VirtualMachineScaleSetVMRunCommandsClient) ResumeUpdate(ctx context.Context, token string) (VirtualMachineRunCommandPollerResponse, error) {
437	pt, err := armcore.NewLROPollerFromResumeToken("VirtualMachineScaleSetVMRunCommandsClient.Update", token, client.con.Pipeline(), client.updateHandleError)
438	if err != nil {
439		return VirtualMachineRunCommandPollerResponse{}, err
440	}
441	poller := &virtualMachineRunCommandPoller{
442		pt: pt,
443	}
444	resp, err := poller.Poll(ctx)
445	if err != nil {
446		return VirtualMachineRunCommandPollerResponse{}, err
447	}
448	result := VirtualMachineRunCommandPollerResponse{
449		RawResponse: resp,
450	}
451	result.Poller = poller
452	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualMachineRunCommandResponse, error) {
453		return poller.pollUntilDone(ctx, frequency)
454	}
455	return result, nil
456}
457
458// Update - The operation to update the VMSS VM run command.
459// If the operation fails it returns the *CloudError error type.
460func (client *VirtualMachineScaleSetVMRunCommandsClient) update(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate, options *VirtualMachineScaleSetVMRunCommandsBeginUpdateOptions) (*azcore.Response, error) {
461	req, err := client.updateCreateRequest(ctx, resourceGroupName, vmScaleSetName, instanceID, runCommandName, runCommand, options)
462	if err != nil {
463		return nil, err
464	}
465	resp, err := client.con.Pipeline().Do(req)
466	if err != nil {
467		return nil, err
468	}
469	if !resp.HasStatusCode(http.StatusOK) {
470		return nil, client.updateHandleError(resp)
471	}
472	return resp, nil
473}
474
475// updateCreateRequest creates the Update request.
476func (client *VirtualMachineScaleSetVMRunCommandsClient) updateCreateRequest(ctx context.Context, resourceGroupName string, vmScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate, options *VirtualMachineScaleSetVMRunCommandsBeginUpdateOptions) (*azcore.Request, error) {
477	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}"
478	if resourceGroupName == "" {
479		return nil, errors.New("parameter resourceGroupName cannot be empty")
480	}
481	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
482	if vmScaleSetName == "" {
483		return nil, errors.New("parameter vmScaleSetName cannot be empty")
484	}
485	urlPath = strings.ReplaceAll(urlPath, "{vmScaleSetName}", url.PathEscape(vmScaleSetName))
486	if instanceID == "" {
487		return nil, errors.New("parameter instanceID cannot be empty")
488	}
489	urlPath = strings.ReplaceAll(urlPath, "{instanceId}", url.PathEscape(instanceID))
490	if runCommandName == "" {
491		return nil, errors.New("parameter runCommandName cannot be empty")
492	}
493	urlPath = strings.ReplaceAll(urlPath, "{runCommandName}", url.PathEscape(runCommandName))
494	if client.subscriptionID == "" {
495		return nil, errors.New("parameter client.subscriptionID cannot be empty")
496	}
497	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
498	req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath))
499	if err != nil {
500		return nil, err
501	}
502	req.Telemetry(telemetryInfo)
503	reqQP := req.URL.Query()
504	reqQP.Set("api-version", "2021-03-01")
505	req.URL.RawQuery = reqQP.Encode()
506	req.Header.Set("Accept", "application/json, text/json")
507	return req, req.MarshalAsJSON(runCommand)
508}
509
510// updateHandleError handles the Update error response.
511func (client *VirtualMachineScaleSetVMRunCommandsClient) updateHandleError(resp *azcore.Response) error {
512	body, err := resp.Payload()
513	if err != nil {
514		return azcore.NewResponseError(err, resp.Response)
515	}
516	errType := CloudError{raw: string(body)}
517	if err := resp.UnmarshalAsJSON(&errType); err != nil {
518		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
519	}
520	return azcore.NewResponseError(&errType, resp.Response)
521}
522