1package azurestackhci
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// ClustersClient is the azure Stack HCI management service
19type ClustersClient struct {
20	BaseClient
21}
22
23// NewClustersClient creates an instance of the ClustersClient client.
24func NewClustersClient(subscriptionID string) ClustersClient {
25	return NewClustersClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewClustersClientWithBaseURI creates an instance of the ClustersClient client using a custom endpoint.  Use this
29// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewClustersClientWithBaseURI(baseURI string, subscriptionID string) ClustersClient {
31	return ClustersClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// Create create an HCI cluster.
35// Parameters:
36// resourceGroupName - the name of the resource group. The name is case insensitive.
37// clusterName - the name of the cluster.
38// cluster - details of the HCI cluster.
39func (client ClustersClient) Create(ctx context.Context, resourceGroupName string, clusterName string, cluster Cluster) (result Cluster, err error) {
40	if tracing.IsEnabled() {
41		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.Create")
42		defer func() {
43			sc := -1
44			if result.Response.Response != nil {
45				sc = result.Response.Response.StatusCode
46			}
47			tracing.EndSpan(ctx, sc, err)
48		}()
49	}
50	if err := validation.Validate([]validation.Validation{
51		{TargetValue: client.SubscriptionID,
52			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
53		{TargetValue: resourceGroupName,
54			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
55				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
56				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
57		{TargetValue: cluster,
58			Constraints: []validation.Constraint{{Target: "cluster.ClusterProperties", Name: validation.Null, Rule: false,
59				Chain: []validation.Constraint{{Target: "cluster.ClusterProperties.AadClientID", Name: validation.Null, Rule: true, Chain: nil},
60					{Target: "cluster.ClusterProperties.AadTenantID", Name: validation.Null, Rule: true, Chain: nil},
61				}}}}}); err != nil {
62		return result, validation.NewError("azurestackhci.ClustersClient", "Create", err.Error())
63	}
64
65	req, err := client.CreatePreparer(ctx, resourceGroupName, clusterName, cluster)
66	if err != nil {
67		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Create", nil, "Failure preparing request")
68		return
69	}
70
71	resp, err := client.CreateSender(req)
72	if err != nil {
73		result.Response = autorest.Response{Response: resp}
74		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Create", resp, "Failure sending request")
75		return
76	}
77
78	result, err = client.CreateResponder(resp)
79	if err != nil {
80		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Create", resp, "Failure responding to request")
81		return
82	}
83
84	return
85}
86
87// CreatePreparer prepares the Create request.
88func (client ClustersClient) CreatePreparer(ctx context.Context, resourceGroupName string, clusterName string, cluster Cluster) (*http.Request, error) {
89	pathParameters := map[string]interface{}{
90		"clusterName":       autorest.Encode("path", clusterName),
91		"resourceGroupName": autorest.Encode("path", resourceGroupName),
92		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
93	}
94
95	const APIVersion = "2020-10-01"
96	queryParameters := map[string]interface{}{
97		"api-version": APIVersion,
98	}
99
100	preparer := autorest.CreatePreparer(
101		autorest.AsContentType("application/json; charset=utf-8"),
102		autorest.AsPut(),
103		autorest.WithBaseURL(client.BaseURI),
104		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AzureStackHCI/clusters/{clusterName}", pathParameters),
105		autorest.WithJSON(cluster),
106		autorest.WithQueryParameters(queryParameters))
107	return preparer.Prepare((&http.Request{}).WithContext(ctx))
108}
109
110// CreateSender sends the Create request. The method will close the
111// http.Response Body if it receives an error.
112func (client ClustersClient) CreateSender(req *http.Request) (*http.Response, error) {
113	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
114}
115
116// CreateResponder handles the response to the Create request. The method always
117// closes the http.Response Body.
118func (client ClustersClient) CreateResponder(resp *http.Response) (result Cluster, err error) {
119	err = autorest.Respond(
120		resp,
121		azure.WithErrorUnlessStatusCode(http.StatusOK),
122		autorest.ByUnmarshallingJSON(&result),
123		autorest.ByClosing())
124	result.Response = autorest.Response{Response: resp}
125	return
126}
127
128// Delete delete an HCI cluster.
129// Parameters:
130// resourceGroupName - the name of the resource group. The name is case insensitive.
131// clusterName - the name of the cluster.
132func (client ClustersClient) Delete(ctx context.Context, resourceGroupName string, clusterName string) (result autorest.Response, err error) {
133	if tracing.IsEnabled() {
134		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.Delete")
135		defer func() {
136			sc := -1
137			if result.Response != nil {
138				sc = result.Response.StatusCode
139			}
140			tracing.EndSpan(ctx, sc, err)
141		}()
142	}
143	if err := validation.Validate([]validation.Validation{
144		{TargetValue: client.SubscriptionID,
145			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
146		{TargetValue: resourceGroupName,
147			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
148				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
149				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
150		return result, validation.NewError("azurestackhci.ClustersClient", "Delete", err.Error())
151	}
152
153	req, err := client.DeletePreparer(ctx, resourceGroupName, clusterName)
154	if err != nil {
155		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Delete", nil, "Failure preparing request")
156		return
157	}
158
159	resp, err := client.DeleteSender(req)
160	if err != nil {
161		result.Response = resp
162		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Delete", resp, "Failure sending request")
163		return
164	}
165
166	result, err = client.DeleteResponder(resp)
167	if err != nil {
168		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Delete", resp, "Failure responding to request")
169		return
170	}
171
172	return
173}
174
175// DeletePreparer prepares the Delete request.
176func (client ClustersClient) DeletePreparer(ctx context.Context, resourceGroupName string, clusterName string) (*http.Request, error) {
177	pathParameters := map[string]interface{}{
178		"clusterName":       autorest.Encode("path", clusterName),
179		"resourceGroupName": autorest.Encode("path", resourceGroupName),
180		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
181	}
182
183	const APIVersion = "2020-10-01"
184	queryParameters := map[string]interface{}{
185		"api-version": APIVersion,
186	}
187
188	preparer := autorest.CreatePreparer(
189		autorest.AsDelete(),
190		autorest.WithBaseURL(client.BaseURI),
191		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AzureStackHCI/clusters/{clusterName}", pathParameters),
192		autorest.WithQueryParameters(queryParameters))
193	return preparer.Prepare((&http.Request{}).WithContext(ctx))
194}
195
196// DeleteSender sends the Delete request. The method will close the
197// http.Response Body if it receives an error.
198func (client ClustersClient) DeleteSender(req *http.Request) (*http.Response, error) {
199	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
200}
201
202// DeleteResponder handles the response to the Delete request. The method always
203// closes the http.Response Body.
204func (client ClustersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
205	err = autorest.Respond(
206		resp,
207		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent),
208		autorest.ByClosing())
209	result.Response = resp
210	return
211}
212
213// Get get HCI cluster.
214// Parameters:
215// resourceGroupName - the name of the resource group. The name is case insensitive.
216// clusterName - the name of the cluster.
217func (client ClustersClient) Get(ctx context.Context, resourceGroupName string, clusterName string) (result Cluster, err error) {
218	if tracing.IsEnabled() {
219		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.Get")
220		defer func() {
221			sc := -1
222			if result.Response.Response != nil {
223				sc = result.Response.Response.StatusCode
224			}
225			tracing.EndSpan(ctx, sc, err)
226		}()
227	}
228	if err := validation.Validate([]validation.Validation{
229		{TargetValue: client.SubscriptionID,
230			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
231		{TargetValue: resourceGroupName,
232			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
233				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
234				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
235		return result, validation.NewError("azurestackhci.ClustersClient", "Get", err.Error())
236	}
237
238	req, err := client.GetPreparer(ctx, resourceGroupName, clusterName)
239	if err != nil {
240		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Get", nil, "Failure preparing request")
241		return
242	}
243
244	resp, err := client.GetSender(req)
245	if err != nil {
246		result.Response = autorest.Response{Response: resp}
247		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Get", resp, "Failure sending request")
248		return
249	}
250
251	result, err = client.GetResponder(resp)
252	if err != nil {
253		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Get", resp, "Failure responding to request")
254		return
255	}
256
257	return
258}
259
260// GetPreparer prepares the Get request.
261func (client ClustersClient) GetPreparer(ctx context.Context, resourceGroupName string, clusterName string) (*http.Request, error) {
262	pathParameters := map[string]interface{}{
263		"clusterName":       autorest.Encode("path", clusterName),
264		"resourceGroupName": autorest.Encode("path", resourceGroupName),
265		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
266	}
267
268	const APIVersion = "2020-10-01"
269	queryParameters := map[string]interface{}{
270		"api-version": APIVersion,
271	}
272
273	preparer := autorest.CreatePreparer(
274		autorest.AsGet(),
275		autorest.WithBaseURL(client.BaseURI),
276		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AzureStackHCI/clusters/{clusterName}", pathParameters),
277		autorest.WithQueryParameters(queryParameters))
278	return preparer.Prepare((&http.Request{}).WithContext(ctx))
279}
280
281// GetSender sends the Get request. The method will close the
282// http.Response Body if it receives an error.
283func (client ClustersClient) GetSender(req *http.Request) (*http.Response, error) {
284	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
285}
286
287// GetResponder handles the response to the Get request. The method always
288// closes the http.Response Body.
289func (client ClustersClient) GetResponder(resp *http.Response) (result Cluster, err error) {
290	err = autorest.Respond(
291		resp,
292		azure.WithErrorUnlessStatusCode(http.StatusOK),
293		autorest.ByUnmarshallingJSON(&result),
294		autorest.ByClosing())
295	result.Response = autorest.Response{Response: resp}
296	return
297}
298
299// ListByResourceGroup list all HCI clusters in a resource group.
300// Parameters:
301// resourceGroupName - the name of the resource group. The name is case insensitive.
302func (client ClustersClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ClusterListPage, err error) {
303	if tracing.IsEnabled() {
304		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.ListByResourceGroup")
305		defer func() {
306			sc := -1
307			if result.cl.Response.Response != nil {
308				sc = result.cl.Response.Response.StatusCode
309			}
310			tracing.EndSpan(ctx, sc, err)
311		}()
312	}
313	if err := validation.Validate([]validation.Validation{
314		{TargetValue: client.SubscriptionID,
315			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
316		{TargetValue: resourceGroupName,
317			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
318				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
319				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
320		return result, validation.NewError("azurestackhci.ClustersClient", "ListByResourceGroup", err.Error())
321	}
322
323	result.fn = client.listByResourceGroupNextResults
324	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
325	if err != nil {
326		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "ListByResourceGroup", nil, "Failure preparing request")
327		return
328	}
329
330	resp, err := client.ListByResourceGroupSender(req)
331	if err != nil {
332		result.cl.Response = autorest.Response{Response: resp}
333		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "ListByResourceGroup", resp, "Failure sending request")
334		return
335	}
336
337	result.cl, err = client.ListByResourceGroupResponder(resp)
338	if err != nil {
339		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "ListByResourceGroup", resp, "Failure responding to request")
340		return
341	}
342	if result.cl.hasNextLink() && result.cl.IsEmpty() {
343		err = result.NextWithContext(ctx)
344		return
345	}
346
347	return
348}
349
350// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
351func (client ClustersClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
352	pathParameters := map[string]interface{}{
353		"resourceGroupName": autorest.Encode("path", resourceGroupName),
354		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
355	}
356
357	const APIVersion = "2020-10-01"
358	queryParameters := map[string]interface{}{
359		"api-version": APIVersion,
360	}
361
362	preparer := autorest.CreatePreparer(
363		autorest.AsGet(),
364		autorest.WithBaseURL(client.BaseURI),
365		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AzureStackHCI/clusters", pathParameters),
366		autorest.WithQueryParameters(queryParameters))
367	return preparer.Prepare((&http.Request{}).WithContext(ctx))
368}
369
370// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
371// http.Response Body if it receives an error.
372func (client ClustersClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
373	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
374}
375
376// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
377// closes the http.Response Body.
378func (client ClustersClient) ListByResourceGroupResponder(resp *http.Response) (result ClusterList, err error) {
379	err = autorest.Respond(
380		resp,
381		azure.WithErrorUnlessStatusCode(http.StatusOK),
382		autorest.ByUnmarshallingJSON(&result),
383		autorest.ByClosing())
384	result.Response = autorest.Response{Response: resp}
385	return
386}
387
388// listByResourceGroupNextResults retrieves the next set of results, if any.
389func (client ClustersClient) listByResourceGroupNextResults(ctx context.Context, lastResults ClusterList) (result ClusterList, err error) {
390	req, err := lastResults.clusterListPreparer(ctx)
391	if err != nil {
392		return result, autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
393	}
394	if req == nil {
395		return
396	}
397	resp, err := client.ListByResourceGroupSender(req)
398	if err != nil {
399		result.Response = autorest.Response{Response: resp}
400		return result, autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "listByResourceGroupNextResults", resp, "Failure sending next results request")
401	}
402	result, err = client.ListByResourceGroupResponder(resp)
403	if err != nil {
404		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
405	}
406	return
407}
408
409// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
410func (client ClustersClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ClusterListIterator, err error) {
411	if tracing.IsEnabled() {
412		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.ListByResourceGroup")
413		defer func() {
414			sc := -1
415			if result.Response().Response.Response != nil {
416				sc = result.page.Response().Response.Response.StatusCode
417			}
418			tracing.EndSpan(ctx, sc, err)
419		}()
420	}
421	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
422	return
423}
424
425// ListBySubscription list all HCI clusters in a subscription.
426func (client ClustersClient) ListBySubscription(ctx context.Context) (result ClusterListPage, err error) {
427	if tracing.IsEnabled() {
428		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.ListBySubscription")
429		defer func() {
430			sc := -1
431			if result.cl.Response.Response != nil {
432				sc = result.cl.Response.Response.StatusCode
433			}
434			tracing.EndSpan(ctx, sc, err)
435		}()
436	}
437	if err := validation.Validate([]validation.Validation{
438		{TargetValue: client.SubscriptionID,
439			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
440		return result, validation.NewError("azurestackhci.ClustersClient", "ListBySubscription", err.Error())
441	}
442
443	result.fn = client.listBySubscriptionNextResults
444	req, err := client.ListBySubscriptionPreparer(ctx)
445	if err != nil {
446		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "ListBySubscription", nil, "Failure preparing request")
447		return
448	}
449
450	resp, err := client.ListBySubscriptionSender(req)
451	if err != nil {
452		result.cl.Response = autorest.Response{Response: resp}
453		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "ListBySubscription", resp, "Failure sending request")
454		return
455	}
456
457	result.cl, err = client.ListBySubscriptionResponder(resp)
458	if err != nil {
459		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "ListBySubscription", resp, "Failure responding to request")
460		return
461	}
462	if result.cl.hasNextLink() && result.cl.IsEmpty() {
463		err = result.NextWithContext(ctx)
464		return
465	}
466
467	return
468}
469
470// ListBySubscriptionPreparer prepares the ListBySubscription request.
471func (client ClustersClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) {
472	pathParameters := map[string]interface{}{
473		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
474	}
475
476	const APIVersion = "2020-10-01"
477	queryParameters := map[string]interface{}{
478		"api-version": APIVersion,
479	}
480
481	preparer := autorest.CreatePreparer(
482		autorest.AsGet(),
483		autorest.WithBaseURL(client.BaseURI),
484		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.AzureStackHCI/clusters", pathParameters),
485		autorest.WithQueryParameters(queryParameters))
486	return preparer.Prepare((&http.Request{}).WithContext(ctx))
487}
488
489// ListBySubscriptionSender sends the ListBySubscription request. The method will close the
490// http.Response Body if it receives an error.
491func (client ClustersClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) {
492	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
493}
494
495// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always
496// closes the http.Response Body.
497func (client ClustersClient) ListBySubscriptionResponder(resp *http.Response) (result ClusterList, err error) {
498	err = autorest.Respond(
499		resp,
500		azure.WithErrorUnlessStatusCode(http.StatusOK),
501		autorest.ByUnmarshallingJSON(&result),
502		autorest.ByClosing())
503	result.Response = autorest.Response{Response: resp}
504	return
505}
506
507// listBySubscriptionNextResults retrieves the next set of results, if any.
508func (client ClustersClient) listBySubscriptionNextResults(ctx context.Context, lastResults ClusterList) (result ClusterList, err error) {
509	req, err := lastResults.clusterListPreparer(ctx)
510	if err != nil {
511		return result, autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request")
512	}
513	if req == nil {
514		return
515	}
516	resp, err := client.ListBySubscriptionSender(req)
517	if err != nil {
518		result.Response = autorest.Response{Response: resp}
519		return result, autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "listBySubscriptionNextResults", resp, "Failure sending next results request")
520	}
521	result, err = client.ListBySubscriptionResponder(resp)
522	if err != nil {
523		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request")
524	}
525	return
526}
527
528// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required.
529func (client ClustersClient) ListBySubscriptionComplete(ctx context.Context) (result ClusterListIterator, err error) {
530	if tracing.IsEnabled() {
531		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.ListBySubscription")
532		defer func() {
533			sc := -1
534			if result.Response().Response.Response != nil {
535				sc = result.page.Response().Response.Response.StatusCode
536			}
537			tracing.EndSpan(ctx, sc, err)
538		}()
539	}
540	result.page, err = client.ListBySubscription(ctx)
541	return
542}
543
544// Update update an HCI cluster.
545// Parameters:
546// resourceGroupName - the name of the resource group. The name is case insensitive.
547// clusterName - the name of the cluster.
548// cluster - details of the HCI cluster.
549func (client ClustersClient) Update(ctx context.Context, resourceGroupName string, clusterName string, cluster ClusterUpdate) (result Cluster, err error) {
550	if tracing.IsEnabled() {
551		ctx = tracing.StartSpan(ctx, fqdn+"/ClustersClient.Update")
552		defer func() {
553			sc := -1
554			if result.Response.Response != nil {
555				sc = result.Response.Response.StatusCode
556			}
557			tracing.EndSpan(ctx, sc, err)
558		}()
559	}
560	if err := validation.Validate([]validation.Validation{
561		{TargetValue: client.SubscriptionID,
562			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
563		{TargetValue: resourceGroupName,
564			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
565				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
566				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
567		return result, validation.NewError("azurestackhci.ClustersClient", "Update", err.Error())
568	}
569
570	req, err := client.UpdatePreparer(ctx, resourceGroupName, clusterName, cluster)
571	if err != nil {
572		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Update", nil, "Failure preparing request")
573		return
574	}
575
576	resp, err := client.UpdateSender(req)
577	if err != nil {
578		result.Response = autorest.Response{Response: resp}
579		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Update", resp, "Failure sending request")
580		return
581	}
582
583	result, err = client.UpdateResponder(resp)
584	if err != nil {
585		err = autorest.NewErrorWithError(err, "azurestackhci.ClustersClient", "Update", resp, "Failure responding to request")
586		return
587	}
588
589	return
590}
591
592// UpdatePreparer prepares the Update request.
593func (client ClustersClient) UpdatePreparer(ctx context.Context, resourceGroupName string, clusterName string, cluster ClusterUpdate) (*http.Request, error) {
594	pathParameters := map[string]interface{}{
595		"clusterName":       autorest.Encode("path", clusterName),
596		"resourceGroupName": autorest.Encode("path", resourceGroupName),
597		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
598	}
599
600	const APIVersion = "2020-10-01"
601	queryParameters := map[string]interface{}{
602		"api-version": APIVersion,
603	}
604
605	preparer := autorest.CreatePreparer(
606		autorest.AsContentType("application/json; charset=utf-8"),
607		autorest.AsPatch(),
608		autorest.WithBaseURL(client.BaseURI),
609		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AzureStackHCI/clusters/{clusterName}", pathParameters),
610		autorest.WithJSON(cluster),
611		autorest.WithQueryParameters(queryParameters))
612	return preparer.Prepare((&http.Request{}).WithContext(ctx))
613}
614
615// UpdateSender sends the Update request. The method will close the
616// http.Response Body if it receives an error.
617func (client ClustersClient) UpdateSender(req *http.Request) (*http.Response, error) {
618	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
619}
620
621// UpdateResponder handles the response to the Update request. The method always
622// closes the http.Response Body.
623func (client ClustersClient) UpdateResponder(resp *http.Response) (result Cluster, err error) {
624	err = autorest.Respond(
625		resp,
626		azure.WithErrorUnlessStatusCode(http.StatusOK),
627		autorest.ByUnmarshallingJSON(&result),
628		autorest.ByClosing())
629	result.Response = autorest.Response{Response: resp}
630	return
631}
632