1// Package managementgroups implements the Azure ARM Managementgroups service API version 2018-03-01-preview.
2//
3// The Azure Management Groups API enables consolidation of multiple subscriptions/resources into an organizational
4// hierarchy and centrally manage access control, policies, alerting and reporting for those resources.
5package managementgroups
6
7// Copyright (c) Microsoft Corporation. All rights reserved.
8// Licensed under the MIT License. See License.txt in the project root for license information.
9//
10// Code generated by Microsoft (R) AutoRest Code Generator.
11// Changes may cause incorrect behavior and will be lost if the code is regenerated.
12
13import (
14	"context"
15	"github.com/Azure/go-autorest/autorest"
16	"github.com/Azure/go-autorest/autorest/azure"
17	"github.com/Azure/go-autorest/tracing"
18	"net/http"
19)
20
21const (
22	// DefaultBaseURI is the default URI used for the service Managementgroups
23	DefaultBaseURI = "https://management.azure.com"
24)
25
26// BaseClient is the base client for Managementgroups.
27type BaseClient struct {
28	autorest.Client
29	BaseURI string
30}
31
32// New creates an instance of the BaseClient client.
33func New() BaseClient {
34	return NewWithBaseURI(DefaultBaseURI)
35}
36
37// NewWithBaseURI creates an instance of the BaseClient client using a custom endpoint.  Use this when interacting with
38// an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
39func NewWithBaseURI(baseURI string) BaseClient {
40	return BaseClient{
41		Client:  autorest.NewClientWithUserAgent(UserAgent()),
42		BaseURI: baseURI,
43	}
44}
45
46// CheckNameAvailability checks if the specified management group name is valid and unique
47// Parameters:
48// checkNameAvailabilityRequest - management group name availability check parameters.
49func (client BaseClient) CheckNameAvailability(ctx context.Context, checkNameAvailabilityRequest CheckNameAvailabilityRequest) (result CheckNameAvailabilityResult, err error) {
50	if tracing.IsEnabled() {
51		ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.CheckNameAvailability")
52		defer func() {
53			sc := -1
54			if result.Response.Response != nil {
55				sc = result.Response.Response.StatusCode
56			}
57			tracing.EndSpan(ctx, sc, err)
58		}()
59	}
60	req, err := client.CheckNameAvailabilityPreparer(ctx, checkNameAvailabilityRequest)
61	if err != nil {
62		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "CheckNameAvailability", nil, "Failure preparing request")
63		return
64	}
65
66	resp, err := client.CheckNameAvailabilitySender(req)
67	if err != nil {
68		result.Response = autorest.Response{Response: resp}
69		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "CheckNameAvailability", resp, "Failure sending request")
70		return
71	}
72
73	result, err = client.CheckNameAvailabilityResponder(resp)
74	if err != nil {
75		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "CheckNameAvailability", resp, "Failure responding to request")
76		return
77	}
78
79	return
80}
81
82// CheckNameAvailabilityPreparer prepares the CheckNameAvailability request.
83func (client BaseClient) CheckNameAvailabilityPreparer(ctx context.Context, checkNameAvailabilityRequest CheckNameAvailabilityRequest) (*http.Request, error) {
84	const APIVersion = "2018-03-01-preview"
85	queryParameters := map[string]interface{}{
86		"api-version": APIVersion,
87	}
88
89	preparer := autorest.CreatePreparer(
90		autorest.AsContentType("application/json; charset=utf-8"),
91		autorest.AsPost(),
92		autorest.WithBaseURL(client.BaseURI),
93		autorest.WithPath("/providers/Microsoft.Management/checkNameAvailability"),
94		autorest.WithJSON(checkNameAvailabilityRequest),
95		autorest.WithQueryParameters(queryParameters))
96	return preparer.Prepare((&http.Request{}).WithContext(ctx))
97}
98
99// CheckNameAvailabilitySender sends the CheckNameAvailability request. The method will close the
100// http.Response Body if it receives an error.
101func (client BaseClient) CheckNameAvailabilitySender(req *http.Request) (*http.Response, error) {
102	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
103}
104
105// CheckNameAvailabilityResponder handles the response to the CheckNameAvailability request. The method always
106// closes the http.Response Body.
107func (client BaseClient) CheckNameAvailabilityResponder(resp *http.Response) (result CheckNameAvailabilityResult, err error) {
108	err = autorest.Respond(
109		resp,
110		azure.WithErrorUnlessStatusCode(http.StatusOK),
111		autorest.ByUnmarshallingJSON(&result),
112		autorest.ByClosing())
113	result.Response = autorest.Response{Response: resp}
114	return
115}
116
117// StartTenantBackfill starts backfilling subscriptions for the Tenant.
118func (client BaseClient) StartTenantBackfill(ctx context.Context) (result TenantBackfillStatusResult, err error) {
119	if tracing.IsEnabled() {
120		ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.StartTenantBackfill")
121		defer func() {
122			sc := -1
123			if result.Response.Response != nil {
124				sc = result.Response.Response.StatusCode
125			}
126			tracing.EndSpan(ctx, sc, err)
127		}()
128	}
129	req, err := client.StartTenantBackfillPreparer(ctx)
130	if err != nil {
131		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "StartTenantBackfill", nil, "Failure preparing request")
132		return
133	}
134
135	resp, err := client.StartTenantBackfillSender(req)
136	if err != nil {
137		result.Response = autorest.Response{Response: resp}
138		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "StartTenantBackfill", resp, "Failure sending request")
139		return
140	}
141
142	result, err = client.StartTenantBackfillResponder(resp)
143	if err != nil {
144		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "StartTenantBackfill", resp, "Failure responding to request")
145		return
146	}
147
148	return
149}
150
151// StartTenantBackfillPreparer prepares the StartTenantBackfill request.
152func (client BaseClient) StartTenantBackfillPreparer(ctx context.Context) (*http.Request, error) {
153	const APIVersion = "2018-03-01-preview"
154	queryParameters := map[string]interface{}{
155		"api-version": APIVersion,
156	}
157
158	preparer := autorest.CreatePreparer(
159		autorest.AsPost(),
160		autorest.WithBaseURL(client.BaseURI),
161		autorest.WithPath("/providers/Microsoft.Management/startTenantBackfill"),
162		autorest.WithQueryParameters(queryParameters))
163	return preparer.Prepare((&http.Request{}).WithContext(ctx))
164}
165
166// StartTenantBackfillSender sends the StartTenantBackfill request. The method will close the
167// http.Response Body if it receives an error.
168func (client BaseClient) StartTenantBackfillSender(req *http.Request) (*http.Response, error) {
169	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
170}
171
172// StartTenantBackfillResponder handles the response to the StartTenantBackfill request. The method always
173// closes the http.Response Body.
174func (client BaseClient) StartTenantBackfillResponder(resp *http.Response) (result TenantBackfillStatusResult, err error) {
175	err = autorest.Respond(
176		resp,
177		azure.WithErrorUnlessStatusCode(http.StatusOK),
178		autorest.ByUnmarshallingJSON(&result),
179		autorest.ByClosing())
180	result.Response = autorest.Response{Response: resp}
181	return
182}
183
184// TenantBackfillStatus gets tenant backfill status
185func (client BaseClient) TenantBackfillStatus(ctx context.Context) (result TenantBackfillStatusResult, err error) {
186	if tracing.IsEnabled() {
187		ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.TenantBackfillStatus")
188		defer func() {
189			sc := -1
190			if result.Response.Response != nil {
191				sc = result.Response.Response.StatusCode
192			}
193			tracing.EndSpan(ctx, sc, err)
194		}()
195	}
196	req, err := client.TenantBackfillStatusPreparer(ctx)
197	if err != nil {
198		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "TenantBackfillStatus", nil, "Failure preparing request")
199		return
200	}
201
202	resp, err := client.TenantBackfillStatusSender(req)
203	if err != nil {
204		result.Response = autorest.Response{Response: resp}
205		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "TenantBackfillStatus", resp, "Failure sending request")
206		return
207	}
208
209	result, err = client.TenantBackfillStatusResponder(resp)
210	if err != nil {
211		err = autorest.NewErrorWithError(err, "managementgroups.BaseClient", "TenantBackfillStatus", resp, "Failure responding to request")
212		return
213	}
214
215	return
216}
217
218// TenantBackfillStatusPreparer prepares the TenantBackfillStatus request.
219func (client BaseClient) TenantBackfillStatusPreparer(ctx context.Context) (*http.Request, error) {
220	const APIVersion = "2018-03-01-preview"
221	queryParameters := map[string]interface{}{
222		"api-version": APIVersion,
223	}
224
225	preparer := autorest.CreatePreparer(
226		autorest.AsPost(),
227		autorest.WithBaseURL(client.BaseURI),
228		autorest.WithPath("/providers/Microsoft.Management/tenantBackfillStatus"),
229		autorest.WithQueryParameters(queryParameters))
230	return preparer.Prepare((&http.Request{}).WithContext(ctx))
231}
232
233// TenantBackfillStatusSender sends the TenantBackfillStatus request. The method will close the
234// http.Response Body if it receives an error.
235func (client BaseClient) TenantBackfillStatusSender(req *http.Request) (*http.Response, error) {
236	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
237}
238
239// TenantBackfillStatusResponder handles the response to the TenantBackfillStatus request. The method always
240// closes the http.Response Body.
241func (client BaseClient) TenantBackfillStatusResponder(resp *http.Response) (result TenantBackfillStatusResult, err error) {
242	err = autorest.Respond(
243		resp,
244		azure.WithErrorUnlessStatusCode(http.StatusOK),
245		autorest.ByUnmarshallingJSON(&result),
246		autorest.ByClosing())
247	result.Response = autorest.Response{Response: resp}
248	return
249}
250