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