1package network
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	"net/http"
25)
26
27// LoadBalancersClient is the network Client
28type LoadBalancersClient struct {
29	BaseClient
30}
31
32// NewLoadBalancersClient creates an instance of the LoadBalancersClient client.
33func NewLoadBalancersClient(subscriptionID string) LoadBalancersClient {
34	return NewLoadBalancersClientWithBaseURI(DefaultBaseURI, subscriptionID)
35}
36
37// NewLoadBalancersClientWithBaseURI creates an instance of the LoadBalancersClient client.
38func NewLoadBalancersClientWithBaseURI(baseURI string, subscriptionID string) LoadBalancersClient {
39	return LoadBalancersClient{NewWithBaseURI(baseURI, subscriptionID)}
40}
41
42// CreateOrUpdate creates or updates a load balancer.
43// Parameters:
44// resourceGroupName - the name of the resource group.
45// loadBalancerName - the name of the load balancer.
46// parameters - parameters supplied to the create or update load balancer operation.
47func (client LoadBalancersClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, loadBalancerName string, parameters LoadBalancer) (result LoadBalancersCreateOrUpdateFuture, err error) {
48	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, loadBalancerName, parameters)
49	if err != nil {
50		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "CreateOrUpdate", nil, "Failure preparing request")
51		return
52	}
53
54	result, err = client.CreateOrUpdateSender(req)
55	if err != nil {
56		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "CreateOrUpdate", result.Response(), "Failure sending request")
57		return
58	}
59
60	return
61}
62
63// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
64func (client LoadBalancersClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, loadBalancerName string, parameters LoadBalancer) (*http.Request, error) {
65	pathParameters := map[string]interface{}{
66		"loadBalancerName":  autorest.Encode("path", loadBalancerName),
67		"resourceGroupName": autorest.Encode("path", resourceGroupName),
68		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
69	}
70
71	const APIVersion = "2016-12-01"
72	queryParameters := map[string]interface{}{
73		"api-version": APIVersion,
74	}
75
76	preparer := autorest.CreatePreparer(
77		autorest.AsContentType("application/json; charset=utf-8"),
78		autorest.AsPut(),
79		autorest.WithBaseURL(client.BaseURI),
80		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}", pathParameters),
81		autorest.WithJSON(parameters),
82		autorest.WithQueryParameters(queryParameters))
83	return preparer.Prepare((&http.Request{}).WithContext(ctx))
84}
85
86// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
87// http.Response Body if it receives an error.
88func (client LoadBalancersClient) CreateOrUpdateSender(req *http.Request) (future LoadBalancersCreateOrUpdateFuture, err error) {
89	sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client))
90	future.Future = azure.NewFuture(req)
91	future.req = req
92	_, err = future.Done(sender)
93	if err != nil {
94		return
95	}
96	err = autorest.Respond(future.Response(),
97		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated))
98	return
99}
100
101// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
102// closes the http.Response Body.
103func (client LoadBalancersClient) CreateOrUpdateResponder(resp *http.Response) (result LoadBalancer, err error) {
104	err = autorest.Respond(
105		resp,
106		client.ByInspecting(),
107		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
108		autorest.ByUnmarshallingJSON(&result),
109		autorest.ByClosing())
110	result.Response = autorest.Response{Response: resp}
111	return
112}
113
114// Delete deletes the specified load balancer.
115// Parameters:
116// resourceGroupName - the name of the resource group.
117// loadBalancerName - the name of the load balancer.
118func (client LoadBalancersClient) Delete(ctx context.Context, resourceGroupName string, loadBalancerName string) (result LoadBalancersDeleteFuture, err error) {
119	req, err := client.DeletePreparer(ctx, resourceGroupName, loadBalancerName)
120	if err != nil {
121		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Delete", nil, "Failure preparing request")
122		return
123	}
124
125	result, err = client.DeleteSender(req)
126	if err != nil {
127		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Delete", result.Response(), "Failure sending request")
128		return
129	}
130
131	return
132}
133
134// DeletePreparer prepares the Delete request.
135func (client LoadBalancersClient) DeletePreparer(ctx context.Context, resourceGroupName string, loadBalancerName string) (*http.Request, error) {
136	pathParameters := map[string]interface{}{
137		"loadBalancerName":  autorest.Encode("path", loadBalancerName),
138		"resourceGroupName": autorest.Encode("path", resourceGroupName),
139		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
140	}
141
142	const APIVersion = "2016-12-01"
143	queryParameters := map[string]interface{}{
144		"api-version": APIVersion,
145	}
146
147	preparer := autorest.CreatePreparer(
148		autorest.AsDelete(),
149		autorest.WithBaseURL(client.BaseURI),
150		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}", pathParameters),
151		autorest.WithQueryParameters(queryParameters))
152	return preparer.Prepare((&http.Request{}).WithContext(ctx))
153}
154
155// DeleteSender sends the Delete request. The method will close the
156// http.Response Body if it receives an error.
157func (client LoadBalancersClient) DeleteSender(req *http.Request) (future LoadBalancersDeleteFuture, err error) {
158	sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client))
159	future.Future = azure.NewFuture(req)
160	future.req = req
161	_, err = future.Done(sender)
162	if err != nil {
163		return
164	}
165	err = autorest.Respond(future.Response(),
166		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent))
167	return
168}
169
170// DeleteResponder handles the response to the Delete request. The method always
171// closes the http.Response Body.
172func (client LoadBalancersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
173	err = autorest.Respond(
174		resp,
175		client.ByInspecting(),
176		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
177		autorest.ByClosing())
178	result.Response = resp
179	return
180}
181
182// Get gets the specified load balancer.
183// Parameters:
184// resourceGroupName - the name of the resource group.
185// loadBalancerName - the name of the load balancer.
186// expand - expands referenced resources.
187func (client LoadBalancersClient) Get(ctx context.Context, resourceGroupName string, loadBalancerName string, expand string) (result LoadBalancer, err error) {
188	req, err := client.GetPreparer(ctx, resourceGroupName, loadBalancerName, expand)
189	if err != nil {
190		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Get", nil, "Failure preparing request")
191		return
192	}
193
194	resp, err := client.GetSender(req)
195	if err != nil {
196		result.Response = autorest.Response{Response: resp}
197		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Get", resp, "Failure sending request")
198		return
199	}
200
201	result, err = client.GetResponder(resp)
202	if err != nil {
203		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Get", resp, "Failure responding to request")
204	}
205
206	return
207}
208
209// GetPreparer prepares the Get request.
210func (client LoadBalancersClient) GetPreparer(ctx context.Context, resourceGroupName string, loadBalancerName string, expand string) (*http.Request, error) {
211	pathParameters := map[string]interface{}{
212		"loadBalancerName":  autorest.Encode("path", loadBalancerName),
213		"resourceGroupName": autorest.Encode("path", resourceGroupName),
214		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
215	}
216
217	const APIVersion = "2016-12-01"
218	queryParameters := map[string]interface{}{
219		"api-version": APIVersion,
220	}
221	if len(expand) > 0 {
222		queryParameters["$expand"] = autorest.Encode("query", expand)
223	}
224
225	preparer := autorest.CreatePreparer(
226		autorest.AsGet(),
227		autorest.WithBaseURL(client.BaseURI),
228		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}", pathParameters),
229		autorest.WithQueryParameters(queryParameters))
230	return preparer.Prepare((&http.Request{}).WithContext(ctx))
231}
232
233// GetSender sends the Get request. The method will close the
234// http.Response Body if it receives an error.
235func (client LoadBalancersClient) GetSender(req *http.Request) (*http.Response, error) {
236	return autorest.SendWithSender(client, req,
237		azure.DoRetryWithRegistration(client.Client))
238}
239
240// GetResponder handles the response to the Get request. The method always
241// closes the http.Response Body.
242func (client LoadBalancersClient) GetResponder(resp *http.Response) (result LoadBalancer, err error) {
243	err = autorest.Respond(
244		resp,
245		client.ByInspecting(),
246		azure.WithErrorUnlessStatusCode(http.StatusOK),
247		autorest.ByUnmarshallingJSON(&result),
248		autorest.ByClosing())
249	result.Response = autorest.Response{Response: resp}
250	return
251}
252
253// List gets all the load balancers in a resource group.
254// Parameters:
255// resourceGroupName - the name of the resource group.
256func (client LoadBalancersClient) List(ctx context.Context, resourceGroupName string) (result LoadBalancerListResultPage, err error) {
257	result.fn = client.listNextResults
258	req, err := client.ListPreparer(ctx, resourceGroupName)
259	if err != nil {
260		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "List", nil, "Failure preparing request")
261		return
262	}
263
264	resp, err := client.ListSender(req)
265	if err != nil {
266		result.lblr.Response = autorest.Response{Response: resp}
267		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "List", resp, "Failure sending request")
268		return
269	}
270
271	result.lblr, err = client.ListResponder(resp)
272	if err != nil {
273		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "List", resp, "Failure responding to request")
274	}
275
276	return
277}
278
279// ListPreparer prepares the List request.
280func (client LoadBalancersClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
281	pathParameters := map[string]interface{}{
282		"resourceGroupName": autorest.Encode("path", resourceGroupName),
283		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
284	}
285
286	const APIVersion = "2016-12-01"
287	queryParameters := map[string]interface{}{
288		"api-version": APIVersion,
289	}
290
291	preparer := autorest.CreatePreparer(
292		autorest.AsGet(),
293		autorest.WithBaseURL(client.BaseURI),
294		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers", pathParameters),
295		autorest.WithQueryParameters(queryParameters))
296	return preparer.Prepare((&http.Request{}).WithContext(ctx))
297}
298
299// ListSender sends the List request. The method will close the
300// http.Response Body if it receives an error.
301func (client LoadBalancersClient) ListSender(req *http.Request) (*http.Response, error) {
302	return autorest.SendWithSender(client, req,
303		azure.DoRetryWithRegistration(client.Client))
304}
305
306// ListResponder handles the response to the List request. The method always
307// closes the http.Response Body.
308func (client LoadBalancersClient) ListResponder(resp *http.Response) (result LoadBalancerListResult, err error) {
309	err = autorest.Respond(
310		resp,
311		client.ByInspecting(),
312		azure.WithErrorUnlessStatusCode(http.StatusOK),
313		autorest.ByUnmarshallingJSON(&result),
314		autorest.ByClosing())
315	result.Response = autorest.Response{Response: resp}
316	return
317}
318
319// listNextResults retrieves the next set of results, if any.
320func (client LoadBalancersClient) listNextResults(lastResults LoadBalancerListResult) (result LoadBalancerListResult, err error) {
321	req, err := lastResults.loadBalancerListResultPreparer()
322	if err != nil {
323		return result, autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listNextResults", nil, "Failure preparing next results request")
324	}
325	if req == nil {
326		return
327	}
328	resp, err := client.ListSender(req)
329	if err != nil {
330		result.Response = autorest.Response{Response: resp}
331		return result, autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listNextResults", resp, "Failure sending next results request")
332	}
333	result, err = client.ListResponder(resp)
334	if err != nil {
335		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listNextResults", resp, "Failure responding to next results request")
336	}
337	return
338}
339
340// ListComplete enumerates all values, automatically crossing page boundaries as required.
341func (client LoadBalancersClient) ListComplete(ctx context.Context, resourceGroupName string) (result LoadBalancerListResultIterator, err error) {
342	result.page, err = client.List(ctx, resourceGroupName)
343	return
344}
345
346// ListAll gets all the load balancers in a subscription.
347func (client LoadBalancersClient) ListAll(ctx context.Context) (result LoadBalancerListResultPage, err error) {
348	result.fn = client.listAllNextResults
349	req, err := client.ListAllPreparer(ctx)
350	if err != nil {
351		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "ListAll", nil, "Failure preparing request")
352		return
353	}
354
355	resp, err := client.ListAllSender(req)
356	if err != nil {
357		result.lblr.Response = autorest.Response{Response: resp}
358		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "ListAll", resp, "Failure sending request")
359		return
360	}
361
362	result.lblr, err = client.ListAllResponder(resp)
363	if err != nil {
364		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "ListAll", resp, "Failure responding to request")
365	}
366
367	return
368}
369
370// ListAllPreparer prepares the ListAll request.
371func (client LoadBalancersClient) ListAllPreparer(ctx context.Context) (*http.Request, error) {
372	pathParameters := map[string]interface{}{
373		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
374	}
375
376	const APIVersion = "2016-12-01"
377	queryParameters := map[string]interface{}{
378		"api-version": APIVersion,
379	}
380
381	preparer := autorest.CreatePreparer(
382		autorest.AsGet(),
383		autorest.WithBaseURL(client.BaseURI),
384		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/loadBalancers", pathParameters),
385		autorest.WithQueryParameters(queryParameters))
386	return preparer.Prepare((&http.Request{}).WithContext(ctx))
387}
388
389// ListAllSender sends the ListAll request. The method will close the
390// http.Response Body if it receives an error.
391func (client LoadBalancersClient) ListAllSender(req *http.Request) (*http.Response, error) {
392	return autorest.SendWithSender(client, req,
393		azure.DoRetryWithRegistration(client.Client))
394}
395
396// ListAllResponder handles the response to the ListAll request. The method always
397// closes the http.Response Body.
398func (client LoadBalancersClient) ListAllResponder(resp *http.Response) (result LoadBalancerListResult, err error) {
399	err = autorest.Respond(
400		resp,
401		client.ByInspecting(),
402		azure.WithErrorUnlessStatusCode(http.StatusOK),
403		autorest.ByUnmarshallingJSON(&result),
404		autorest.ByClosing())
405	result.Response = autorest.Response{Response: resp}
406	return
407}
408
409// listAllNextResults retrieves the next set of results, if any.
410func (client LoadBalancersClient) listAllNextResults(lastResults LoadBalancerListResult) (result LoadBalancerListResult, err error) {
411	req, err := lastResults.loadBalancerListResultPreparer()
412	if err != nil {
413		return result, autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listAllNextResults", nil, "Failure preparing next results request")
414	}
415	if req == nil {
416		return
417	}
418	resp, err := client.ListAllSender(req)
419	if err != nil {
420		result.Response = autorest.Response{Response: resp}
421		return result, autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listAllNextResults", resp, "Failure sending next results request")
422	}
423	result, err = client.ListAllResponder(resp)
424	if err != nil {
425		err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listAllNextResults", resp, "Failure responding to next results request")
426	}
427	return
428}
429
430// ListAllComplete enumerates all values, automatically crossing page boundaries as required.
431func (client LoadBalancersClient) ListAllComplete(ctx context.Context) (result LoadBalancerListResultIterator, err error) {
432	result.page, err = client.ListAll(ctx)
433	return
434}
435