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