1package compute
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//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/tracing"
14	"net/http"
15)
16
17// VirtualMachineScaleSetExtensionsClient is the compute Client
18type VirtualMachineScaleSetExtensionsClient struct {
19	BaseClient
20}
21
22// NewVirtualMachineScaleSetExtensionsClient creates an instance of the VirtualMachineScaleSetExtensionsClient client.
23func NewVirtualMachineScaleSetExtensionsClient(subscriptionID string) VirtualMachineScaleSetExtensionsClient {
24	return NewVirtualMachineScaleSetExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID)
25}
26
27// NewVirtualMachineScaleSetExtensionsClientWithBaseURI creates an instance of the
28// VirtualMachineScaleSetExtensionsClient client using a custom endpoint.  Use this when interacting with an Azure
29// cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewVirtualMachineScaleSetExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetExtensionsClient {
31	return VirtualMachineScaleSetExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// CreateOrUpdate the operation to create or update an extension.
35// Parameters:
36// resourceGroupName - the name of the resource group.
37// VMScaleSetName - the name of the VM scale set where the extension should be create or updated.
38// vmssExtensionName - the name of the VM scale set extension.
39// extensionParameters - parameters supplied to the Create VM scale set Extension operation.
40func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtension) (result VirtualMachineScaleSetExtensionsCreateOrUpdateFuture, err error) {
41	if tracing.IsEnabled() {
42		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.CreateOrUpdate")
43		defer func() {
44			sc := -1
45			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
46				sc = result.FutureAPI.Response().StatusCode
47			}
48			tracing.EndSpan(ctx, sc, err)
49		}()
50	}
51	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, extensionParameters)
52	if err != nil {
53		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request")
54		return
55	}
56
57	result, err = client.CreateOrUpdateSender(req)
58	if err != nil {
59		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", nil, "Failure sending request")
60		return
61	}
62
63	return
64}
65
66// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
67func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtension) (*http.Request, error) {
68	pathParameters := map[string]interface{}{
69		"resourceGroupName": autorest.Encode("path", resourceGroupName),
70		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
71		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
72		"vmssExtensionName": autorest.Encode("path", vmssExtensionName),
73	}
74
75	const APIVersion = "2021-07-01"
76	queryParameters := map[string]interface{}{
77		"api-version": APIVersion,
78	}
79
80	extensionParameters.Type = nil
81	preparer := autorest.CreatePreparer(
82		autorest.AsContentType("application/json; charset=utf-8"),
83		autorest.AsPut(),
84		autorest.WithBaseURL(client.BaseURI),
85		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters),
86		autorest.WithJSON(extensionParameters),
87		autorest.WithQueryParameters(queryParameters))
88	return preparer.Prepare((&http.Request{}).WithContext(ctx))
89}
90
91// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
92// http.Response Body if it receives an error.
93func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetExtensionsCreateOrUpdateFuture, err error) {
94	var resp *http.Response
95	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
96	if err != nil {
97		return
98	}
99	var azf azure.Future
100	azf, err = azure.NewFutureFromResponse(resp)
101	future.FutureAPI = &azf
102	future.Result = future.result
103	return
104}
105
106// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
107// closes the http.Response Body.
108func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) {
109	err = autorest.Respond(
110		resp,
111		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
112		autorest.ByUnmarshallingJSON(&result),
113		autorest.ByClosing())
114	result.Response = autorest.Response{Response: resp}
115	return
116}
117
118// Delete the operation to delete the extension.
119// Parameters:
120// resourceGroupName - the name of the resource group.
121// VMScaleSetName - the name of the VM scale set where the extension should be deleted.
122// vmssExtensionName - the name of the VM scale set extension.
123func (client VirtualMachineScaleSetExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string) (result VirtualMachineScaleSetExtensionsDeleteFuture, err error) {
124	if tracing.IsEnabled() {
125		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Delete")
126		defer func() {
127			sc := -1
128			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
129				sc = result.FutureAPI.Response().StatusCode
130			}
131			tracing.EndSpan(ctx, sc, err)
132		}()
133	}
134	req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName)
135	if err != nil {
136		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Delete", nil, "Failure preparing request")
137		return
138	}
139
140	result, err = client.DeleteSender(req)
141	if err != nil {
142		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Delete", nil, "Failure sending request")
143		return
144	}
145
146	return
147}
148
149// DeletePreparer prepares the Delete request.
150func (client VirtualMachineScaleSetExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string) (*http.Request, error) {
151	pathParameters := map[string]interface{}{
152		"resourceGroupName": autorest.Encode("path", resourceGroupName),
153		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
154		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
155		"vmssExtensionName": autorest.Encode("path", vmssExtensionName),
156	}
157
158	const APIVersion = "2021-07-01"
159	queryParameters := map[string]interface{}{
160		"api-version": APIVersion,
161	}
162
163	preparer := autorest.CreatePreparer(
164		autorest.AsDelete(),
165		autorest.WithBaseURL(client.BaseURI),
166		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters),
167		autorest.WithQueryParameters(queryParameters))
168	return preparer.Prepare((&http.Request{}).WithContext(ctx))
169}
170
171// DeleteSender sends the Delete request. The method will close the
172// http.Response Body if it receives an error.
173func (client VirtualMachineScaleSetExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetExtensionsDeleteFuture, err error) {
174	var resp *http.Response
175	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
176	if err != nil {
177		return
178	}
179	var azf azure.Future
180	azf, err = azure.NewFutureFromResponse(resp)
181	future.FutureAPI = &azf
182	future.Result = future.result
183	return
184}
185
186// DeleteResponder handles the response to the Delete request. The method always
187// closes the http.Response Body.
188func (client VirtualMachineScaleSetExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
189	err = autorest.Respond(
190		resp,
191		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
192		autorest.ByClosing())
193	result.Response = resp
194	return
195}
196
197// Get the operation to get the extension.
198// Parameters:
199// resourceGroupName - the name of the resource group.
200// VMScaleSetName - the name of the VM scale set containing the extension.
201// vmssExtensionName - the name of the VM scale set extension.
202// expand - the expand expression to apply on the operation.
203func (client VirtualMachineScaleSetExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, expand string) (result VirtualMachineScaleSetExtension, err error) {
204	if tracing.IsEnabled() {
205		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Get")
206		defer func() {
207			sc := -1
208			if result.Response.Response != nil {
209				sc = result.Response.Response.StatusCode
210			}
211			tracing.EndSpan(ctx, sc, err)
212		}()
213	}
214	req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, expand)
215	if err != nil {
216		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", nil, "Failure preparing request")
217		return
218	}
219
220	resp, err := client.GetSender(req)
221	if err != nil {
222		result.Response = autorest.Response{Response: resp}
223		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", resp, "Failure sending request")
224		return
225	}
226
227	result, err = client.GetResponder(resp)
228	if err != nil {
229		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", resp, "Failure responding to request")
230		return
231	}
232
233	return
234}
235
236// GetPreparer prepares the Get request.
237func (client VirtualMachineScaleSetExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, expand string) (*http.Request, error) {
238	pathParameters := map[string]interface{}{
239		"resourceGroupName": autorest.Encode("path", resourceGroupName),
240		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
241		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
242		"vmssExtensionName": autorest.Encode("path", vmssExtensionName),
243	}
244
245	const APIVersion = "2021-07-01"
246	queryParameters := map[string]interface{}{
247		"api-version": APIVersion,
248	}
249	if len(expand) > 0 {
250		queryParameters["$expand"] = autorest.Encode("query", expand)
251	}
252
253	preparer := autorest.CreatePreparer(
254		autorest.AsGet(),
255		autorest.WithBaseURL(client.BaseURI),
256		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters),
257		autorest.WithQueryParameters(queryParameters))
258	return preparer.Prepare((&http.Request{}).WithContext(ctx))
259}
260
261// GetSender sends the Get request. The method will close the
262// http.Response Body if it receives an error.
263func (client VirtualMachineScaleSetExtensionsClient) GetSender(req *http.Request) (*http.Response, error) {
264	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
265}
266
267// GetResponder handles the response to the Get request. The method always
268// closes the http.Response Body.
269func (client VirtualMachineScaleSetExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) {
270	err = autorest.Respond(
271		resp,
272		azure.WithErrorUnlessStatusCode(http.StatusOK),
273		autorest.ByUnmarshallingJSON(&result),
274		autorest.ByClosing())
275	result.Response = autorest.Response{Response: resp}
276	return
277}
278
279// List gets a list of all extensions in a VM scale set.
280// Parameters:
281// resourceGroupName - the name of the resource group.
282// VMScaleSetName - the name of the VM scale set containing the extension.
283func (client VirtualMachineScaleSetExtensionsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetExtensionListResultPage, err error) {
284	if tracing.IsEnabled() {
285		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.List")
286		defer func() {
287			sc := -1
288			if result.vmsselr.Response.Response != nil {
289				sc = result.vmsselr.Response.Response.StatusCode
290			}
291			tracing.EndSpan(ctx, sc, err)
292		}()
293	}
294	result.fn = client.listNextResults
295	req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName)
296	if err != nil {
297		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", nil, "Failure preparing request")
298		return
299	}
300
301	resp, err := client.ListSender(req)
302	if err != nil {
303		result.vmsselr.Response = autorest.Response{Response: resp}
304		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", resp, "Failure sending request")
305		return
306	}
307
308	result.vmsselr, err = client.ListResponder(resp)
309	if err != nil {
310		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", resp, "Failure responding to request")
311		return
312	}
313	if result.vmsselr.hasNextLink() && result.vmsselr.IsEmpty() {
314		err = result.NextWithContext(ctx)
315		return
316	}
317
318	return
319}
320
321// ListPreparer prepares the List request.
322func (client VirtualMachineScaleSetExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) {
323	pathParameters := map[string]interface{}{
324		"resourceGroupName": autorest.Encode("path", resourceGroupName),
325		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
326		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
327	}
328
329	const APIVersion = "2021-07-01"
330	queryParameters := map[string]interface{}{
331		"api-version": APIVersion,
332	}
333
334	preparer := autorest.CreatePreparer(
335		autorest.AsGet(),
336		autorest.WithBaseURL(client.BaseURI),
337		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", pathParameters),
338		autorest.WithQueryParameters(queryParameters))
339	return preparer.Prepare((&http.Request{}).WithContext(ctx))
340}
341
342// ListSender sends the List request. The method will close the
343// http.Response Body if it receives an error.
344func (client VirtualMachineScaleSetExtensionsClient) ListSender(req *http.Request) (*http.Response, error) {
345	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
346}
347
348// ListResponder handles the response to the List request. The method always
349// closes the http.Response Body.
350func (client VirtualMachineScaleSetExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetExtensionListResult, err error) {
351	err = autorest.Respond(
352		resp,
353		azure.WithErrorUnlessStatusCode(http.StatusOK),
354		autorest.ByUnmarshallingJSON(&result),
355		autorest.ByClosing())
356	result.Response = autorest.Response{Response: resp}
357	return
358}
359
360// listNextResults retrieves the next set of results, if any.
361func (client VirtualMachineScaleSetExtensionsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetExtensionListResult) (result VirtualMachineScaleSetExtensionListResult, err error) {
362	req, err := lastResults.virtualMachineScaleSetExtensionListResultPreparer(ctx)
363	if err != nil {
364		return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", nil, "Failure preparing next results request")
365	}
366	if req == nil {
367		return
368	}
369	resp, err := client.ListSender(req)
370	if err != nil {
371		result.Response = autorest.Response{Response: resp}
372		return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", resp, "Failure sending next results request")
373	}
374	result, err = client.ListResponder(resp)
375	if err != nil {
376		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", resp, "Failure responding to next results request")
377	}
378	return
379}
380
381// ListComplete enumerates all values, automatically crossing page boundaries as required.
382func (client VirtualMachineScaleSetExtensionsClient) ListComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetExtensionListResultIterator, err error) {
383	if tracing.IsEnabled() {
384		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.List")
385		defer func() {
386			sc := -1
387			if result.Response().Response.Response != nil {
388				sc = result.page.Response().Response.Response.StatusCode
389			}
390			tracing.EndSpan(ctx, sc, err)
391		}()
392	}
393	result.page, err = client.List(ctx, resourceGroupName, VMScaleSetName)
394	return
395}
396
397// Update the operation to update an extension.
398// Parameters:
399// resourceGroupName - the name of the resource group.
400// VMScaleSetName - the name of the VM scale set where the extension should be updated.
401// vmssExtensionName - the name of the VM scale set extension.
402// extensionParameters - parameters supplied to the Update VM scale set Extension operation.
403func (client VirtualMachineScaleSetExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtensionUpdate) (result VirtualMachineScaleSetExtensionsUpdateFuture, err error) {
404	if tracing.IsEnabled() {
405		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Update")
406		defer func() {
407			sc := -1
408			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
409				sc = result.FutureAPI.Response().StatusCode
410			}
411			tracing.EndSpan(ctx, sc, err)
412		}()
413	}
414	req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, extensionParameters)
415	if err != nil {
416		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Update", nil, "Failure preparing request")
417		return
418	}
419
420	result, err = client.UpdateSender(req)
421	if err != nil {
422		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Update", nil, "Failure sending request")
423		return
424	}
425
426	return
427}
428
429// UpdatePreparer prepares the Update request.
430func (client VirtualMachineScaleSetExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtensionUpdate) (*http.Request, error) {
431	pathParameters := map[string]interface{}{
432		"resourceGroupName": autorest.Encode("path", resourceGroupName),
433		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
434		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
435		"vmssExtensionName": autorest.Encode("path", vmssExtensionName),
436	}
437
438	const APIVersion = "2021-07-01"
439	queryParameters := map[string]interface{}{
440		"api-version": APIVersion,
441	}
442
443	extensionParameters.Name = nil
444	extensionParameters.Type = nil
445	preparer := autorest.CreatePreparer(
446		autorest.AsContentType("application/json; charset=utf-8"),
447		autorest.AsPatch(),
448		autorest.WithBaseURL(client.BaseURI),
449		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters),
450		autorest.WithJSON(extensionParameters),
451		autorest.WithQueryParameters(queryParameters))
452	return preparer.Prepare((&http.Request{}).WithContext(ctx))
453}
454
455// UpdateSender sends the Update request. The method will close the
456// http.Response Body if it receives an error.
457func (client VirtualMachineScaleSetExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetExtensionsUpdateFuture, err error) {
458	var resp *http.Response
459	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
460	if err != nil {
461		return
462	}
463	var azf azure.Future
464	azf, err = azure.NewFutureFromResponse(resp)
465	future.FutureAPI = &azf
466	future.Result = future.result
467	return
468}
469
470// UpdateResponder handles the response to the Update request. The method always
471// closes the http.Response Body.
472func (client VirtualMachineScaleSetExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) {
473	err = autorest.Respond(
474		resp,
475		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
476		autorest.ByUnmarshallingJSON(&result),
477		autorest.ByClosing())
478	result.Response = autorest.Response{Response: resp}
479	return
480}
481