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: 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-06-01.9.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	sd := autorest.GetSendDecorators(req.Context(), autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
146	return autorest.SendWithSender(client, req, sd...)
147}
148
149// ListPoolNodeCountsResponder handles the response to the ListPoolNodeCounts request. The method always
150// closes the http.Response Body.
151func (client AccountClient) ListPoolNodeCountsResponder(resp *http.Response) (result PoolNodeCountsListResult, err error) {
152	err = autorest.Respond(
153		resp,
154		client.ByInspecting(),
155		azure.WithErrorUnlessStatusCode(http.StatusOK),
156		autorest.ByUnmarshallingJSON(&result),
157		autorest.ByClosing())
158	result.Response = autorest.Response{Response: resp}
159	return
160}
161
162// listPoolNodeCountsNextResults retrieves the next set of results, if any.
163func (client AccountClient) listPoolNodeCountsNextResults(ctx context.Context, lastResults PoolNodeCountsListResult) (result PoolNodeCountsListResult, err error) {
164	req, err := lastResults.poolNodeCountsListResultPreparer(ctx)
165	if err != nil {
166		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listPoolNodeCountsNextResults", nil, "Failure preparing next results request")
167	}
168	if req == nil {
169		return
170	}
171	resp, err := client.ListPoolNodeCountsSender(req)
172	if err != nil {
173		result.Response = autorest.Response{Response: resp}
174		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listPoolNodeCountsNextResults", resp, "Failure sending next results request")
175	}
176	result, err = client.ListPoolNodeCountsResponder(resp)
177	if err != nil {
178		err = autorest.NewErrorWithError(err, "batch.AccountClient", "listPoolNodeCountsNextResults", resp, "Failure responding to next results request")
179	}
180	return
181}
182
183// ListPoolNodeCountsComplete enumerates all values, automatically crossing page boundaries as required.
184func (client AccountClient) ListPoolNodeCountsComplete(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result PoolNodeCountsListResultIterator, err error) {
185	if tracing.IsEnabled() {
186		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListPoolNodeCounts")
187		defer func() {
188			sc := -1
189			if result.Response().Response.Response != nil {
190				sc = result.page.Response().Response.Response.StatusCode
191			}
192			tracing.EndSpan(ctx, sc, err)
193		}()
194	}
195	result.page, err = client.ListPoolNodeCounts(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
196	return
197}
198
199// ListSupportedImages sends the list supported images request.
200// Parameters:
201// filter - an OData $filter clause. For more information on constructing this filter, see
202// https://docs.microsoft.com/en-us/rest/api/batchservice/odata-filters-in-batch#list-support-images.
203// maxResults - the maximum number of items to return in the response. A maximum of 1000 results will be
204// returned.
205// timeout - the maximum time that the server can spend processing the request, in seconds. The default is 30
206// seconds.
207// clientRequestID - the caller-generated request identity, in the form of a GUID with no decoration such as
208// curly braces, e.g. 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
209// returnClientRequestID - whether the server should return the client-request-id in the response.
210// ocpDate - the time the request was issued. Client libraries typically set this to the current system clock
211// time; set it explicitly if you are calling the REST API directly.
212func (client AccountClient) ListSupportedImages(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result AccountListSupportedImagesResultPage, err error) {
213	if tracing.IsEnabled() {
214		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListSupportedImages")
215		defer func() {
216			sc := -1
217			if result.alsir.Response.Response != nil {
218				sc = result.alsir.Response.Response.StatusCode
219			}
220			tracing.EndSpan(ctx, sc, err)
221		}()
222	}
223	if err := validation.Validate([]validation.Validation{
224		{TargetValue: maxResults,
225			Constraints: []validation.Constraint{{Target: "maxResults", Name: validation.Null, Rule: false,
226				Chain: []validation.Constraint{{Target: "maxResults", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil},
227					{Target: "maxResults", Name: validation.InclusiveMinimum, Rule: 1, Chain: nil},
228				}}}}}); err != nil {
229		return result, validation.NewError("batch.AccountClient", "ListSupportedImages", err.Error())
230	}
231
232	result.fn = client.listSupportedImagesNextResults
233	req, err := client.ListSupportedImagesPreparer(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
234	if err != nil {
235		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListSupportedImages", nil, "Failure preparing request")
236		return
237	}
238
239	resp, err := client.ListSupportedImagesSender(req)
240	if err != nil {
241		result.alsir.Response = autorest.Response{Response: resp}
242		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListSupportedImages", resp, "Failure sending request")
243		return
244	}
245
246	result.alsir, err = client.ListSupportedImagesResponder(resp)
247	if err != nil {
248		err = autorest.NewErrorWithError(err, "batch.AccountClient", "ListSupportedImages", resp, "Failure responding to request")
249	}
250
251	return
252}
253
254// ListSupportedImagesPreparer prepares the ListSupportedImages request.
255func (client AccountClient) ListSupportedImagesPreparer(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (*http.Request, error) {
256	urlParameters := map[string]interface{}{
257		"batchUrl": client.BatchURL,
258	}
259
260	const APIVersion = "2019-06-01.9.0"
261	queryParameters := map[string]interface{}{
262		"api-version": APIVersion,
263	}
264	if len(filter) > 0 {
265		queryParameters["$filter"] = autorest.Encode("query", filter)
266	}
267	if maxResults != nil {
268		queryParameters["maxresults"] = autorest.Encode("query", *maxResults)
269	} else {
270		queryParameters["maxresults"] = autorest.Encode("query", 1000)
271	}
272	if timeout != nil {
273		queryParameters["timeout"] = autorest.Encode("query", *timeout)
274	} else {
275		queryParameters["timeout"] = autorest.Encode("query", 30)
276	}
277
278	preparer := autorest.CreatePreparer(
279		autorest.AsGet(),
280		autorest.WithCustomBaseURL("{batchUrl}", urlParameters),
281		autorest.WithPath("/supportedimages"),
282		autorest.WithQueryParameters(queryParameters))
283	if clientRequestID != nil {
284		preparer = autorest.DecoratePreparer(preparer,
285			autorest.WithHeader("client-request-id", autorest.String(clientRequestID)))
286	}
287	if returnClientRequestID != nil {
288		preparer = autorest.DecoratePreparer(preparer,
289			autorest.WithHeader("return-client-request-id", autorest.String(returnClientRequestID)))
290	} else {
291		preparer = autorest.DecoratePreparer(preparer,
292			autorest.WithHeader("return-client-request-id", autorest.String(false)))
293	}
294	if ocpDate != nil {
295		preparer = autorest.DecoratePreparer(preparer,
296			autorest.WithHeader("ocp-date", autorest.String(ocpDate)))
297	}
298	return preparer.Prepare((&http.Request{}).WithContext(ctx))
299}
300
301// ListSupportedImagesSender sends the ListSupportedImages request. The method will close the
302// http.Response Body if it receives an error.
303func (client AccountClient) ListSupportedImagesSender(req *http.Request) (*http.Response, error) {
304	sd := autorest.GetSendDecorators(req.Context(), autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
305	return autorest.SendWithSender(client, req, sd...)
306}
307
308// ListSupportedImagesResponder handles the response to the ListSupportedImages request. The method always
309// closes the http.Response Body.
310func (client AccountClient) ListSupportedImagesResponder(resp *http.Response) (result AccountListSupportedImagesResult, err error) {
311	err = autorest.Respond(
312		resp,
313		client.ByInspecting(),
314		azure.WithErrorUnlessStatusCode(http.StatusOK),
315		autorest.ByUnmarshallingJSON(&result),
316		autorest.ByClosing())
317	result.Response = autorest.Response{Response: resp}
318	return
319}
320
321// listSupportedImagesNextResults retrieves the next set of results, if any.
322func (client AccountClient) listSupportedImagesNextResults(ctx context.Context, lastResults AccountListSupportedImagesResult) (result AccountListSupportedImagesResult, err error) {
323	req, err := lastResults.accountListSupportedImagesResultPreparer(ctx)
324	if err != nil {
325		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listSupportedImagesNextResults", nil, "Failure preparing next results request")
326	}
327	if req == nil {
328		return
329	}
330	resp, err := client.ListSupportedImagesSender(req)
331	if err != nil {
332		result.Response = autorest.Response{Response: resp}
333		return result, autorest.NewErrorWithError(err, "batch.AccountClient", "listSupportedImagesNextResults", resp, "Failure sending next results request")
334	}
335	result, err = client.ListSupportedImagesResponder(resp)
336	if err != nil {
337		err = autorest.NewErrorWithError(err, "batch.AccountClient", "listSupportedImagesNextResults", resp, "Failure responding to next results request")
338	}
339	return
340}
341
342// ListSupportedImagesComplete enumerates all values, automatically crossing page boundaries as required.
343func (client AccountClient) ListSupportedImagesComplete(ctx context.Context, filter string, maxResults *int32, timeout *int32, clientRequestID *uuid.UUID, returnClientRequestID *bool, ocpDate *date.TimeRFC1123) (result AccountListSupportedImagesResultIterator, err error) {
344	if tracing.IsEnabled() {
345		ctx = tracing.StartSpan(ctx, fqdn+"/AccountClient.ListSupportedImages")
346		defer func() {
347			sc := -1
348			if result.Response().Response.Response != nil {
349				sc = result.page.Response().Response.Response.StatusCode
350			}
351			tracing.EndSpan(ctx, sc, err)
352		}()
353	}
354	result.page, err = client.ListSupportedImages(ctx, filter, maxResults, timeout, clientRequestID, returnClientRequestID, ocpDate)
355	return
356}
357