1package sql
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/tracing"
25	"net/http"
26)
27
28// VirtualClustersClient is the the Azure SQL Database management API provides a RESTful set of web services that
29// interact with Azure SQL Database services to manage your databases. The API enables you to create, retrieve, update,
30// and delete databases.
31type VirtualClustersClient struct {
32	BaseClient
33}
34
35// NewVirtualClustersClient creates an instance of the VirtualClustersClient client.
36func NewVirtualClustersClient(subscriptionID string) VirtualClustersClient {
37	return NewVirtualClustersClientWithBaseURI(DefaultBaseURI, subscriptionID)
38}
39
40// NewVirtualClustersClientWithBaseURI creates an instance of the VirtualClustersClient client.
41func NewVirtualClustersClientWithBaseURI(baseURI string, subscriptionID string) VirtualClustersClient {
42	return VirtualClustersClient{NewWithBaseURI(baseURI, subscriptionID)}
43}
44
45// Delete deletes a virtual cluster.
46// Parameters:
47// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
48// from the Azure Resource Manager API or the portal.
49// virtualClusterName - the name of the virtual cluster.
50func (client VirtualClustersClient) Delete(ctx context.Context, resourceGroupName string, virtualClusterName string) (result VirtualClustersDeleteFuture, err error) {
51	if tracing.IsEnabled() {
52		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.Delete")
53		defer func() {
54			sc := -1
55			if result.Response() != nil {
56				sc = result.Response().StatusCode
57			}
58			tracing.EndSpan(ctx, sc, err)
59		}()
60	}
61	req, err := client.DeletePreparer(ctx, resourceGroupName, virtualClusterName)
62	if err != nil {
63		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Delete", nil, "Failure preparing request")
64		return
65	}
66
67	result, err = client.DeleteSender(req)
68	if err != nil {
69		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Delete", result.Response(), "Failure sending request")
70		return
71	}
72
73	return
74}
75
76// DeletePreparer prepares the Delete request.
77func (client VirtualClustersClient) DeletePreparer(ctx context.Context, resourceGroupName string, virtualClusterName string) (*http.Request, error) {
78	pathParameters := map[string]interface{}{
79		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
80		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
81		"virtualClusterName": autorest.Encode("path", virtualClusterName),
82	}
83
84	const APIVersion = "2015-05-01-preview"
85	queryParameters := map[string]interface{}{
86		"api-version": APIVersion,
87	}
88
89	preparer := autorest.CreatePreparer(
90		autorest.AsDelete(),
91		autorest.WithBaseURL(client.BaseURI),
92		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/virtualClusters/{virtualClusterName}", pathParameters),
93		autorest.WithQueryParameters(queryParameters))
94	return preparer.Prepare((&http.Request{}).WithContext(ctx))
95}
96
97// DeleteSender sends the Delete request. The method will close the
98// http.Response Body if it receives an error.
99func (client VirtualClustersClient) DeleteSender(req *http.Request) (future VirtualClustersDeleteFuture, err error) {
100	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
101	var resp *http.Response
102	resp, err = autorest.SendWithSender(client, req, sd...)
103	if err != nil {
104		return
105	}
106	future.Future, err = azure.NewFutureFromResponse(resp)
107	return
108}
109
110// DeleteResponder handles the response to the Delete request. The method always
111// closes the http.Response Body.
112func (client VirtualClustersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
113	err = autorest.Respond(
114		resp,
115		client.ByInspecting(),
116		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
117		autorest.ByClosing())
118	result.Response = resp
119	return
120}
121
122// Get gets a virtual cluster.
123// Parameters:
124// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
125// from the Azure Resource Manager API or the portal.
126// virtualClusterName - the name of the virtual cluster.
127func (client VirtualClustersClient) Get(ctx context.Context, resourceGroupName string, virtualClusterName string) (result VirtualCluster, err error) {
128	if tracing.IsEnabled() {
129		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.Get")
130		defer func() {
131			sc := -1
132			if result.Response.Response != nil {
133				sc = result.Response.Response.StatusCode
134			}
135			tracing.EndSpan(ctx, sc, err)
136		}()
137	}
138	req, err := client.GetPreparer(ctx, resourceGroupName, virtualClusterName)
139	if err != nil {
140		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Get", nil, "Failure preparing request")
141		return
142	}
143
144	resp, err := client.GetSender(req)
145	if err != nil {
146		result.Response = autorest.Response{Response: resp}
147		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Get", resp, "Failure sending request")
148		return
149	}
150
151	result, err = client.GetResponder(resp)
152	if err != nil {
153		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Get", resp, "Failure responding to request")
154	}
155
156	return
157}
158
159// GetPreparer prepares the Get request.
160func (client VirtualClustersClient) GetPreparer(ctx context.Context, resourceGroupName string, virtualClusterName string) (*http.Request, error) {
161	pathParameters := map[string]interface{}{
162		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
163		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
164		"virtualClusterName": autorest.Encode("path", virtualClusterName),
165	}
166
167	const APIVersion = "2015-05-01-preview"
168	queryParameters := map[string]interface{}{
169		"api-version": APIVersion,
170	}
171
172	preparer := autorest.CreatePreparer(
173		autorest.AsGet(),
174		autorest.WithBaseURL(client.BaseURI),
175		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/virtualClusters/{virtualClusterName}", pathParameters),
176		autorest.WithQueryParameters(queryParameters))
177	return preparer.Prepare((&http.Request{}).WithContext(ctx))
178}
179
180// GetSender sends the Get request. The method will close the
181// http.Response Body if it receives an error.
182func (client VirtualClustersClient) GetSender(req *http.Request) (*http.Response, error) {
183	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
184	return autorest.SendWithSender(client, req, sd...)
185}
186
187// GetResponder handles the response to the Get request. The method always
188// closes the http.Response Body.
189func (client VirtualClustersClient) GetResponder(resp *http.Response) (result VirtualCluster, err error) {
190	err = autorest.Respond(
191		resp,
192		client.ByInspecting(),
193		azure.WithErrorUnlessStatusCode(http.StatusOK),
194		autorest.ByUnmarshallingJSON(&result),
195		autorest.ByClosing())
196	result.Response = autorest.Response{Response: resp}
197	return
198}
199
200// List gets a list of all virtualClusters in the subscription.
201func (client VirtualClustersClient) List(ctx context.Context) (result VirtualClusterListResultPage, err error) {
202	if tracing.IsEnabled() {
203		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.List")
204		defer func() {
205			sc := -1
206			if result.vclr.Response.Response != nil {
207				sc = result.vclr.Response.Response.StatusCode
208			}
209			tracing.EndSpan(ctx, sc, err)
210		}()
211	}
212	result.fn = client.listNextResults
213	req, err := client.ListPreparer(ctx)
214	if err != nil {
215		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "List", nil, "Failure preparing request")
216		return
217	}
218
219	resp, err := client.ListSender(req)
220	if err != nil {
221		result.vclr.Response = autorest.Response{Response: resp}
222		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "List", resp, "Failure sending request")
223		return
224	}
225
226	result.vclr, err = client.ListResponder(resp)
227	if err != nil {
228		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "List", resp, "Failure responding to request")
229	}
230
231	return
232}
233
234// ListPreparer prepares the List request.
235func (client VirtualClustersClient) ListPreparer(ctx context.Context) (*http.Request, error) {
236	pathParameters := map[string]interface{}{
237		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
238	}
239
240	const APIVersion = "2015-05-01-preview"
241	queryParameters := map[string]interface{}{
242		"api-version": APIVersion,
243	}
244
245	preparer := autorest.CreatePreparer(
246		autorest.AsGet(),
247		autorest.WithBaseURL(client.BaseURI),
248		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Sql/virtualClusters", pathParameters),
249		autorest.WithQueryParameters(queryParameters))
250	return preparer.Prepare((&http.Request{}).WithContext(ctx))
251}
252
253// ListSender sends the List request. The method will close the
254// http.Response Body if it receives an error.
255func (client VirtualClustersClient) ListSender(req *http.Request) (*http.Response, error) {
256	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
257	return autorest.SendWithSender(client, req, sd...)
258}
259
260// ListResponder handles the response to the List request. The method always
261// closes the http.Response Body.
262func (client VirtualClustersClient) ListResponder(resp *http.Response) (result VirtualClusterListResult, err error) {
263	err = autorest.Respond(
264		resp,
265		client.ByInspecting(),
266		azure.WithErrorUnlessStatusCode(http.StatusOK),
267		autorest.ByUnmarshallingJSON(&result),
268		autorest.ByClosing())
269	result.Response = autorest.Response{Response: resp}
270	return
271}
272
273// listNextResults retrieves the next set of results, if any.
274func (client VirtualClustersClient) listNextResults(ctx context.Context, lastResults VirtualClusterListResult) (result VirtualClusterListResult, err error) {
275	req, err := lastResults.virtualClusterListResultPreparer(ctx)
276	if err != nil {
277		return result, autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "listNextResults", nil, "Failure preparing next results request")
278	}
279	if req == nil {
280		return
281	}
282	resp, err := client.ListSender(req)
283	if err != nil {
284		result.Response = autorest.Response{Response: resp}
285		return result, autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "listNextResults", resp, "Failure sending next results request")
286	}
287	result, err = client.ListResponder(resp)
288	if err != nil {
289		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "listNextResults", resp, "Failure responding to next results request")
290	}
291	return
292}
293
294// ListComplete enumerates all values, automatically crossing page boundaries as required.
295func (client VirtualClustersClient) ListComplete(ctx context.Context) (result VirtualClusterListResultIterator, err error) {
296	if tracing.IsEnabled() {
297		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.List")
298		defer func() {
299			sc := -1
300			if result.Response().Response.Response != nil {
301				sc = result.page.Response().Response.Response.StatusCode
302			}
303			tracing.EndSpan(ctx, sc, err)
304		}()
305	}
306	result.page, err = client.List(ctx)
307	return
308}
309
310// ListByResourceGroup gets a list of virtual clusters in a resource group.
311// Parameters:
312// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
313// from the Azure Resource Manager API or the portal.
314func (client VirtualClustersClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result VirtualClusterListResultPage, err error) {
315	if tracing.IsEnabled() {
316		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.ListByResourceGroup")
317		defer func() {
318			sc := -1
319			if result.vclr.Response.Response != nil {
320				sc = result.vclr.Response.Response.StatusCode
321			}
322			tracing.EndSpan(ctx, sc, err)
323		}()
324	}
325	result.fn = client.listByResourceGroupNextResults
326	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
327	if err != nil {
328		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "ListByResourceGroup", nil, "Failure preparing request")
329		return
330	}
331
332	resp, err := client.ListByResourceGroupSender(req)
333	if err != nil {
334		result.vclr.Response = autorest.Response{Response: resp}
335		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "ListByResourceGroup", resp, "Failure sending request")
336		return
337	}
338
339	result.vclr, err = client.ListByResourceGroupResponder(resp)
340	if err != nil {
341		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "ListByResourceGroup", resp, "Failure responding to request")
342	}
343
344	return
345}
346
347// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
348func (client VirtualClustersClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
349	pathParameters := map[string]interface{}{
350		"resourceGroupName": autorest.Encode("path", resourceGroupName),
351		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
352	}
353
354	const APIVersion = "2015-05-01-preview"
355	queryParameters := map[string]interface{}{
356		"api-version": APIVersion,
357	}
358
359	preparer := autorest.CreatePreparer(
360		autorest.AsGet(),
361		autorest.WithBaseURL(client.BaseURI),
362		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/virtualClusters", pathParameters),
363		autorest.WithQueryParameters(queryParameters))
364	return preparer.Prepare((&http.Request{}).WithContext(ctx))
365}
366
367// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
368// http.Response Body if it receives an error.
369func (client VirtualClustersClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
370	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
371	return autorest.SendWithSender(client, req, sd...)
372}
373
374// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
375// closes the http.Response Body.
376func (client VirtualClustersClient) ListByResourceGroupResponder(resp *http.Response) (result VirtualClusterListResult, err error) {
377	err = autorest.Respond(
378		resp,
379		client.ByInspecting(),
380		azure.WithErrorUnlessStatusCode(http.StatusOK),
381		autorest.ByUnmarshallingJSON(&result),
382		autorest.ByClosing())
383	result.Response = autorest.Response{Response: resp}
384	return
385}
386
387// listByResourceGroupNextResults retrieves the next set of results, if any.
388func (client VirtualClustersClient) listByResourceGroupNextResults(ctx context.Context, lastResults VirtualClusterListResult) (result VirtualClusterListResult, err error) {
389	req, err := lastResults.virtualClusterListResultPreparer(ctx)
390	if err != nil {
391		return result, autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
392	}
393	if req == nil {
394		return
395	}
396	resp, err := client.ListByResourceGroupSender(req)
397	if err != nil {
398		result.Response = autorest.Response{Response: resp}
399		return result, autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "listByResourceGroupNextResults", resp, "Failure sending next results request")
400	}
401	result, err = client.ListByResourceGroupResponder(resp)
402	if err != nil {
403		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
404	}
405	return
406}
407
408// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
409func (client VirtualClustersClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result VirtualClusterListResultIterator, err error) {
410	if tracing.IsEnabled() {
411		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.ListByResourceGroup")
412		defer func() {
413			sc := -1
414			if result.Response().Response.Response != nil {
415				sc = result.page.Response().Response.Response.StatusCode
416			}
417			tracing.EndSpan(ctx, sc, err)
418		}()
419	}
420	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
421	return
422}
423
424// Update updates a virtual cluster.
425// Parameters:
426// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
427// from the Azure Resource Manager API or the portal.
428// virtualClusterName - the name of the virtual cluster.
429// parameters - the requested managed instance resource state.
430func (client VirtualClustersClient) Update(ctx context.Context, resourceGroupName string, virtualClusterName string, parameters VirtualClusterUpdate) (result VirtualClustersUpdateFuture, err error) {
431	if tracing.IsEnabled() {
432		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualClustersClient.Update")
433		defer func() {
434			sc := -1
435			if result.Response() != nil {
436				sc = result.Response().StatusCode
437			}
438			tracing.EndSpan(ctx, sc, err)
439		}()
440	}
441	req, err := client.UpdatePreparer(ctx, resourceGroupName, virtualClusterName, parameters)
442	if err != nil {
443		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Update", nil, "Failure preparing request")
444		return
445	}
446
447	result, err = client.UpdateSender(req)
448	if err != nil {
449		err = autorest.NewErrorWithError(err, "sql.VirtualClustersClient", "Update", result.Response(), "Failure sending request")
450		return
451	}
452
453	return
454}
455
456// UpdatePreparer prepares the Update request.
457func (client VirtualClustersClient) UpdatePreparer(ctx context.Context, resourceGroupName string, virtualClusterName string, parameters VirtualClusterUpdate) (*http.Request, error) {
458	pathParameters := map[string]interface{}{
459		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
460		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
461		"virtualClusterName": autorest.Encode("path", virtualClusterName),
462	}
463
464	const APIVersion = "2015-05-01-preview"
465	queryParameters := map[string]interface{}{
466		"api-version": APIVersion,
467	}
468
469	preparer := autorest.CreatePreparer(
470		autorest.AsContentType("application/json; charset=utf-8"),
471		autorest.AsPatch(),
472		autorest.WithBaseURL(client.BaseURI),
473		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/virtualClusters/{virtualClusterName}", pathParameters),
474		autorest.WithJSON(parameters),
475		autorest.WithQueryParameters(queryParameters))
476	return preparer.Prepare((&http.Request{}).WithContext(ctx))
477}
478
479// UpdateSender sends the Update request. The method will close the
480// http.Response Body if it receives an error.
481func (client VirtualClustersClient) UpdateSender(req *http.Request) (future VirtualClustersUpdateFuture, err error) {
482	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
483	var resp *http.Response
484	resp, err = autorest.SendWithSender(client, req, sd...)
485	if err != nil {
486		return
487	}
488	future.Future, err = azure.NewFutureFromResponse(resp)
489	return
490}
491
492// UpdateResponder handles the response to the Update request. The method always
493// closes the http.Response Body.
494func (client VirtualClustersClient) UpdateResponder(resp *http.Response) (result VirtualCluster, err error) {
495	err = autorest.Respond(
496		resp,
497		client.ByInspecting(),
498		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
499		autorest.ByUnmarshallingJSON(&result),
500		autorest.ByClosing())
501	result.Response = autorest.Response{Response: resp}
502	return
503}
504