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// VirtualMachineScaleSetVMsClient is the compute Client
18type VirtualMachineScaleSetVMsClient struct {
19	BaseClient
20}
21
22// NewVirtualMachineScaleSetVMsClient creates an instance of the VirtualMachineScaleSetVMsClient client.
23func NewVirtualMachineScaleSetVMsClient(subscriptionID string) VirtualMachineScaleSetVMsClient {
24	return NewVirtualMachineScaleSetVMsClientWithBaseURI(DefaultBaseURI, subscriptionID)
25}
26
27// NewVirtualMachineScaleSetVMsClientWithBaseURI creates an instance of the VirtualMachineScaleSetVMsClient client
28// using a custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign
29// clouds, Azure stack).
30func NewVirtualMachineScaleSetVMsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMsClient {
31	return VirtualMachineScaleSetVMsClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// Deallocate deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the
35// compute resources it uses. You are not billed for the compute resources of this virtual machine once it is
36// deallocated.
37// Parameters:
38// resourceGroupName - the name of the resource group.
39// VMScaleSetName - the name of the VM scale set.
40// instanceID - the instance ID of the virtual machine.
41func (client VirtualMachineScaleSetVMsClient) Deallocate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsDeallocateFuture, err error) {
42	if tracing.IsEnabled() {
43		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Deallocate")
44		defer func() {
45			sc := -1
46			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
47				sc = result.FutureAPI.Response().StatusCode
48			}
49			tracing.EndSpan(ctx, sc, err)
50		}()
51	}
52	req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
53	if err != nil {
54		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Deallocate", nil, "Failure preparing request")
55		return
56	}
57
58	result, err = client.DeallocateSender(req)
59	if err != nil {
60		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Deallocate", nil, "Failure sending request")
61		return
62	}
63
64	return
65}
66
67// DeallocatePreparer prepares the Deallocate request.
68func (client VirtualMachineScaleSetVMsClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
69	pathParameters := map[string]interface{}{
70		"instanceId":        autorest.Encode("path", instanceID),
71		"resourceGroupName": autorest.Encode("path", resourceGroupName),
72		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
73		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
74	}
75
76	const APIVersion = "2015-06-15"
77	queryParameters := map[string]interface{}{
78		"api-version": APIVersion,
79	}
80
81	preparer := autorest.CreatePreparer(
82		autorest.AsPost(),
83		autorest.WithBaseURL(client.BaseURI),
84		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", pathParameters),
85		autorest.WithQueryParameters(queryParameters))
86	return preparer.Prepare((&http.Request{}).WithContext(ctx))
87}
88
89// DeallocateSender sends the Deallocate request. The method will close the
90// http.Response Body if it receives an error.
91func (client VirtualMachineScaleSetVMsClient) DeallocateSender(req *http.Request) (future VirtualMachineScaleSetVMsDeallocateFuture, err error) {
92	var resp *http.Response
93	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
94	if err != nil {
95		return
96	}
97	var azf azure.Future
98	azf, err = azure.NewFutureFromResponse(resp)
99	future.FutureAPI = &azf
100	future.Result = future.result
101	return
102}
103
104// DeallocateResponder handles the response to the Deallocate request. The method always
105// closes the http.Response Body.
106func (client VirtualMachineScaleSetVMsClient) DeallocateResponder(resp *http.Response) (result OperationStatusResponse, err error) {
107	err = autorest.Respond(
108		resp,
109		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
110		autorest.ByUnmarshallingJSON(&result),
111		autorest.ByClosing())
112	result.Response = autorest.Response{Response: resp}
113	return
114}
115
116// Delete deletes a virtual machine from a VM scale set.
117// Parameters:
118// resourceGroupName - the name of the resource group.
119// VMScaleSetName - the name of the VM scale set.
120// instanceID - the instance ID of the virtual machine.
121func (client VirtualMachineScaleSetVMsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsDeleteFuture, err error) {
122	if tracing.IsEnabled() {
123		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Delete")
124		defer func() {
125			sc := -1
126			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
127				sc = result.FutureAPI.Response().StatusCode
128			}
129			tracing.EndSpan(ctx, sc, err)
130		}()
131	}
132	req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
133	if err != nil {
134		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Delete", nil, "Failure preparing request")
135		return
136	}
137
138	result, err = client.DeleteSender(req)
139	if err != nil {
140		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Delete", nil, "Failure sending request")
141		return
142	}
143
144	return
145}
146
147// DeletePreparer prepares the Delete request.
148func (client VirtualMachineScaleSetVMsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
149	pathParameters := map[string]interface{}{
150		"instanceId":        autorest.Encode("path", instanceID),
151		"resourceGroupName": autorest.Encode("path", resourceGroupName),
152		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
153		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
154	}
155
156	const APIVersion = "2015-06-15"
157	queryParameters := map[string]interface{}{
158		"api-version": APIVersion,
159	}
160
161	preparer := autorest.CreatePreparer(
162		autorest.AsDelete(),
163		autorest.WithBaseURL(client.BaseURI),
164		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", pathParameters),
165		autorest.WithQueryParameters(queryParameters))
166	return preparer.Prepare((&http.Request{}).WithContext(ctx))
167}
168
169// DeleteSender sends the Delete request. The method will close the
170// http.Response Body if it receives an error.
171func (client VirtualMachineScaleSetVMsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMsDeleteFuture, err error) {
172	var resp *http.Response
173	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
174	if err != nil {
175		return
176	}
177	var azf azure.Future
178	azf, err = azure.NewFutureFromResponse(resp)
179	future.FutureAPI = &azf
180	future.Result = future.result
181	return
182}
183
184// DeleteResponder handles the response to the Delete request. The method always
185// closes the http.Response Body.
186func (client VirtualMachineScaleSetVMsClient) DeleteResponder(resp *http.Response) (result OperationStatusResponse, err error) {
187	err = autorest.Respond(
188		resp,
189		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
190		autorest.ByUnmarshallingJSON(&result),
191		autorest.ByClosing())
192	result.Response = autorest.Response{Response: resp}
193	return
194}
195
196// Get gets a virtual machine from a VM scale set.
197// Parameters:
198// resourceGroupName - the name of the resource group.
199// VMScaleSetName - the name of the VM scale set.
200// instanceID - the instance ID of the virtual machine.
201func (client VirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVM, err error) {
202	if tracing.IsEnabled() {
203		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Get")
204		defer func() {
205			sc := -1
206			if result.Response.Response != nil {
207				sc = result.Response.Response.StatusCode
208			}
209			tracing.EndSpan(ctx, sc, err)
210		}()
211	}
212	req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
213	if err != nil {
214		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", nil, "Failure preparing request")
215		return
216	}
217
218	resp, err := client.GetSender(req)
219	if err != nil {
220		result.Response = autorest.Response{Response: resp}
221		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", resp, "Failure sending request")
222		return
223	}
224
225	result, err = client.GetResponder(resp)
226	if err != nil {
227		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", resp, "Failure responding to request")
228		return
229	}
230
231	return
232}
233
234// GetPreparer prepares the Get request.
235func (client VirtualMachineScaleSetVMsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
236	pathParameters := map[string]interface{}{
237		"instanceId":        autorest.Encode("path", instanceID),
238		"resourceGroupName": autorest.Encode("path", resourceGroupName),
239		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
240		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
241	}
242
243	const APIVersion = "2015-06-15"
244	queryParameters := map[string]interface{}{
245		"api-version": APIVersion,
246	}
247
248	preparer := autorest.CreatePreparer(
249		autorest.AsGet(),
250		autorest.WithBaseURL(client.BaseURI),
251		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", pathParameters),
252		autorest.WithQueryParameters(queryParameters))
253	return preparer.Prepare((&http.Request{}).WithContext(ctx))
254}
255
256// GetSender sends the Get request. The method will close the
257// http.Response Body if it receives an error.
258func (client VirtualMachineScaleSetVMsClient) GetSender(req *http.Request) (*http.Response, error) {
259	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
260}
261
262// GetResponder handles the response to the Get request. The method always
263// closes the http.Response Body.
264func (client VirtualMachineScaleSetVMsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetVM, err error) {
265	err = autorest.Respond(
266		resp,
267		azure.WithErrorUnlessStatusCode(http.StatusOK),
268		autorest.ByUnmarshallingJSON(&result),
269		autorest.ByClosing())
270	result.Response = autorest.Response{Response: resp}
271	return
272}
273
274// GetInstanceView gets the status of a virtual machine from a VM scale set.
275// Parameters:
276// resourceGroupName - the name of the resource group.
277// VMScaleSetName - the name of the VM scale set.
278// instanceID - the instance ID of the virtual machine.
279func (client VirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMInstanceView, err error) {
280	if tracing.IsEnabled() {
281		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.GetInstanceView")
282		defer func() {
283			sc := -1
284			if result.Response.Response != nil {
285				sc = result.Response.Response.StatusCode
286			}
287			tracing.EndSpan(ctx, sc, err)
288		}()
289	}
290	req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
291	if err != nil {
292		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", nil, "Failure preparing request")
293		return
294	}
295
296	resp, err := client.GetInstanceViewSender(req)
297	if err != nil {
298		result.Response = autorest.Response{Response: resp}
299		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", resp, "Failure sending request")
300		return
301	}
302
303	result, err = client.GetInstanceViewResponder(resp)
304	if err != nil {
305		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", resp, "Failure responding to request")
306		return
307	}
308
309	return
310}
311
312// GetInstanceViewPreparer prepares the GetInstanceView request.
313func (client VirtualMachineScaleSetVMsClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
314	pathParameters := map[string]interface{}{
315		"instanceId":        autorest.Encode("path", instanceID),
316		"resourceGroupName": autorest.Encode("path", resourceGroupName),
317		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
318		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
319	}
320
321	const APIVersion = "2015-06-15"
322	queryParameters := map[string]interface{}{
323		"api-version": APIVersion,
324	}
325
326	preparer := autorest.CreatePreparer(
327		autorest.AsGet(),
328		autorest.WithBaseURL(client.BaseURI),
329		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", pathParameters),
330		autorest.WithQueryParameters(queryParameters))
331	return preparer.Prepare((&http.Request{}).WithContext(ctx))
332}
333
334// GetInstanceViewSender sends the GetInstanceView request. The method will close the
335// http.Response Body if it receives an error.
336func (client VirtualMachineScaleSetVMsClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) {
337	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
338}
339
340// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always
341// closes the http.Response Body.
342func (client VirtualMachineScaleSetVMsClient) GetInstanceViewResponder(resp *http.Response) (result VirtualMachineScaleSetVMInstanceView, err error) {
343	err = autorest.Respond(
344		resp,
345		azure.WithErrorUnlessStatusCode(http.StatusOK),
346		autorest.ByUnmarshallingJSON(&result),
347		autorest.ByClosing())
348	result.Response = autorest.Response{Response: resp}
349	return
350}
351
352// List gets a list of all virtual machines in a VM scale sets.
353// Parameters:
354// resourceGroupName - the name of the resource group.
355// virtualMachineScaleSetName - the name of the VM scale set.
356// filter - the filter to apply to the operation. Allowed values are 'startswith(instanceView/statuses/code,
357// 'PowerState') eq true', 'properties/latestModelApplied eq true', 'properties/latestModelApplied eq false'.
358// selectParameter - the list parameters. Allowed values are 'instanceView', 'instanceView/statuses'.
359// expand - the expand expression to apply to the operation. Allowed values are 'instanceView'.
360func (client VirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result VirtualMachineScaleSetVMListResultPage, err error) {
361	if tracing.IsEnabled() {
362		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.List")
363		defer func() {
364			sc := -1
365			if result.vmssvlr.Response.Response != nil {
366				sc = result.vmssvlr.Response.Response.StatusCode
367			}
368			tracing.EndSpan(ctx, sc, err)
369		}()
370	}
371	result.fn = client.listNextResults
372	req, err := client.ListPreparer(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand)
373	if err != nil {
374		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", nil, "Failure preparing request")
375		return
376	}
377
378	resp, err := client.ListSender(req)
379	if err != nil {
380		result.vmssvlr.Response = autorest.Response{Response: resp}
381		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", resp, "Failure sending request")
382		return
383	}
384
385	result.vmssvlr, err = client.ListResponder(resp)
386	if err != nil {
387		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", resp, "Failure responding to request")
388		return
389	}
390	if result.vmssvlr.hasNextLink() && result.vmssvlr.IsEmpty() {
391		err = result.NextWithContext(ctx)
392		return
393	}
394
395	return
396}
397
398// ListPreparer prepares the List request.
399func (client VirtualMachineScaleSetVMsClient) ListPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (*http.Request, error) {
400	pathParameters := map[string]interface{}{
401		"resourceGroupName":          autorest.Encode("path", resourceGroupName),
402		"subscriptionId":             autorest.Encode("path", client.SubscriptionID),
403		"virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName),
404	}
405
406	const APIVersion = "2015-06-15"
407	queryParameters := map[string]interface{}{
408		"api-version": APIVersion,
409	}
410	if len(filter) > 0 {
411		queryParameters["$filter"] = autorest.Encode("query", filter)
412	}
413	if len(selectParameter) > 0 {
414		queryParameters["$select"] = autorest.Encode("query", selectParameter)
415	}
416	if len(expand) > 0 {
417		queryParameters["$expand"] = autorest.Encode("query", expand)
418	}
419
420	preparer := autorest.CreatePreparer(
421		autorest.AsGet(),
422		autorest.WithBaseURL(client.BaseURI),
423		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", pathParameters),
424		autorest.WithQueryParameters(queryParameters))
425	return preparer.Prepare((&http.Request{}).WithContext(ctx))
426}
427
428// ListSender sends the List request. The method will close the
429// http.Response Body if it receives an error.
430func (client VirtualMachineScaleSetVMsClient) ListSender(req *http.Request) (*http.Response, error) {
431	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
432}
433
434// ListResponder handles the response to the List request. The method always
435// closes the http.Response Body.
436func (client VirtualMachineScaleSetVMsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetVMListResult, err error) {
437	err = autorest.Respond(
438		resp,
439		azure.WithErrorUnlessStatusCode(http.StatusOK),
440		autorest.ByUnmarshallingJSON(&result),
441		autorest.ByClosing())
442	result.Response = autorest.Response{Response: resp}
443	return
444}
445
446// listNextResults retrieves the next set of results, if any.
447func (client VirtualMachineScaleSetVMsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetVMListResult) (result VirtualMachineScaleSetVMListResult, err error) {
448	req, err := lastResults.virtualMachineScaleSetVMListResultPreparer(ctx)
449	if err != nil {
450		return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", nil, "Failure preparing next results request")
451	}
452	if req == nil {
453		return
454	}
455	resp, err := client.ListSender(req)
456	if err != nil {
457		result.Response = autorest.Response{Response: resp}
458		return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", resp, "Failure sending next results request")
459	}
460	result, err = client.ListResponder(resp)
461	if err != nil {
462		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", resp, "Failure responding to next results request")
463	}
464	return
465}
466
467// ListComplete enumerates all values, automatically crossing page boundaries as required.
468func (client VirtualMachineScaleSetVMsClient) ListComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result VirtualMachineScaleSetVMListResultIterator, err error) {
469	if tracing.IsEnabled() {
470		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.List")
471		defer func() {
472			sc := -1
473			if result.Response().Response.Response != nil {
474				sc = result.page.Response().Response.Response.StatusCode
475			}
476			tracing.EndSpan(ctx, sc, err)
477		}()
478	}
479	result.page, err = client.List(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand)
480	return
481}
482
483// PowerOff power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are
484// getting charged for the resources. Instead, use deallocate to release resources and avoid charges.
485// Parameters:
486// resourceGroupName - the name of the resource group.
487// VMScaleSetName - the name of the VM scale set.
488// instanceID - the instance ID of the virtual machine.
489func (client VirtualMachineScaleSetVMsClient) PowerOff(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsPowerOffFuture, err error) {
490	if tracing.IsEnabled() {
491		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.PowerOff")
492		defer func() {
493			sc := -1
494			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
495				sc = result.FutureAPI.Response().StatusCode
496			}
497			tracing.EndSpan(ctx, sc, err)
498		}()
499	}
500	req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
501	if err != nil {
502		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PowerOff", nil, "Failure preparing request")
503		return
504	}
505
506	result, err = client.PowerOffSender(req)
507	if err != nil {
508		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PowerOff", nil, "Failure sending request")
509		return
510	}
511
512	return
513}
514
515// PowerOffPreparer prepares the PowerOff request.
516func (client VirtualMachineScaleSetVMsClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
517	pathParameters := map[string]interface{}{
518		"instanceId":        autorest.Encode("path", instanceID),
519		"resourceGroupName": autorest.Encode("path", resourceGroupName),
520		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
521		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
522	}
523
524	const APIVersion = "2015-06-15"
525	queryParameters := map[string]interface{}{
526		"api-version": APIVersion,
527	}
528
529	preparer := autorest.CreatePreparer(
530		autorest.AsPost(),
531		autorest.WithBaseURL(client.BaseURI),
532		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", pathParameters),
533		autorest.WithQueryParameters(queryParameters))
534	return preparer.Prepare((&http.Request{}).WithContext(ctx))
535}
536
537// PowerOffSender sends the PowerOff request. The method will close the
538// http.Response Body if it receives an error.
539func (client VirtualMachineScaleSetVMsClient) PowerOffSender(req *http.Request) (future VirtualMachineScaleSetVMsPowerOffFuture, err error) {
540	var resp *http.Response
541	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
542	if err != nil {
543		return
544	}
545	var azf azure.Future
546	azf, err = azure.NewFutureFromResponse(resp)
547	future.FutureAPI = &azf
548	future.Result = future.result
549	return
550}
551
552// PowerOffResponder handles the response to the PowerOff request. The method always
553// closes the http.Response Body.
554func (client VirtualMachineScaleSetVMsClient) PowerOffResponder(resp *http.Response) (result OperationStatusResponse, err error) {
555	err = autorest.Respond(
556		resp,
557		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
558		autorest.ByUnmarshallingJSON(&result),
559		autorest.ByClosing())
560	result.Response = autorest.Response{Response: resp}
561	return
562}
563
564// Reimage reimages (upgrade the operating system) a specific virtual machine in a VM scale set.
565// Parameters:
566// resourceGroupName - the name of the resource group.
567// VMScaleSetName - the name of the VM scale set.
568// instanceID - the instance ID of the virtual machine.
569func (client VirtualMachineScaleSetVMsClient) Reimage(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsReimageFuture, err error) {
570	if tracing.IsEnabled() {
571		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Reimage")
572		defer func() {
573			sc := -1
574			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
575				sc = result.FutureAPI.Response().StatusCode
576			}
577			tracing.EndSpan(ctx, sc, err)
578		}()
579	}
580	req, err := client.ReimagePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
581	if err != nil {
582		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Reimage", nil, "Failure preparing request")
583		return
584	}
585
586	result, err = client.ReimageSender(req)
587	if err != nil {
588		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Reimage", nil, "Failure sending request")
589		return
590	}
591
592	return
593}
594
595// ReimagePreparer prepares the Reimage request.
596func (client VirtualMachineScaleSetVMsClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
597	pathParameters := map[string]interface{}{
598		"instanceId":        autorest.Encode("path", instanceID),
599		"resourceGroupName": autorest.Encode("path", resourceGroupName),
600		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
601		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
602	}
603
604	const APIVersion = "2015-06-15"
605	queryParameters := map[string]interface{}{
606		"api-version": APIVersion,
607	}
608
609	preparer := autorest.CreatePreparer(
610		autorest.AsPost(),
611		autorest.WithBaseURL(client.BaseURI),
612		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", pathParameters),
613		autorest.WithQueryParameters(queryParameters))
614	return preparer.Prepare((&http.Request{}).WithContext(ctx))
615}
616
617// ReimageSender sends the Reimage request. The method will close the
618// http.Response Body if it receives an error.
619func (client VirtualMachineScaleSetVMsClient) ReimageSender(req *http.Request) (future VirtualMachineScaleSetVMsReimageFuture, err error) {
620	var resp *http.Response
621	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
622	if err != nil {
623		return
624	}
625	var azf azure.Future
626	azf, err = azure.NewFutureFromResponse(resp)
627	future.FutureAPI = &azf
628	future.Result = future.result
629	return
630}
631
632// ReimageResponder handles the response to the Reimage request. The method always
633// closes the http.Response Body.
634func (client VirtualMachineScaleSetVMsClient) ReimageResponder(resp *http.Response) (result OperationStatusResponse, err error) {
635	err = autorest.Respond(
636		resp,
637		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
638		autorest.ByUnmarshallingJSON(&result),
639		autorest.ByClosing())
640	result.Response = autorest.Response{Response: resp}
641	return
642}
643
644// Restart restarts a virtual machine in a VM scale set.
645// Parameters:
646// resourceGroupName - the name of the resource group.
647// VMScaleSetName - the name of the VM scale set.
648// instanceID - the instance ID of the virtual machine.
649func (client VirtualMachineScaleSetVMsClient) Restart(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsRestartFuture, err error) {
650	if tracing.IsEnabled() {
651		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Restart")
652		defer func() {
653			sc := -1
654			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
655				sc = result.FutureAPI.Response().StatusCode
656			}
657			tracing.EndSpan(ctx, sc, err)
658		}()
659	}
660	req, err := client.RestartPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
661	if err != nil {
662		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Restart", nil, "Failure preparing request")
663		return
664	}
665
666	result, err = client.RestartSender(req)
667	if err != nil {
668		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Restart", nil, "Failure sending request")
669		return
670	}
671
672	return
673}
674
675// RestartPreparer prepares the Restart request.
676func (client VirtualMachineScaleSetVMsClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
677	pathParameters := map[string]interface{}{
678		"instanceId":        autorest.Encode("path", instanceID),
679		"resourceGroupName": autorest.Encode("path", resourceGroupName),
680		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
681		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
682	}
683
684	const APIVersion = "2015-06-15"
685	queryParameters := map[string]interface{}{
686		"api-version": APIVersion,
687	}
688
689	preparer := autorest.CreatePreparer(
690		autorest.AsPost(),
691		autorest.WithBaseURL(client.BaseURI),
692		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", pathParameters),
693		autorest.WithQueryParameters(queryParameters))
694	return preparer.Prepare((&http.Request{}).WithContext(ctx))
695}
696
697// RestartSender sends the Restart request. The method will close the
698// http.Response Body if it receives an error.
699func (client VirtualMachineScaleSetVMsClient) RestartSender(req *http.Request) (future VirtualMachineScaleSetVMsRestartFuture, err error) {
700	var resp *http.Response
701	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
702	if err != nil {
703		return
704	}
705	var azf azure.Future
706	azf, err = azure.NewFutureFromResponse(resp)
707	future.FutureAPI = &azf
708	future.Result = future.result
709	return
710}
711
712// RestartResponder handles the response to the Restart request. The method always
713// closes the http.Response Body.
714func (client VirtualMachineScaleSetVMsClient) RestartResponder(resp *http.Response) (result OperationStatusResponse, err error) {
715	err = autorest.Respond(
716		resp,
717		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
718		autorest.ByUnmarshallingJSON(&result),
719		autorest.ByClosing())
720	result.Response = autorest.Response{Response: resp}
721	return
722}
723
724// Start starts a virtual machine in a VM scale set.
725// Parameters:
726// resourceGroupName - the name of the resource group.
727// VMScaleSetName - the name of the VM scale set.
728// instanceID - the instance ID of the virtual machine.
729func (client VirtualMachineScaleSetVMsClient) Start(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsStartFuture, err error) {
730	if tracing.IsEnabled() {
731		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Start")
732		defer func() {
733			sc := -1
734			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
735				sc = result.FutureAPI.Response().StatusCode
736			}
737			tracing.EndSpan(ctx, sc, err)
738		}()
739	}
740	req, err := client.StartPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID)
741	if err != nil {
742		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Start", nil, "Failure preparing request")
743		return
744	}
745
746	result, err = client.StartSender(req)
747	if err != nil {
748		err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Start", nil, "Failure sending request")
749		return
750	}
751
752	return
753}
754
755// StartPreparer prepares the Start request.
756func (client VirtualMachineScaleSetVMsClient) StartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) {
757	pathParameters := map[string]interface{}{
758		"instanceId":        autorest.Encode("path", instanceID),
759		"resourceGroupName": autorest.Encode("path", resourceGroupName),
760		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
761		"vmScaleSetName":    autorest.Encode("path", VMScaleSetName),
762	}
763
764	const APIVersion = "2015-06-15"
765	queryParameters := map[string]interface{}{
766		"api-version": APIVersion,
767	}
768
769	preparer := autorest.CreatePreparer(
770		autorest.AsPost(),
771		autorest.WithBaseURL(client.BaseURI),
772		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", pathParameters),
773		autorest.WithQueryParameters(queryParameters))
774	return preparer.Prepare((&http.Request{}).WithContext(ctx))
775}
776
777// StartSender sends the Start request. The method will close the
778// http.Response Body if it receives an error.
779func (client VirtualMachineScaleSetVMsClient) StartSender(req *http.Request) (future VirtualMachineScaleSetVMsStartFuture, err error) {
780	var resp *http.Response
781	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
782	if err != nil {
783		return
784	}
785	var azf azure.Future
786	azf, err = azure.NewFutureFromResponse(resp)
787	future.FutureAPI = &azf
788	future.Result = future.result
789	return
790}
791
792// StartResponder handles the response to the Start request. The method always
793// closes the http.Response Body.
794func (client VirtualMachineScaleSetVMsClient) StartResponder(resp *http.Response) (result OperationStatusResponse, err error) {
795	err = autorest.Respond(
796		resp,
797		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
798		autorest.ByUnmarshallingJSON(&result),
799		autorest.ByClosing())
800	result.Response = autorest.Response{Response: resp}
801	return
802}
803