1package managementgroups
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/tracing"
14	"net/http"
15)
16
17// Client is the the Azure Management Groups API enables consolidation of multiple
18// subscriptions/resources into an organizational hierarchy and centrally
19// manage access control, policies, alerting and reporting for those resources.
20type Client struct {
21	BaseClient
22}
23
24// NewClient creates an instance of the Client client.
25func NewClient() Client {
26	return NewClientWithBaseURI(DefaultBaseURI)
27}
28
29// NewClientWithBaseURI creates an instance of the Client client using a custom endpoint.  Use this when interacting
30// with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
31func NewClientWithBaseURI(baseURI string) Client {
32	return Client{NewWithBaseURI(baseURI)}
33}
34
35// CreateOrUpdate create or update a management group.
36// If a management group is already created and a subsequent create request is issued with different properties, the
37// management group properties will be updated.
38// Parameters:
39// groupID - management Group ID.
40// createManagementGroupRequest - management group creation parameters.
41// cacheControl - indicates that the request shouldn't utilize any caches.
42func (client Client) CreateOrUpdate(ctx context.Context, groupID string, createManagementGroupRequest CreateManagementGroupRequest, cacheControl string) (result CreateOrUpdateFuture, err error) {
43	if tracing.IsEnabled() {
44		ctx = tracing.StartSpan(ctx, fqdn+"/Client.CreateOrUpdate")
45		defer func() {
46			sc := -1
47			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
48				sc = result.FutureAPI.Response().StatusCode
49			}
50			tracing.EndSpan(ctx, sc, err)
51		}()
52	}
53	req, err := client.CreateOrUpdatePreparer(ctx, groupID, createManagementGroupRequest, cacheControl)
54	if err != nil {
55		err = autorest.NewErrorWithError(err, "managementgroups.Client", "CreateOrUpdate", nil, "Failure preparing request")
56		return
57	}
58
59	result, err = client.CreateOrUpdateSender(req)
60	if err != nil {
61		err = autorest.NewErrorWithError(err, "managementgroups.Client", "CreateOrUpdate", nil, "Failure sending request")
62		return
63	}
64
65	return
66}
67
68// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
69func (client Client) CreateOrUpdatePreparer(ctx context.Context, groupID string, createManagementGroupRequest CreateManagementGroupRequest, cacheControl string) (*http.Request, error) {
70	pathParameters := map[string]interface{}{
71		"groupId": autorest.Encode("path", groupID),
72	}
73
74	const APIVersion = "2020-02-01"
75	queryParameters := map[string]interface{}{
76		"api-version": APIVersion,
77	}
78
79	createManagementGroupRequest.ID = nil
80	createManagementGroupRequest.Type = nil
81	preparer := autorest.CreatePreparer(
82		autorest.AsContentType("application/json; charset=utf-8"),
83		autorest.AsPut(),
84		autorest.WithBaseURL(client.BaseURI),
85		autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{groupId}", pathParameters),
86		autorest.WithJSON(createManagementGroupRequest),
87		autorest.WithQueryParameters(queryParameters))
88	if len(cacheControl) > 0 {
89		preparer = autorest.DecoratePreparer(preparer,
90			autorest.WithHeader("Cache-Control", autorest.String(cacheControl)))
91	} else {
92		preparer = autorest.DecoratePreparer(preparer,
93			autorest.WithHeader("Cache-Control", autorest.String("no-cache")))
94	}
95	return preparer.Prepare((&http.Request{}).WithContext(ctx))
96}
97
98// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
99// http.Response Body if it receives an error.
100func (client Client) CreateOrUpdateSender(req *http.Request) (future CreateOrUpdateFuture, err error) {
101	var resp *http.Response
102	resp, err = client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
103	if err != nil {
104		return
105	}
106	var azf azure.Future
107	azf, err = azure.NewFutureFromResponse(resp)
108	future.FutureAPI = &azf
109	future.Result = future.result
110	return
111}
112
113// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
114// closes the http.Response Body.
115func (client Client) CreateOrUpdateResponder(resp *http.Response) (result SetObject, err error) {
116	err = autorest.Respond(
117		resp,
118		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
119		autorest.ByUnmarshallingJSON(&result),
120		autorest.ByClosing())
121	result.Response = autorest.Response{Response: resp}
122	return
123}
124
125// Delete delete management group.
126// If a management group contains child resources, the request will fail.
127// Parameters:
128// groupID - management Group ID.
129// cacheControl - indicates that the request shouldn't utilize any caches.
130func (client Client) Delete(ctx context.Context, groupID string, cacheControl string) (result DeleteFuture, err error) {
131	if tracing.IsEnabled() {
132		ctx = tracing.StartSpan(ctx, fqdn+"/Client.Delete")
133		defer func() {
134			sc := -1
135			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
136				sc = result.FutureAPI.Response().StatusCode
137			}
138			tracing.EndSpan(ctx, sc, err)
139		}()
140	}
141	req, err := client.DeletePreparer(ctx, groupID, cacheControl)
142	if err != nil {
143		err = autorest.NewErrorWithError(err, "managementgroups.Client", "Delete", nil, "Failure preparing request")
144		return
145	}
146
147	result, err = client.DeleteSender(req)
148	if err != nil {
149		err = autorest.NewErrorWithError(err, "managementgroups.Client", "Delete", nil, "Failure sending request")
150		return
151	}
152
153	return
154}
155
156// DeletePreparer prepares the Delete request.
157func (client Client) DeletePreparer(ctx context.Context, groupID string, cacheControl string) (*http.Request, error) {
158	pathParameters := map[string]interface{}{
159		"groupId": autorest.Encode("path", groupID),
160	}
161
162	const APIVersion = "2020-02-01"
163	queryParameters := map[string]interface{}{
164		"api-version": APIVersion,
165	}
166
167	preparer := autorest.CreatePreparer(
168		autorest.AsDelete(),
169		autorest.WithBaseURL(client.BaseURI),
170		autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{groupId}", pathParameters),
171		autorest.WithQueryParameters(queryParameters))
172	if len(cacheControl) > 0 {
173		preparer = autorest.DecoratePreparer(preparer,
174			autorest.WithHeader("Cache-Control", autorest.String(cacheControl)))
175	} else {
176		preparer = autorest.DecoratePreparer(preparer,
177			autorest.WithHeader("Cache-Control", autorest.String("no-cache")))
178	}
179	return preparer.Prepare((&http.Request{}).WithContext(ctx))
180}
181
182// DeleteSender sends the Delete request. The method will close the
183// http.Response Body if it receives an error.
184func (client Client) DeleteSender(req *http.Request) (future DeleteFuture, err error) {
185	var resp *http.Response
186	resp, err = client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
187	if err != nil {
188		return
189	}
190	var azf azure.Future
191	azf, err = azure.NewFutureFromResponse(resp)
192	future.FutureAPI = &azf
193	future.Result = future.result
194	return
195}
196
197// DeleteResponder handles the response to the Delete request. The method always
198// closes the http.Response Body.
199func (client Client) DeleteResponder(resp *http.Response) (result AzureAsyncOperationResults, err error) {
200	err = autorest.Respond(
201		resp,
202		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
203		autorest.ByUnmarshallingJSON(&result),
204		autorest.ByClosing())
205	result.Response = autorest.Response{Response: resp}
206	return
207}
208
209// Get get the details of the management group.
210// Parameters:
211// groupID - management Group ID.
212// expand - the $expand=children query string parameter allows clients to request inclusion of children in the
213// response payload.  $expand=path includes the path from the root group to the current group.
214// recurse - the $recurse=true query string parameter allows clients to request inclusion of entire hierarchy
215// in the response payload. Note that  $expand=children must be passed up if $recurse is set to true.
216// filter - a filter which allows the exclusion of subscriptions from results (i.e. '$filter=children.childType
217// ne Subscription')
218// cacheControl - indicates that the request shouldn't utilize any caches.
219func (client Client) Get(ctx context.Context, groupID string, expand string, recurse *bool, filter string, cacheControl string) (result ManagementGroup, err error) {
220	if tracing.IsEnabled() {
221		ctx = tracing.StartSpan(ctx, fqdn+"/Client.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, groupID, expand, recurse, filter, cacheControl)
231	if err != nil {
232		err = autorest.NewErrorWithError(err, "managementgroups.Client", "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, "managementgroups.Client", "Get", resp, "Failure sending request")
240		return
241	}
242
243	result, err = client.GetResponder(resp)
244	if err != nil {
245		err = autorest.NewErrorWithError(err, "managementgroups.Client", "Get", resp, "Failure responding to request")
246		return
247	}
248
249	return
250}
251
252// GetPreparer prepares the Get request.
253func (client Client) GetPreparer(ctx context.Context, groupID string, expand string, recurse *bool, filter string, cacheControl string) (*http.Request, error) {
254	pathParameters := map[string]interface{}{
255		"groupId": autorest.Encode("path", groupID),
256	}
257
258	const APIVersion = "2020-02-01"
259	queryParameters := map[string]interface{}{
260		"api-version": APIVersion,
261	}
262	if len(string(expand)) > 0 {
263		queryParameters["$expand"] = autorest.Encode("query", expand)
264	}
265	if recurse != nil {
266		queryParameters["$recurse"] = autorest.Encode("query", *recurse)
267	}
268	if len(filter) > 0 {
269		queryParameters["$filter"] = autorest.Encode("query", filter)
270	}
271
272	preparer := autorest.CreatePreparer(
273		autorest.AsGet(),
274		autorest.WithBaseURL(client.BaseURI),
275		autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{groupId}", pathParameters),
276		autorest.WithQueryParameters(queryParameters))
277	if len(cacheControl) > 0 {
278		preparer = autorest.DecoratePreparer(preparer,
279			autorest.WithHeader("Cache-Control", autorest.String(cacheControl)))
280	} else {
281		preparer = autorest.DecoratePreparer(preparer,
282			autorest.WithHeader("Cache-Control", autorest.String("no-cache")))
283	}
284	return preparer.Prepare((&http.Request{}).WithContext(ctx))
285}
286
287// GetSender sends the Get request. The method will close the
288// http.Response Body if it receives an error.
289func (client Client) GetSender(req *http.Request) (*http.Response, error) {
290	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
291}
292
293// GetResponder handles the response to the Get request. The method always
294// closes the http.Response Body.
295func (client Client) GetResponder(resp *http.Response) (result ManagementGroup, err error) {
296	err = autorest.Respond(
297		resp,
298		azure.WithErrorUnlessStatusCode(http.StatusOK),
299		autorest.ByUnmarshallingJSON(&result),
300		autorest.ByClosing())
301	result.Response = autorest.Response{Response: resp}
302	return
303}
304
305// GetDescendants list all entities that descend from a management group.
306// Parameters:
307// groupID - management Group ID.
308// skiptoken - page continuation token is only used if a previous operation returned a partial result.
309// If a previous response contains a nextLink element, the value of the nextLink element will include a token
310// parameter that specifies a starting point to use for subsequent calls.
311// top - number of elements to return when retrieving results. Passing this in will override $skipToken.
312func (client Client) GetDescendants(ctx context.Context, groupID string, skiptoken string, top *int32) (result DescendantListResultPage, err error) {
313	if tracing.IsEnabled() {
314		ctx = tracing.StartSpan(ctx, fqdn+"/Client.GetDescendants")
315		defer func() {
316			sc := -1
317			if result.dlr.Response.Response != nil {
318				sc = result.dlr.Response.Response.StatusCode
319			}
320			tracing.EndSpan(ctx, sc, err)
321		}()
322	}
323	result.fn = client.getDescendantsNextResults
324	req, err := client.GetDescendantsPreparer(ctx, groupID, skiptoken, top)
325	if err != nil {
326		err = autorest.NewErrorWithError(err, "managementgroups.Client", "GetDescendants", nil, "Failure preparing request")
327		return
328	}
329
330	resp, err := client.GetDescendantsSender(req)
331	if err != nil {
332		result.dlr.Response = autorest.Response{Response: resp}
333		err = autorest.NewErrorWithError(err, "managementgroups.Client", "GetDescendants", resp, "Failure sending request")
334		return
335	}
336
337	result.dlr, err = client.GetDescendantsResponder(resp)
338	if err != nil {
339		err = autorest.NewErrorWithError(err, "managementgroups.Client", "GetDescendants", resp, "Failure responding to request")
340		return
341	}
342	if result.dlr.hasNextLink() && result.dlr.IsEmpty() {
343		err = result.NextWithContext(ctx)
344		return
345	}
346
347	return
348}
349
350// GetDescendantsPreparer prepares the GetDescendants request.
351func (client Client) GetDescendantsPreparer(ctx context.Context, groupID string, skiptoken string, top *int32) (*http.Request, error) {
352	pathParameters := map[string]interface{}{
353		"groupId": autorest.Encode("path", groupID),
354	}
355
356	const APIVersion = "2020-02-01"
357	queryParameters := map[string]interface{}{
358		"api-version": APIVersion,
359	}
360	if len(skiptoken) > 0 {
361		queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken)
362	}
363	if top != nil {
364		queryParameters["$top"] = autorest.Encode("query", *top)
365	}
366
367	preparer := autorest.CreatePreparer(
368		autorest.AsGet(),
369		autorest.WithBaseURL(client.BaseURI),
370		autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{groupId}/descendants", pathParameters),
371		autorest.WithQueryParameters(queryParameters))
372	return preparer.Prepare((&http.Request{}).WithContext(ctx))
373}
374
375// GetDescendantsSender sends the GetDescendants request. The method will close the
376// http.Response Body if it receives an error.
377func (client Client) GetDescendantsSender(req *http.Request) (*http.Response, error) {
378	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
379}
380
381// GetDescendantsResponder handles the response to the GetDescendants request. The method always
382// closes the http.Response Body.
383func (client Client) GetDescendantsResponder(resp *http.Response) (result DescendantListResult, err error) {
384	err = autorest.Respond(
385		resp,
386		azure.WithErrorUnlessStatusCode(http.StatusOK),
387		autorest.ByUnmarshallingJSON(&result),
388		autorest.ByClosing())
389	result.Response = autorest.Response{Response: resp}
390	return
391}
392
393// getDescendantsNextResults retrieves the next set of results, if any.
394func (client Client) getDescendantsNextResults(ctx context.Context, lastResults DescendantListResult) (result DescendantListResult, err error) {
395	req, err := lastResults.descendantListResultPreparer(ctx)
396	if err != nil {
397		return result, autorest.NewErrorWithError(err, "managementgroups.Client", "getDescendantsNextResults", nil, "Failure preparing next results request")
398	}
399	if req == nil {
400		return
401	}
402	resp, err := client.GetDescendantsSender(req)
403	if err != nil {
404		result.Response = autorest.Response{Response: resp}
405		return result, autorest.NewErrorWithError(err, "managementgroups.Client", "getDescendantsNextResults", resp, "Failure sending next results request")
406	}
407	result, err = client.GetDescendantsResponder(resp)
408	if err != nil {
409		err = autorest.NewErrorWithError(err, "managementgroups.Client", "getDescendantsNextResults", resp, "Failure responding to next results request")
410	}
411	return
412}
413
414// GetDescendantsComplete enumerates all values, automatically crossing page boundaries as required.
415func (client Client) GetDescendantsComplete(ctx context.Context, groupID string, skiptoken string, top *int32) (result DescendantListResultIterator, err error) {
416	if tracing.IsEnabled() {
417		ctx = tracing.StartSpan(ctx, fqdn+"/Client.GetDescendants")
418		defer func() {
419			sc := -1
420			if result.Response().Response.Response != nil {
421				sc = result.page.Response().Response.Response.StatusCode
422			}
423			tracing.EndSpan(ctx, sc, err)
424		}()
425	}
426	result.page, err = client.GetDescendants(ctx, groupID, skiptoken, top)
427	return
428}
429
430// List list management groups for the authenticated user.
431// Parameters:
432// cacheControl - indicates that the request shouldn't utilize any caches.
433// skiptoken - page continuation token is only used if a previous operation returned a partial result.
434// If a previous response contains a nextLink element, the value of the nextLink element will include a token
435// parameter that specifies a starting point to use for subsequent calls.
436func (client Client) List(ctx context.Context, cacheControl string, skiptoken string) (result ListResultPage, err error) {
437	if tracing.IsEnabled() {
438		ctx = tracing.StartSpan(ctx, fqdn+"/Client.List")
439		defer func() {
440			sc := -1
441			if result.lr.Response.Response != nil {
442				sc = result.lr.Response.Response.StatusCode
443			}
444			tracing.EndSpan(ctx, sc, err)
445		}()
446	}
447	result.fn = client.listNextResults
448	req, err := client.ListPreparer(ctx, cacheControl, skiptoken)
449	if err != nil {
450		err = autorest.NewErrorWithError(err, "managementgroups.Client", "List", nil, "Failure preparing request")
451		return
452	}
453
454	resp, err := client.ListSender(req)
455	if err != nil {
456		result.lr.Response = autorest.Response{Response: resp}
457		err = autorest.NewErrorWithError(err, "managementgroups.Client", "List", resp, "Failure sending request")
458		return
459	}
460
461	result.lr, err = client.ListResponder(resp)
462	if err != nil {
463		err = autorest.NewErrorWithError(err, "managementgroups.Client", "List", resp, "Failure responding to request")
464		return
465	}
466	if result.lr.hasNextLink() && result.lr.IsEmpty() {
467		err = result.NextWithContext(ctx)
468		return
469	}
470
471	return
472}
473
474// ListPreparer prepares the List request.
475func (client Client) ListPreparer(ctx context.Context, cacheControl string, skiptoken string) (*http.Request, error) {
476	const APIVersion = "2020-02-01"
477	queryParameters := map[string]interface{}{
478		"api-version": APIVersion,
479	}
480	if len(skiptoken) > 0 {
481		queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken)
482	}
483
484	preparer := autorest.CreatePreparer(
485		autorest.AsGet(),
486		autorest.WithBaseURL(client.BaseURI),
487		autorest.WithPath("/providers/Microsoft.Management/managementGroups"),
488		autorest.WithQueryParameters(queryParameters))
489	if len(cacheControl) > 0 {
490		preparer = autorest.DecoratePreparer(preparer,
491			autorest.WithHeader("Cache-Control", autorest.String(cacheControl)))
492	} else {
493		preparer = autorest.DecoratePreparer(preparer,
494			autorest.WithHeader("Cache-Control", autorest.String("no-cache")))
495	}
496	return preparer.Prepare((&http.Request{}).WithContext(ctx))
497}
498
499// ListSender sends the List request. The method will close the
500// http.Response Body if it receives an error.
501func (client Client) ListSender(req *http.Request) (*http.Response, error) {
502	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
503}
504
505// ListResponder handles the response to the List request. The method always
506// closes the http.Response Body.
507func (client Client) ListResponder(resp *http.Response) (result ListResult, err error) {
508	err = autorest.Respond(
509		resp,
510		azure.WithErrorUnlessStatusCode(http.StatusOK),
511		autorest.ByUnmarshallingJSON(&result),
512		autorest.ByClosing())
513	result.Response = autorest.Response{Response: resp}
514	return
515}
516
517// listNextResults retrieves the next set of results, if any.
518func (client Client) listNextResults(ctx context.Context, lastResults ListResult) (result ListResult, err error) {
519	req, err := lastResults.listResultPreparer(ctx)
520	if err != nil {
521		return result, autorest.NewErrorWithError(err, "managementgroups.Client", "listNextResults", nil, "Failure preparing next results request")
522	}
523	if req == nil {
524		return
525	}
526	resp, err := client.ListSender(req)
527	if err != nil {
528		result.Response = autorest.Response{Response: resp}
529		return result, autorest.NewErrorWithError(err, "managementgroups.Client", "listNextResults", resp, "Failure sending next results request")
530	}
531	result, err = client.ListResponder(resp)
532	if err != nil {
533		err = autorest.NewErrorWithError(err, "managementgroups.Client", "listNextResults", resp, "Failure responding to next results request")
534	}
535	return
536}
537
538// ListComplete enumerates all values, automatically crossing page boundaries as required.
539func (client Client) ListComplete(ctx context.Context, cacheControl string, skiptoken string) (result ListResultIterator, err error) {
540	if tracing.IsEnabled() {
541		ctx = tracing.StartSpan(ctx, fqdn+"/Client.List")
542		defer func() {
543			sc := -1
544			if result.Response().Response.Response != nil {
545				sc = result.page.Response().Response.Response.StatusCode
546			}
547			tracing.EndSpan(ctx, sc, err)
548		}()
549	}
550	result.page, err = client.List(ctx, cacheControl, skiptoken)
551	return
552}
553
554// Update update a management group.
555// Parameters:
556// groupID - management Group ID.
557// patchGroupRequest - management group patch parameters.
558// cacheControl - indicates that the request shouldn't utilize any caches.
559func (client Client) Update(ctx context.Context, groupID string, patchGroupRequest PatchManagementGroupRequest, cacheControl string) (result ManagementGroup, err error) {
560	if tracing.IsEnabled() {
561		ctx = tracing.StartSpan(ctx, fqdn+"/Client.Update")
562		defer func() {
563			sc := -1
564			if result.Response.Response != nil {
565				sc = result.Response.Response.StatusCode
566			}
567			tracing.EndSpan(ctx, sc, err)
568		}()
569	}
570	req, err := client.UpdatePreparer(ctx, groupID, patchGroupRequest, cacheControl)
571	if err != nil {
572		err = autorest.NewErrorWithError(err, "managementgroups.Client", "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, "managementgroups.Client", "Update", resp, "Failure sending request")
580		return
581	}
582
583	result, err = client.UpdateResponder(resp)
584	if err != nil {
585		err = autorest.NewErrorWithError(err, "managementgroups.Client", "Update", resp, "Failure responding to request")
586		return
587	}
588
589	return
590}
591
592// UpdatePreparer prepares the Update request.
593func (client Client) UpdatePreparer(ctx context.Context, groupID string, patchGroupRequest PatchManagementGroupRequest, cacheControl string) (*http.Request, error) {
594	pathParameters := map[string]interface{}{
595		"groupId": autorest.Encode("path", groupID),
596	}
597
598	const APIVersion = "2020-02-01"
599	queryParameters := map[string]interface{}{
600		"api-version": APIVersion,
601	}
602
603	preparer := autorest.CreatePreparer(
604		autorest.AsContentType("application/json; charset=utf-8"),
605		autorest.AsPatch(),
606		autorest.WithBaseURL(client.BaseURI),
607		autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{groupId}", pathParameters),
608		autorest.WithJSON(patchGroupRequest),
609		autorest.WithQueryParameters(queryParameters))
610	if len(cacheControl) > 0 {
611		preparer = autorest.DecoratePreparer(preparer,
612			autorest.WithHeader("Cache-Control", autorest.String(cacheControl)))
613	} else {
614		preparer = autorest.DecoratePreparer(preparer,
615			autorest.WithHeader("Cache-Control", autorest.String("no-cache")))
616	}
617	return preparer.Prepare((&http.Request{}).WithContext(ctx))
618}
619
620// UpdateSender sends the Update request. The method will close the
621// http.Response Body if it receives an error.
622func (client Client) UpdateSender(req *http.Request) (*http.Response, error) {
623	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
624}
625
626// UpdateResponder handles the response to the Update request. The method always
627// closes the http.Response Body.
628func (client Client) UpdateResponder(resp *http.Response) (result ManagementGroup, err error) {
629	err = autorest.Respond(
630		resp,
631		azure.WithErrorUnlessStatusCode(http.StatusOK),
632		autorest.ByUnmarshallingJSON(&result),
633		autorest.ByClosing())
634	result.Response = autorest.Response{Response: resp}
635	return
636}
637