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