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