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/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// DisksClient is the compute Client
19type DisksClient struct {
20	BaseClient
21}
22
23// NewDisksClient creates an instance of the DisksClient client.
24func NewDisksClient(subscriptionID string) DisksClient {
25	return NewDisksClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewDisksClientWithBaseURI creates an instance of the DisksClient client using a custom endpoint.  Use this when
29// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewDisksClientWithBaseURI(baseURI string, subscriptionID string) DisksClient {
31	return DisksClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// CreateOrUpdate creates or updates a disk.
35// Parameters:
36// resourceGroupName - the name of the resource group.
37// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is
38// created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80
39// characters.
40// disk - disk object supplied in the body of the Put disk operation.
41func (client DisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, disk Disk) (result DisksCreateOrUpdateFuture, err error) {
42	if tracing.IsEnabled() {
43		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.CreateOrUpdate")
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	if err := validation.Validate([]validation.Validation{
53		{TargetValue: disk,
54			Constraints: []validation.Constraint{{Target: "disk.DiskProperties", Name: validation.Null, Rule: false,
55				Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData", Name: validation.Null, Rule: true,
56					Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData.ImageReference", Name: validation.Null, Rule: false,
57						Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData.ImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}},
58						{Target: "disk.DiskProperties.CreationData.GalleryImageReference", Name: validation.Null, Rule: false,
59							Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData.GalleryImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}},
60					}},
61					{Target: "disk.DiskProperties.EncryptionSettingsCollection", Name: validation.Null, Rule: false,
62						Chain: []validation.Constraint{{Target: "disk.DiskProperties.EncryptionSettingsCollection.Enabled", Name: validation.Null, Rule: true, Chain: nil}}},
63				}}}}}); err != nil {
64		return result, validation.NewError("compute.DisksClient", "CreateOrUpdate", err.Error())
65	}
66
67	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskName, disk)
68	if err != nil {
69		err = autorest.NewErrorWithError(err, "compute.DisksClient", "CreateOrUpdate", nil, "Failure preparing request")
70		return
71	}
72
73	result, err = client.CreateOrUpdateSender(req)
74	if err != nil {
75		err = autorest.NewErrorWithError(err, "compute.DisksClient", "CreateOrUpdate", nil, "Failure sending request")
76		return
77	}
78
79	return
80}
81
82// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
83func (client DisksClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskName string, disk Disk) (*http.Request, error) {
84	pathParameters := map[string]interface{}{
85		"diskName":          autorest.Encode("path", diskName),
86		"resourceGroupName": autorest.Encode("path", resourceGroupName),
87		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
88	}
89
90	const APIVersion = "2020-05-01"
91	queryParameters := map[string]interface{}{
92		"api-version": APIVersion,
93	}
94
95	disk.ManagedBy = nil
96	disk.ManagedByExtended = nil
97	preparer := autorest.CreatePreparer(
98		autorest.AsContentType("application/json; charset=utf-8"),
99		autorest.AsPut(),
100		autorest.WithBaseURL(client.BaseURI),
101		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
102		autorest.WithJSON(disk),
103		autorest.WithQueryParameters(queryParameters))
104	return preparer.Prepare((&http.Request{}).WithContext(ctx))
105}
106
107// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
108// http.Response Body if it receives an error.
109func (client DisksClient) CreateOrUpdateSender(req *http.Request) (future DisksCreateOrUpdateFuture, err error) {
110	var resp *http.Response
111	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
112	if err != nil {
113		return
114	}
115	var azf azure.Future
116	azf, err = azure.NewFutureFromResponse(resp)
117	future.FutureAPI = &azf
118	future.Result = future.result
119	return
120}
121
122// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
123// closes the http.Response Body.
124func (client DisksClient) CreateOrUpdateResponder(resp *http.Response) (result Disk, err error) {
125	err = autorest.Respond(
126		resp,
127		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
128		autorest.ByUnmarshallingJSON(&result),
129		autorest.ByClosing())
130	result.Response = autorest.Response{Response: resp}
131	return
132}
133
134// Delete deletes a disk.
135// Parameters:
136// resourceGroupName - the name of the resource group.
137// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is
138// created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80
139// characters.
140func (client DisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) (result DisksDeleteFuture, err error) {
141	if tracing.IsEnabled() {
142		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Delete")
143		defer func() {
144			sc := -1
145			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
146				sc = result.FutureAPI.Response().StatusCode
147			}
148			tracing.EndSpan(ctx, sc, err)
149		}()
150	}
151	req, err := client.DeletePreparer(ctx, resourceGroupName, diskName)
152	if err != nil {
153		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Delete", nil, "Failure preparing request")
154		return
155	}
156
157	result, err = client.DeleteSender(req)
158	if err != nil {
159		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Delete", nil, "Failure sending request")
160		return
161	}
162
163	return
164}
165
166// DeletePreparer prepares the Delete request.
167func (client DisksClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) {
168	pathParameters := map[string]interface{}{
169		"diskName":          autorest.Encode("path", diskName),
170		"resourceGroupName": autorest.Encode("path", resourceGroupName),
171		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
172	}
173
174	const APIVersion = "2020-05-01"
175	queryParameters := map[string]interface{}{
176		"api-version": APIVersion,
177	}
178
179	preparer := autorest.CreatePreparer(
180		autorest.AsDelete(),
181		autorest.WithBaseURL(client.BaseURI),
182		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
183		autorest.WithQueryParameters(queryParameters))
184	return preparer.Prepare((&http.Request{}).WithContext(ctx))
185}
186
187// DeleteSender sends the Delete request. The method will close the
188// http.Response Body if it receives an error.
189func (client DisksClient) DeleteSender(req *http.Request) (future DisksDeleteFuture, err error) {
190	var resp *http.Response
191	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
192	if err != nil {
193		return
194	}
195	var azf azure.Future
196	azf, err = azure.NewFutureFromResponse(resp)
197	future.FutureAPI = &azf
198	future.Result = future.result
199	return
200}
201
202// DeleteResponder handles the response to the Delete request. The method always
203// closes the http.Response Body.
204func (client DisksClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
205	err = autorest.Respond(
206		resp,
207		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
208		autorest.ByClosing())
209	result.Response = resp
210	return
211}
212
213// Get gets information about a disk.
214// Parameters:
215// resourceGroupName - the name of the resource group.
216// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is
217// created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80
218// characters.
219func (client DisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result Disk, err error) {
220	if tracing.IsEnabled() {
221		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Get")
222		defer func() {
223			sc := -1
224			if result.Response.Response != nil {
225				sc = result.Response.Response.StatusCode
226			}
227			tracing.EndSpan(ctx, sc, err)
228		}()
229	}
230	req, err := client.GetPreparer(ctx, resourceGroupName, diskName)
231	if err != nil {
232		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", nil, "Failure preparing request")
233		return
234	}
235
236	resp, err := client.GetSender(req)
237	if err != nil {
238		result.Response = autorest.Response{Response: resp}
239		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", resp, "Failure sending request")
240		return
241	}
242
243	result, err = client.GetResponder(resp)
244	if err != nil {
245		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", resp, "Failure responding to request")
246		return
247	}
248
249	return
250}
251
252// GetPreparer prepares the Get request.
253func (client DisksClient) GetPreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) {
254	pathParameters := map[string]interface{}{
255		"diskName":          autorest.Encode("path", diskName),
256		"resourceGroupName": autorest.Encode("path", resourceGroupName),
257		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
258	}
259
260	const APIVersion = "2020-05-01"
261	queryParameters := map[string]interface{}{
262		"api-version": APIVersion,
263	}
264
265	preparer := autorest.CreatePreparer(
266		autorest.AsGet(),
267		autorest.WithBaseURL(client.BaseURI),
268		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
269		autorest.WithQueryParameters(queryParameters))
270	return preparer.Prepare((&http.Request{}).WithContext(ctx))
271}
272
273// GetSender sends the Get request. The method will close the
274// http.Response Body if it receives an error.
275func (client DisksClient) GetSender(req *http.Request) (*http.Response, error) {
276	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
277}
278
279// GetResponder handles the response to the Get request. The method always
280// closes the http.Response Body.
281func (client DisksClient) GetResponder(resp *http.Response) (result Disk, err error) {
282	err = autorest.Respond(
283		resp,
284		azure.WithErrorUnlessStatusCode(http.StatusOK),
285		autorest.ByUnmarshallingJSON(&result),
286		autorest.ByClosing())
287	result.Response = autorest.Response{Response: resp}
288	return
289}
290
291// GrantAccess grants access to a disk.
292// Parameters:
293// resourceGroupName - the name of the resource group.
294// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is
295// created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80
296// characters.
297// grantAccessData - access data object supplied in the body of the get disk access operation.
298func (client DisksClient) GrantAccess(ctx context.Context, resourceGroupName string, diskName string, grantAccessData GrantAccessData) (result DisksGrantAccessFuture, err error) {
299	if tracing.IsEnabled() {
300		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.GrantAccess")
301		defer func() {
302			sc := -1
303			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
304				sc = result.FutureAPI.Response().StatusCode
305			}
306			tracing.EndSpan(ctx, sc, err)
307		}()
308	}
309	if err := validation.Validate([]validation.Validation{
310		{TargetValue: grantAccessData,
311			Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
312		return result, validation.NewError("compute.DisksClient", "GrantAccess", err.Error())
313	}
314
315	req, err := client.GrantAccessPreparer(ctx, resourceGroupName, diskName, grantAccessData)
316	if err != nil {
317		err = autorest.NewErrorWithError(err, "compute.DisksClient", "GrantAccess", nil, "Failure preparing request")
318		return
319	}
320
321	result, err = client.GrantAccessSender(req)
322	if err != nil {
323		err = autorest.NewErrorWithError(err, "compute.DisksClient", "GrantAccess", nil, "Failure sending request")
324		return
325	}
326
327	return
328}
329
330// GrantAccessPreparer prepares the GrantAccess request.
331func (client DisksClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, diskName string, grantAccessData GrantAccessData) (*http.Request, error) {
332	pathParameters := map[string]interface{}{
333		"diskName":          autorest.Encode("path", diskName),
334		"resourceGroupName": autorest.Encode("path", resourceGroupName),
335		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
336	}
337
338	const APIVersion = "2020-05-01"
339	queryParameters := map[string]interface{}{
340		"api-version": APIVersion,
341	}
342
343	preparer := autorest.CreatePreparer(
344		autorest.AsContentType("application/json; charset=utf-8"),
345		autorest.AsPost(),
346		autorest.WithBaseURL(client.BaseURI),
347		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", pathParameters),
348		autorest.WithJSON(grantAccessData),
349		autorest.WithQueryParameters(queryParameters))
350	return preparer.Prepare((&http.Request{}).WithContext(ctx))
351}
352
353// GrantAccessSender sends the GrantAccess request. The method will close the
354// http.Response Body if it receives an error.
355func (client DisksClient) GrantAccessSender(req *http.Request) (future DisksGrantAccessFuture, err error) {
356	var resp *http.Response
357	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
358	if err != nil {
359		return
360	}
361	var azf azure.Future
362	azf, err = azure.NewFutureFromResponse(resp)
363	future.FutureAPI = &azf
364	future.Result = future.result
365	return
366}
367
368// GrantAccessResponder handles the response to the GrantAccess request. The method always
369// closes the http.Response Body.
370func (client DisksClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) {
371	err = autorest.Respond(
372		resp,
373		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
374		autorest.ByUnmarshallingJSON(&result),
375		autorest.ByClosing())
376	result.Response = autorest.Response{Response: resp}
377	return
378}
379
380// List lists all the disks under a subscription.
381func (client DisksClient) List(ctx context.Context) (result DiskListPage, err error) {
382	if tracing.IsEnabled() {
383		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.List")
384		defer func() {
385			sc := -1
386			if result.dl.Response.Response != nil {
387				sc = result.dl.Response.Response.StatusCode
388			}
389			tracing.EndSpan(ctx, sc, err)
390		}()
391	}
392	result.fn = client.listNextResults
393	req, err := client.ListPreparer(ctx)
394	if err != nil {
395		err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", nil, "Failure preparing request")
396		return
397	}
398
399	resp, err := client.ListSender(req)
400	if err != nil {
401		result.dl.Response = autorest.Response{Response: resp}
402		err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", resp, "Failure sending request")
403		return
404	}
405
406	result.dl, err = client.ListResponder(resp)
407	if err != nil {
408		err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", resp, "Failure responding to request")
409		return
410	}
411	if result.dl.hasNextLink() && result.dl.IsEmpty() {
412		err = result.NextWithContext(ctx)
413		return
414	}
415
416	return
417}
418
419// ListPreparer prepares the List request.
420func (client DisksClient) ListPreparer(ctx context.Context) (*http.Request, error) {
421	pathParameters := map[string]interface{}{
422		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
423	}
424
425	const APIVersion = "2020-05-01"
426	queryParameters := map[string]interface{}{
427		"api-version": APIVersion,
428	}
429
430	preparer := autorest.CreatePreparer(
431		autorest.AsGet(),
432		autorest.WithBaseURL(client.BaseURI),
433		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/disks", pathParameters),
434		autorest.WithQueryParameters(queryParameters))
435	return preparer.Prepare((&http.Request{}).WithContext(ctx))
436}
437
438// ListSender sends the List request. The method will close the
439// http.Response Body if it receives an error.
440func (client DisksClient) ListSender(req *http.Request) (*http.Response, error) {
441	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
442}
443
444// ListResponder handles the response to the List request. The method always
445// closes the http.Response Body.
446func (client DisksClient) ListResponder(resp *http.Response) (result DiskList, err error) {
447	err = autorest.Respond(
448		resp,
449		azure.WithErrorUnlessStatusCode(http.StatusOK),
450		autorest.ByUnmarshallingJSON(&result),
451		autorest.ByClosing())
452	result.Response = autorest.Response{Response: resp}
453	return
454}
455
456// listNextResults retrieves the next set of results, if any.
457func (client DisksClient) listNextResults(ctx context.Context, lastResults DiskList) (result DiskList, err error) {
458	req, err := lastResults.diskListPreparer(ctx)
459	if err != nil {
460		return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", nil, "Failure preparing next results request")
461	}
462	if req == nil {
463		return
464	}
465	resp, err := client.ListSender(req)
466	if err != nil {
467		result.Response = autorest.Response{Response: resp}
468		return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", resp, "Failure sending next results request")
469	}
470	result, err = client.ListResponder(resp)
471	if err != nil {
472		err = autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", resp, "Failure responding to next results request")
473	}
474	return
475}
476
477// ListComplete enumerates all values, automatically crossing page boundaries as required.
478func (client DisksClient) ListComplete(ctx context.Context) (result DiskListIterator, err error) {
479	if tracing.IsEnabled() {
480		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.List")
481		defer func() {
482			sc := -1
483			if result.Response().Response.Response != nil {
484				sc = result.page.Response().Response.Response.StatusCode
485			}
486			tracing.EndSpan(ctx, sc, err)
487		}()
488	}
489	result.page, err = client.List(ctx)
490	return
491}
492
493// ListByResourceGroup lists all the disks under a resource group.
494// Parameters:
495// resourceGroupName - the name of the resource group.
496func (client DisksClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskListPage, err error) {
497	if tracing.IsEnabled() {
498		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.ListByResourceGroup")
499		defer func() {
500			sc := -1
501			if result.dl.Response.Response != nil {
502				sc = result.dl.Response.Response.StatusCode
503			}
504			tracing.EndSpan(ctx, sc, err)
505		}()
506	}
507	result.fn = client.listByResourceGroupNextResults
508	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
509	if err != nil {
510		err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", nil, "Failure preparing request")
511		return
512	}
513
514	resp, err := client.ListByResourceGroupSender(req)
515	if err != nil {
516		result.dl.Response = autorest.Response{Response: resp}
517		err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", resp, "Failure sending request")
518		return
519	}
520
521	result.dl, err = client.ListByResourceGroupResponder(resp)
522	if err != nil {
523		err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", resp, "Failure responding to request")
524		return
525	}
526	if result.dl.hasNextLink() && result.dl.IsEmpty() {
527		err = result.NextWithContext(ctx)
528		return
529	}
530
531	return
532}
533
534// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
535func (client DisksClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
536	pathParameters := map[string]interface{}{
537		"resourceGroupName": autorest.Encode("path", resourceGroupName),
538		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
539	}
540
541	const APIVersion = "2020-05-01"
542	queryParameters := map[string]interface{}{
543		"api-version": APIVersion,
544	}
545
546	preparer := autorest.CreatePreparer(
547		autorest.AsGet(),
548		autorest.WithBaseURL(client.BaseURI),
549		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", pathParameters),
550		autorest.WithQueryParameters(queryParameters))
551	return preparer.Prepare((&http.Request{}).WithContext(ctx))
552}
553
554// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
555// http.Response Body if it receives an error.
556func (client DisksClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
557	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
558}
559
560// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
561// closes the http.Response Body.
562func (client DisksClient) ListByResourceGroupResponder(resp *http.Response) (result DiskList, err error) {
563	err = autorest.Respond(
564		resp,
565		azure.WithErrorUnlessStatusCode(http.StatusOK),
566		autorest.ByUnmarshallingJSON(&result),
567		autorest.ByClosing())
568	result.Response = autorest.Response{Response: resp}
569	return
570}
571
572// listByResourceGroupNextResults retrieves the next set of results, if any.
573func (client DisksClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskList) (result DiskList, err error) {
574	req, err := lastResults.diskListPreparer(ctx)
575	if err != nil {
576		return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
577	}
578	if req == nil {
579		return
580	}
581	resp, err := client.ListByResourceGroupSender(req)
582	if err != nil {
583		result.Response = autorest.Response{Response: resp}
584		return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", resp, "Failure sending next results request")
585	}
586	result, err = client.ListByResourceGroupResponder(resp)
587	if err != nil {
588		err = autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
589	}
590	return
591}
592
593// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
594func (client DisksClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskListIterator, err error) {
595	if tracing.IsEnabled() {
596		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.ListByResourceGroup")
597		defer func() {
598			sc := -1
599			if result.Response().Response.Response != nil {
600				sc = result.page.Response().Response.Response.StatusCode
601			}
602			tracing.EndSpan(ctx, sc, err)
603		}()
604	}
605	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
606	return
607}
608
609// RevokeAccess revokes access to a disk.
610// Parameters:
611// resourceGroupName - the name of the resource group.
612// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is
613// created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80
614// characters.
615func (client DisksClient) RevokeAccess(ctx context.Context, resourceGroupName string, diskName string) (result DisksRevokeAccessFuture, err error) {
616	if tracing.IsEnabled() {
617		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.RevokeAccess")
618		defer func() {
619			sc := -1
620			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
621				sc = result.FutureAPI.Response().StatusCode
622			}
623			tracing.EndSpan(ctx, sc, err)
624		}()
625	}
626	req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, diskName)
627	if err != nil {
628		err = autorest.NewErrorWithError(err, "compute.DisksClient", "RevokeAccess", nil, "Failure preparing request")
629		return
630	}
631
632	result, err = client.RevokeAccessSender(req)
633	if err != nil {
634		err = autorest.NewErrorWithError(err, "compute.DisksClient", "RevokeAccess", nil, "Failure sending request")
635		return
636	}
637
638	return
639}
640
641// RevokeAccessPreparer prepares the RevokeAccess request.
642func (client DisksClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) {
643	pathParameters := map[string]interface{}{
644		"diskName":          autorest.Encode("path", diskName),
645		"resourceGroupName": autorest.Encode("path", resourceGroupName),
646		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
647	}
648
649	const APIVersion = "2020-05-01"
650	queryParameters := map[string]interface{}{
651		"api-version": APIVersion,
652	}
653
654	preparer := autorest.CreatePreparer(
655		autorest.AsPost(),
656		autorest.WithBaseURL(client.BaseURI),
657		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", pathParameters),
658		autorest.WithQueryParameters(queryParameters))
659	return preparer.Prepare((&http.Request{}).WithContext(ctx))
660}
661
662// RevokeAccessSender sends the RevokeAccess request. The method will close the
663// http.Response Body if it receives an error.
664func (client DisksClient) RevokeAccessSender(req *http.Request) (future DisksRevokeAccessFuture, err error) {
665	var resp *http.Response
666	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
667	if err != nil {
668		return
669	}
670	var azf azure.Future
671	azf, err = azure.NewFutureFromResponse(resp)
672	future.FutureAPI = &azf
673	future.Result = future.result
674	return
675}
676
677// RevokeAccessResponder handles the response to the RevokeAccess request. The method always
678// closes the http.Response Body.
679func (client DisksClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) {
680	err = autorest.Respond(
681		resp,
682		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
683		autorest.ByClosing())
684	result.Response = resp
685	return
686}
687
688// Update updates (patches) a disk.
689// Parameters:
690// resourceGroupName - the name of the resource group.
691// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is
692// created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80
693// characters.
694// disk - disk object supplied in the body of the Patch disk operation.
695func (client DisksClient) Update(ctx context.Context, resourceGroupName string, diskName string, disk DiskUpdate) (result DisksUpdateFuture, err error) {
696	if tracing.IsEnabled() {
697		ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Update")
698		defer func() {
699			sc := -1
700			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
701				sc = result.FutureAPI.Response().StatusCode
702			}
703			tracing.EndSpan(ctx, sc, err)
704		}()
705	}
706	req, err := client.UpdatePreparer(ctx, resourceGroupName, diskName, disk)
707	if err != nil {
708		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Update", nil, "Failure preparing request")
709		return
710	}
711
712	result, err = client.UpdateSender(req)
713	if err != nil {
714		err = autorest.NewErrorWithError(err, "compute.DisksClient", "Update", nil, "Failure sending request")
715		return
716	}
717
718	return
719}
720
721// UpdatePreparer prepares the Update request.
722func (client DisksClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskName string, disk DiskUpdate) (*http.Request, error) {
723	pathParameters := map[string]interface{}{
724		"diskName":          autorest.Encode("path", diskName),
725		"resourceGroupName": autorest.Encode("path", resourceGroupName),
726		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
727	}
728
729	const APIVersion = "2020-05-01"
730	queryParameters := map[string]interface{}{
731		"api-version": APIVersion,
732	}
733
734	preparer := autorest.CreatePreparer(
735		autorest.AsContentType("application/json; charset=utf-8"),
736		autorest.AsPatch(),
737		autorest.WithBaseURL(client.BaseURI),
738		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
739		autorest.WithJSON(disk),
740		autorest.WithQueryParameters(queryParameters))
741	return preparer.Prepare((&http.Request{}).WithContext(ctx))
742}
743
744// UpdateSender sends the Update request. The method will close the
745// http.Response Body if it receives an error.
746func (client DisksClient) UpdateSender(req *http.Request) (future DisksUpdateFuture, err error) {
747	var resp *http.Response
748	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
749	if err != nil {
750		return
751	}
752	var azf azure.Future
753	azf, err = azure.NewFutureFromResponse(resp)
754	future.FutureAPI = &azf
755	future.Result = future.result
756	return
757}
758
759// UpdateResponder handles the response to the Update request. The method always
760// closes the http.Response Body.
761func (client DisksClient) UpdateResponder(resp *http.Response) (result Disk, err error) {
762	err = autorest.Respond(
763		resp,
764		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
765		autorest.ByUnmarshallingJSON(&result),
766		autorest.ByClosing())
767	result.Response = autorest.Response{Response: resp}
768	return
769}
770