1package batch
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/autorest/date"
25	"github.com/Azure/go-autorest/autorest/validation"
26	"github.com/Azure/go-autorest/tracing"
27	"github.com/satori/go.uuid"
28	"net/http"
29)
30
31// AccountClient is the a client for issuing REST requests to the Azure Batch service.
32type AccountClient struct {
33	BaseClient
34}
35
36// NewAccountClient creates an instance of the AccountClient client.
37func NewAccountClient(batchURL string) AccountClient {
38	return AccountClient{New(batchURL)}
39}
40
41// ListPoolNodeCounts gets the number of Compute Nodes in each state, grouped by Pool.
42// Parameters:
43// filter - an OData $filter clause. For more information on constructing this filter, see
44// https://docs.microsoft.com/en-us/rest/api/batchservice/odata-filters-in-batch.
45// maxResults - the maximum number of items to return in the response.
46// timeout - the maximum time that the server can spend processing the request, in seconds. The default is 30
47// seconds.
48// clientRequestID - the caller-generated request identity, in the form of a GUID with no decoration such as
49// curly braces, e.g. 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
50// returnClientRequestID - whether the server should return the client-request-id in the response.
51// ocpDate - the time the request was issued. Client libraries typically set this to the current system clock
52// time; set it explicitly if you are calling the REST API directly.
53func (client AccountClient) ListPoolNodeCounts(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result PoolNodeCountsListResultPage, err error) {
54	if tracing.IsEnabled() {
55		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListPoolNodeCounts")
56		defer func() {
57			sc := -1
58			if result.pnclr.Response.Response != nil {
59				sc = result.pnclr.Response.Response.StatusCode
60			}
61			tracing.EndSpan(ctx, sc, err)
62		}()
63	}
64	if err := validation.Validate([]validation.Validation{
65		{TargetValue: maxResults,
66			Constraints: []validation.Constraint{{Target: "maxResults", Name: validation.Null, Rule: false,
67				Chain: []validation.Constraint{{Target: "maxResults", Name: validation.InclusiveMaximum, Rule: int64(10), Chain: nil},
68					{Target: "maxResults", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil},
69				}}}}}); err != nil {
70		return result, validation.NewError("batch.AccountClient", "ListPoolNodeCounts", err.Error())
71	}
72
73	result.fn = client.listPoolNodeCountsNextResults
74	req, err := client.ListPoolNodeCountsPreparer(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
75	if err != nil {
76		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListPoolNodeCounts", nil, "Failure preparing request")
77		return
78	}
79
80	resp, err := client.ListPoolNodeCountsSender(req)
81	if err != nil {
82		result.pnclr.Response = autorest.Response{Response: resp}
83		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListPoolNodeCounts", resp, "Failure sending request")
84		return
85	}
86
87	result.pnclr, err = client.ListPoolNodeCountsResponder(resp)
88	if err != nil {
89		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListPoolNodeCounts", resp, "Failure responding to request")
90	}
91
92	return
93}
94
95// ListPoolNodeCountsPreparer prepares the ListPoolNodeCounts request.
96func (client AccountClient) ListPoolNodeCountsPreparer(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (*http.Request, error) {
97	urlParameters := map[string]interface{}{
98		"batchUrl": client.BatchURL,
99	}
100
101	const APIVersion = "2019-08-01.10.0"
102	queryParameters := map[string]interface{}{
103		"api-version": APIVersion,
104	}
105	if len(filter) > 0 {
106		queryParameters["$filter"] = autorest.Encode("query", filter)
107	}
108	if maxResults != nil {
109		queryParameters["maxresults"] = autorest.Encode("query", *maxResults)
110	} else {
111		queryParameters["maxresults"] = autorest.Encode("query", 10)
112	}
113	if timeout != nil {
114		queryParameters["timeout"] = autorest.Encode("query", *timeout)
115	} else {
116		queryParameters["timeout"] = autorest.Encode("query", 30)
117	}
118
119	preparer := autorest.CreatePreparer(
120		autorest.AsGet(),
121		autorest.WithCustomBaseURL("{batchUrl}", urlParameters),
122		autorest.WithPath("/nodecounts"),
123		autorest.WithQueryParameters(queryParameters))
124	if clientRequestID != nil {
125		preparer = autorest.DecoratePreparer(preparer,
126			autorest.WithHeader("client-request-id", autorest.String(clientRequestID)))
127	}
128	if returnClientRequestID != nil {
129		preparer = autorest.DecoratePreparer(preparer,
130			autorest.WithHeader("return-client-request-id", autorest.String(returnClientRequestID)))
131	} else {
132		preparer = autorest.DecoratePreparer(preparer,
133			autorest.WithHeader("return-client-request-id", autorest.String(false)))
134	}
135	if ocpDate != nil {
136		preparer = autorest.DecoratePreparer(preparer,
137			autorest.WithHeader("ocp-date", autorest.String(ocpDate)))
138	}
139	return preparer.Prepare((&http.Request{}).WithContext(ctx))
140}
141
142// ListPoolNodeCountsSender sends the ListPoolNodeCounts request. The method will close the
143// http.Response Body if it receives an error.
144func (client AccountClient) ListPoolNodeCountsSender(req *http.Request) (*http.Response, error) {
145	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
146}
147
148// ListPoolNodeCountsResponder handles the response to the ListPoolNodeCounts request. The method always
149// closes the http.Response Body.
150func (client AccountClient) ListPoolNodeCountsResponder(resp *http.Response) (result PoolNodeCountsListResult, err error) {
151	err = autorest.Respond(
152		resp,
153		client.ByInspecting(),
154		azure.WithErrorUnlessStatusCode(http.StatusOK),
155		autorest.ByUnmarshallingJSON(&result),
156		autorest.ByClosing())
157	result.Response = autorest.Response{Response: resp}
158	return
159}
160
161// listPoolNodeCountsNextResults retrieves the next set of results, if any.
162func (client AccountClient) listPoolNodeCountsNextResults(ctx context.Context, lastResults PoolNodeCountsListResult) (result PoolNodeCountsListResult, err error) {
163	req, err := lastResults.poolNodeCountsListResultPreparer(ctx)
164	if err != nil {
165		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listPoolNodeCountsNextResults", nil, "Failure preparing next results request")
166	}
167	if req == nil {
168		return
169	}
170	resp, err := client.ListPoolNodeCountsSender(req)
171	if err != nil {
172		result.Response = autorest.Response{Response: resp}
173		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listPoolNodeCountsNextResults", resp, "Failure sending next results request")
174	}
175	result, err = client.ListPoolNodeCountsResponder(resp)
176	if err != nil {
177		err = autorest.NewErrorWithError(err, "batch.AccountClient", "listPoolNodeCountsNextResults", resp, "Failure responding to next results request")
178	}
179	return
180}
181
182// ListPoolNodeCountsComplete enumerates all values, automatically crossing page boundaries as required.
183func (client AccountClient) ListPoolNodeCountsComplete(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result PoolNodeCountsListResultIterator, err error) {
184	if tracing.IsEnabled() {
185		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListPoolNodeCounts")
186		defer func() {
187			sc := -1
188			if result.Response().Response.Response != nil {
189				sc = result.page.Response().Response.Response.StatusCode
190			}
191			tracing.EndSpan(ctx, sc, err)
192		}()
193	}
194	result.page, err = client.ListPoolNodeCounts(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
195	return
196}
197
198// ListSupportedImages sends the list supported images request.
199// Parameters:
200// filter - an OData $filter clause. For more information on constructing this filter, see
201// https://docs.microsoft.com/en-us/rest/api/batchservice/odata-filters-in-batch#list-support-images.
202// maxResults - the maximum number of items to return in the response. A maximum of 1000 results will be
203// returned.
204// timeout - the maximum time that the server can spend processing the request, in seconds. The default is 30
205// seconds.
206// clientRequestID - the caller-generated request identity, in the form of a GUID with no decoration such as
207// curly braces, e.g. 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
208// returnClientRequestID - whether the server should return the client-request-id in the response.
209// ocpDate - the time the request was issued. Client libraries typically set this to the current system clock
210// time; set it explicitly if you are calling the REST API directly.
211func (client AccountClient) ListSupportedImages(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result AccountListSupportedImagesResultPage, err error) {
212	if tracing.IsEnabled() {
213		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListSupportedImages")
214		defer func() {
215			sc := -1
216			if result.alsir.Response.Response != nil {
217				sc = result.alsir.Response.Response.StatusCode
218			}
219			tracing.EndSpan(ctx, sc, err)
220		}()
221	}
222	if err := validation.Validate([]validation.Validation{
223		{TargetValue: maxResults,
224			Constraints: []validation.Constraint{{Target: "maxResults", Name: validation.Null, Rule: false,
225				Chain: []validation.Constraint{{Target: "maxResults", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil},
226					{Target: "maxResults", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil},
227				}}}}}); err != nil {
228		return result, validation.NewError("batch.AccountClient", "ListSupportedImages", err.Error())
229	}
230
231	result.fn = client.listSupportedImagesNextResults
232	req, err := client.ListSupportedImagesPreparer(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
233	if err != nil {
234		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListSupportedImages", nil, "Failure preparing request")
235		return
236	}
237
238	resp, err := client.ListSupportedImagesSender(req)
239	if err != nil {
240		result.alsir.Response = autorest.Response{Response: resp}
241		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListSupportedImages", resp, "Failure sending request")
242		return
243	}
244
245	result.alsir, err = client.ListSupportedImagesResponder(resp)
246	if err != nil {
247		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListSupportedImages", resp, "Failure responding to request")
248	}
249
250	return
251}
252
253// ListSupportedImagesPreparer prepares the ListSupportedImages request.
254func (client AccountClient) ListSupportedImagesPreparer(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (*http.Request, error) {
255	urlParameters := map[string]interface{}{
256		"batchUrl": client.BatchURL,
257	}
258
259	const APIVersion = "2019-08-01.10.0"
260	queryParameters := map[string]interface{}{
261		"api-version": APIVersion,
262	}
263	if len(filter) > 0 {
264		queryParameters["$filter"] = autorest.Encode("query", filter)
265	}
266	if maxResults != nil {
267		queryParameters["maxresults"] = autorest.Encode("query", *maxResults)
268	} else {
269		queryParameters["maxresults"] = autorest.Encode("query", 1000)
270	}
271	if timeout != nil {
272		queryParameters["timeout"] = autorest.Encode("query", *timeout)
273	} else {
274		queryParameters["timeout"] = autorest.Encode("query", 30)
275	}
276
277	preparer := autorest.CreatePreparer(
278		autorest.AsGet(),
279		autorest.WithCustomBaseURL("{batchUrl}", urlParameters),
280		autorest.WithPath("/supportedimages"),
281		autorest.WithQueryParameters(queryParameters))
282	if clientRequestID != nil {
283		preparer = autorest.DecoratePreparer(preparer,
284			autorest.WithHeader("client-request-id", autorest.String(clientRequestID)))
285	}
286	if returnClientRequestID != nil {
287		preparer = autorest.DecoratePreparer(preparer,
288			autorest.WithHeader("return-client-request-id", autorest.String(returnClientRequestID)))
289	} else {
290		preparer = autorest.DecoratePreparer(preparer,
291			autorest.WithHeader("return-client-request-id", autorest.String(false)))
292	}
293	if ocpDate != nil {
294		preparer = autorest.DecoratePreparer(preparer,
295			autorest.WithHeader("ocp-date", autorest.String(ocpDate)))
296	}
297	return preparer.Prepare((&http.Request{}).WithContext(ctx))
298}
299
300// ListSupportedImagesSender sends the ListSupportedImages request. The method will close the
301// http.Response Body if it receives an error.
302func (client AccountClient) ListSupportedImagesSender(req *http.Request) (*http.Response, error) {
303	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
304}
305
306// ListSupportedImagesResponder handles the response to the ListSupportedImages request. The method always
307// closes the http.Response Body.
308func (client AccountClient) ListSupportedImagesResponder(resp *http.Response) (result AccountListSupportedImagesResult, 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// listSupportedImagesNextResults retrieves the next set of results, if any.
320func (client AccountClient) listSupportedImagesNextResults(ctx context.Context, lastResults AccountListSupportedImagesResult) (result AccountListSupportedImagesResult, err error) {
321	req, err := lastResults.accountListSupportedImagesResultPreparer(ctx)
322	if err != nil {
323		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listSupportedImagesNextResults", nil, "Failure preparing next results request")
324	}
325	if req == nil {
326		return
327	}
328	resp, err := client.ListSupportedImagesSender(req)
329	if err != nil {
330		result.Response = autorest.Response{Response: resp}
331		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listSupportedImagesNextResults", resp, "Failure sending next results request")
332	}
333	result, err = client.ListSupportedImagesResponder(resp)
334	if err != nil {
335		err = autorest.NewErrorWithError(err, "batch.AccountClient", "listSupportedImagesNextResults", resp, "Failure responding to next results request")
336	}
337	return
338}
339
340// ListSupportedImagesComplete enumerates all values, automatically crossing page boundaries as required.
341func (client AccountClient) ListSupportedImagesComplete(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result AccountListSupportedImagesResultIterator, err error) {
342	if tracing.IsEnabled() {
343		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListSupportedImages")
344		defer func() {
345			sc := -1
346			if result.Response().Response.Response != nil {
347				sc = result.page.Response().Response.Response.StatusCode
348			}
349			tracing.EndSpan(ctx, sc, err)
350		}()
351	}
352	result.page, err = client.ListSupportedImages(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
353	return
354}
355