1package automation
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/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// ModuleClient is the automation Client
19type ModuleClient struct {
20	BaseClient
21}
22
23// NewModuleClient creates an instance of the ModuleClient client.
24func NewModuleClient(subscriptionID string) ModuleClient {
25	return NewModuleClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewModuleClientWithBaseURI creates an instance of the ModuleClient client using a custom endpoint.  Use this when
29// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewModuleClientWithBaseURI(baseURI string, subscriptionID string) ModuleClient {
31	return ModuleClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// CreateOrUpdate create or Update the module identified by module name.
35// Parameters:
36// resourceGroupName - name of an Azure Resource group.
37// automationAccountName - the name of the automation account.
38// moduleName - the name of module.
39// parameters - the create or update parameters for module.
40func (client ModuleClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string, parameters ModuleCreateOrUpdateParameters) (result Module, err error) {
41	if tracing.IsEnabled() {
42		ctx = tracing.StartSpan(ctx, fqdn+"/ModuleClient.CreateOrUpdate")
43		defer func() {
44			sc := -1
45			if result.Response.Response != nil {
46				sc = result.Response.Response.StatusCode
47			}
48			tracing.EndSpan(ctx, sc, err)
49		}()
50	}
51	if err := validation.Validate([]validation.Validation{
52		{TargetValue: resourceGroupName,
53			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
54				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
55				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}},
56		{TargetValue: parameters,
57			Constraints: []validation.Constraint{{Target: "parameters.ModuleCreateOrUpdateProperties", Name: validation.Null, Rule: true,
58				Chain: []validation.Constraint{{Target: "parameters.ModuleCreateOrUpdateProperties.ContentLink", Name: validation.Null, Rule: true,
59					Chain: []validation.Constraint{{Target: "parameters.ModuleCreateOrUpdateProperties.ContentLink.ContentHash", Name: validation.Null, Rule: false,
60						Chain: []validation.Constraint{{Target: "parameters.ModuleCreateOrUpdateProperties.ContentLink.ContentHash.Algorithm", Name: validation.Null, Rule: true, Chain: nil},
61							{Target: "parameters.ModuleCreateOrUpdateProperties.ContentLink.ContentHash.Value", Name: validation.Null, Rule: true, Chain: nil},
62						}},
63					}},
64				}}}}}); err != nil {
65		return result, validation.NewError("automation.ModuleClient", "CreateOrUpdate", err.Error())
66	}
67
68	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, automationAccountName, moduleName, parameters)
69	if err != nil {
70		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "CreateOrUpdate", nil, "Failure preparing request")
71		return
72	}
73
74	resp, err := client.CreateOrUpdateSender(req)
75	if err != nil {
76		result.Response = autorest.Response{Response: resp}
77		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "CreateOrUpdate", resp, "Failure sending request")
78		return
79	}
80
81	result, err = client.CreateOrUpdateResponder(resp)
82	if err != nil {
83		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "CreateOrUpdate", resp, "Failure responding to request")
84		return
85	}
86
87	return
88}
89
90// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
91func (client ModuleClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string, parameters ModuleCreateOrUpdateParameters) (*http.Request, error) {
92	pathParameters := map[string]interface{}{
93		"automationAccountName": autorest.Encode("path", automationAccountName),
94		"moduleName":            autorest.Encode("path", moduleName),
95		"resourceGroupName":     autorest.Encode("path", resourceGroupName),
96		"subscriptionId":        autorest.Encode("path", client.SubscriptionID),
97	}
98
99	const APIVersion = "2015-10-31"
100	queryParameters := map[string]interface{}{
101		"api-version": APIVersion,
102	}
103
104	preparer := autorest.CreatePreparer(
105		autorest.AsContentType("application/json; charset=utf-8"),
106		autorest.AsPut(),
107		autorest.WithBaseURL(client.BaseURI),
108		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}/modules/{moduleName}", pathParameters),
109		autorest.WithJSON(parameters),
110		autorest.WithQueryParameters(queryParameters))
111	return preparer.Prepare((&http.Request{}).WithContext(ctx))
112}
113
114// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
115// http.Response Body if it receives an error.
116func (client ModuleClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
117	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
118}
119
120// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
121// closes the http.Response Body.
122func (client ModuleClient) CreateOrUpdateResponder(resp *http.Response) (result Module, err error) {
123	err = autorest.Respond(
124		resp,
125		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
126		autorest.ByUnmarshallingJSON(&result),
127		autorest.ByClosing())
128	result.Response = autorest.Response{Response: resp}
129	return
130}
131
132// Delete delete the module by name.
133// Parameters:
134// resourceGroupName - name of an Azure Resource group.
135// automationAccountName - the name of the automation account.
136// moduleName - the module name.
137func (client ModuleClient) Delete(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string) (result autorest.Response, err error) {
138	if tracing.IsEnabled() {
139		ctx = tracing.StartSpan(ctx, fqdn+"/ModuleClient.Delete")
140		defer func() {
141			sc := -1
142			if result.Response != nil {
143				sc = result.Response.StatusCode
144			}
145			tracing.EndSpan(ctx, sc, err)
146		}()
147	}
148	if err := validation.Validate([]validation.Validation{
149		{TargetValue: resourceGroupName,
150			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
151				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
152				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil {
153		return result, validation.NewError("automation.ModuleClient", "Delete", err.Error())
154	}
155
156	req, err := client.DeletePreparer(ctx, resourceGroupName, automationAccountName, moduleName)
157	if err != nil {
158		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Delete", nil, "Failure preparing request")
159		return
160	}
161
162	resp, err := client.DeleteSender(req)
163	if err != nil {
164		result.Response = resp
165		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Delete", resp, "Failure sending request")
166		return
167	}
168
169	result, err = client.DeleteResponder(resp)
170	if err != nil {
171		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Delete", resp, "Failure responding to request")
172		return
173	}
174
175	return
176}
177
178// DeletePreparer prepares the Delete request.
179func (client ModuleClient) DeletePreparer(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string) (*http.Request, error) {
180	pathParameters := map[string]interface{}{
181		"automationAccountName": autorest.Encode("path", automationAccountName),
182		"moduleName":            autorest.Encode("path", moduleName),
183		"resourceGroupName":     autorest.Encode("path", resourceGroupName),
184		"subscriptionId":        autorest.Encode("path", client.SubscriptionID),
185	}
186
187	const APIVersion = "2015-10-31"
188	queryParameters := map[string]interface{}{
189		"api-version": APIVersion,
190	}
191
192	preparer := autorest.CreatePreparer(
193		autorest.AsDelete(),
194		autorest.WithBaseURL(client.BaseURI),
195		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}/modules/{moduleName}", pathParameters),
196		autorest.WithQueryParameters(queryParameters))
197	return preparer.Prepare((&http.Request{}).WithContext(ctx))
198}
199
200// DeleteSender sends the Delete request. The method will close the
201// http.Response Body if it receives an error.
202func (client ModuleClient) DeleteSender(req *http.Request) (*http.Response, error) {
203	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
204}
205
206// DeleteResponder handles the response to the Delete request. The method always
207// closes the http.Response Body.
208func (client ModuleClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
209	err = autorest.Respond(
210		resp,
211		azure.WithErrorUnlessStatusCode(http.StatusOK),
212		autorest.ByClosing())
213	result.Response = resp
214	return
215}
216
217// Get retrieve the module identified by module name.
218// Parameters:
219// resourceGroupName - name of an Azure Resource group.
220// automationAccountName - the name of the automation account.
221// moduleName - the module name.
222func (client ModuleClient) Get(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string) (result Module, err error) {
223	if tracing.IsEnabled() {
224		ctx = tracing.StartSpan(ctx, fqdn+"/ModuleClient.Get")
225		defer func() {
226			sc := -1
227			if result.Response.Response != nil {
228				sc = result.Response.Response.StatusCode
229			}
230			tracing.EndSpan(ctx, sc, err)
231		}()
232	}
233	if err := validation.Validate([]validation.Validation{
234		{TargetValue: resourceGroupName,
235			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
236				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
237				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil {
238		return result, validation.NewError("automation.ModuleClient", "Get", err.Error())
239	}
240
241	req, err := client.GetPreparer(ctx, resourceGroupName, automationAccountName, moduleName)
242	if err != nil {
243		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Get", nil, "Failure preparing request")
244		return
245	}
246
247	resp, err := client.GetSender(req)
248	if err != nil {
249		result.Response = autorest.Response{Response: resp}
250		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Get", resp, "Failure sending request")
251		return
252	}
253
254	result, err = client.GetResponder(resp)
255	if err != nil {
256		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Get", resp, "Failure responding to request")
257		return
258	}
259
260	return
261}
262
263// GetPreparer prepares the Get request.
264func (client ModuleClient) GetPreparer(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string) (*http.Request, error) {
265	pathParameters := map[string]interface{}{
266		"automationAccountName": autorest.Encode("path", automationAccountName),
267		"moduleName":            autorest.Encode("path", moduleName),
268		"resourceGroupName":     autorest.Encode("path", resourceGroupName),
269		"subscriptionId":        autorest.Encode("path", client.SubscriptionID),
270	}
271
272	const APIVersion = "2015-10-31"
273	queryParameters := map[string]interface{}{
274		"api-version": APIVersion,
275	}
276
277	preparer := autorest.CreatePreparer(
278		autorest.AsGet(),
279		autorest.WithBaseURL(client.BaseURI),
280		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}/modules/{moduleName}", pathParameters),
281		autorest.WithQueryParameters(queryParameters))
282	return preparer.Prepare((&http.Request{}).WithContext(ctx))
283}
284
285// GetSender sends the Get request. The method will close the
286// http.Response Body if it receives an error.
287func (client ModuleClient) GetSender(req *http.Request) (*http.Response, error) {
288	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
289}
290
291// GetResponder handles the response to the Get request. The method always
292// closes the http.Response Body.
293func (client ModuleClient) GetResponder(resp *http.Response) (result Module, err error) {
294	err = autorest.Respond(
295		resp,
296		azure.WithErrorUnlessStatusCode(http.StatusOK),
297		autorest.ByUnmarshallingJSON(&result),
298		autorest.ByClosing())
299	result.Response = autorest.Response{Response: resp}
300	return
301}
302
303// ListByAutomationAccount retrieve a list of modules.
304// Parameters:
305// resourceGroupName - name of an Azure Resource group.
306// automationAccountName - the name of the automation account.
307func (client ModuleClient) ListByAutomationAccount(ctx context.Context, resourceGroupName string, automationAccountName string) (result ModuleListResultPage, err error) {
308	if tracing.IsEnabled() {
309		ctx = tracing.StartSpan(ctx, fqdn+"/ModuleClient.ListByAutomationAccount")
310		defer func() {
311			sc := -1
312			if result.mlr.Response.Response != nil {
313				sc = result.mlr.Response.Response.StatusCode
314			}
315			tracing.EndSpan(ctx, sc, err)
316		}()
317	}
318	if err := validation.Validate([]validation.Validation{
319		{TargetValue: resourceGroupName,
320			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
321				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
322				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil {
323		return result, validation.NewError("automation.ModuleClient", "ListByAutomationAccount", err.Error())
324	}
325
326	result.fn = client.listByAutomationAccountNextResults
327	req, err := client.ListByAutomationAccountPreparer(ctx, resourceGroupName, automationAccountName)
328	if err != nil {
329		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "ListByAutomationAccount", nil, "Failure preparing request")
330		return
331	}
332
333	resp, err := client.ListByAutomationAccountSender(req)
334	if err != nil {
335		result.mlr.Response = autorest.Response{Response: resp}
336		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "ListByAutomationAccount", resp, "Failure sending request")
337		return
338	}
339
340	result.mlr, err = client.ListByAutomationAccountResponder(resp)
341	if err != nil {
342		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "ListByAutomationAccount", resp, "Failure responding to request")
343		return
344	}
345	if result.mlr.hasNextLink() && result.mlr.IsEmpty() {
346		err = result.NextWithContext(ctx)
347		return
348	}
349
350	return
351}
352
353// ListByAutomationAccountPreparer prepares the ListByAutomationAccount request.
354func (client ModuleClient) ListByAutomationAccountPreparer(ctx context.Context, resourceGroupName string, automationAccountName string) (*http.Request, error) {
355	pathParameters := map[string]interface{}{
356		"automationAccountName": autorest.Encode("path", automationAccountName),
357		"resourceGroupName":     autorest.Encode("path", resourceGroupName),
358		"subscriptionId":        autorest.Encode("path", client.SubscriptionID),
359	}
360
361	const APIVersion = "2015-10-31"
362	queryParameters := map[string]interface{}{
363		"api-version": APIVersion,
364	}
365
366	preparer := autorest.CreatePreparer(
367		autorest.AsGet(),
368		autorest.WithBaseURL(client.BaseURI),
369		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}/modules", pathParameters),
370		autorest.WithQueryParameters(queryParameters))
371	return preparer.Prepare((&http.Request{}).WithContext(ctx))
372}
373
374// ListByAutomationAccountSender sends the ListByAutomationAccount request. The method will close the
375// http.Response Body if it receives an error.
376func (client ModuleClient) ListByAutomationAccountSender(req *http.Request) (*http.Response, error) {
377	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
378}
379
380// ListByAutomationAccountResponder handles the response to the ListByAutomationAccount request. The method always
381// closes the http.Response Body.
382func (client ModuleClient) ListByAutomationAccountResponder(resp *http.Response) (result ModuleListResult, err error) {
383	err = autorest.Respond(
384		resp,
385		azure.WithErrorUnlessStatusCode(http.StatusOK),
386		autorest.ByUnmarshallingJSON(&result),
387		autorest.ByClosing())
388	result.Response = autorest.Response{Response: resp}
389	return
390}
391
392// listByAutomationAccountNextResults retrieves the next set of results, if any.
393func (client ModuleClient) listByAutomationAccountNextResults(ctx context.Context, lastResults ModuleListResult) (result ModuleListResult, err error) {
394	req, err := lastResults.moduleListResultPreparer(ctx)
395	if err != nil {
396		return result, autorest.NewErrorWithError(err, "automation.ModuleClient", "listByAutomationAccountNextResults", nil, "Failure preparing next results request")
397	}
398	if req == nil {
399		return
400	}
401	resp, err := client.ListByAutomationAccountSender(req)
402	if err != nil {
403		result.Response = autorest.Response{Response: resp}
404		return result, autorest.NewErrorWithError(err, "automation.ModuleClient", "listByAutomationAccountNextResults", resp, "Failure sending next results request")
405	}
406	result, err = client.ListByAutomationAccountResponder(resp)
407	if err != nil {
408		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "listByAutomationAccountNextResults", resp, "Failure responding to next results request")
409	}
410	return
411}
412
413// ListByAutomationAccountComplete enumerates all values, automatically crossing page boundaries as required.
414func (client ModuleClient) ListByAutomationAccountComplete(ctx context.Context, resourceGroupName string, automationAccountName string) (result ModuleListResultIterator, err error) {
415	if tracing.IsEnabled() {
416		ctx = tracing.StartSpan(ctx, fqdn+"/ModuleClient.ListByAutomationAccount")
417		defer func() {
418			sc := -1
419			if result.Response().Response.Response != nil {
420				sc = result.page.Response().Response.Response.StatusCode
421			}
422			tracing.EndSpan(ctx, sc, err)
423		}()
424	}
425	result.page, err = client.ListByAutomationAccount(ctx, resourceGroupName, automationAccountName)
426	return
427}
428
429// Update update the module identified by module name.
430// Parameters:
431// resourceGroupName - name of an Azure Resource group.
432// automationAccountName - the name of the automation account.
433// moduleName - the name of module.
434// parameters - the update parameters for module.
435func (client ModuleClient) Update(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string, parameters ModuleUpdateParameters) (result Module, err error) {
436	if tracing.IsEnabled() {
437		ctx = tracing.StartSpan(ctx, fqdn+"/ModuleClient.Update")
438		defer func() {
439			sc := -1
440			if result.Response.Response != nil {
441				sc = result.Response.Response.StatusCode
442			}
443			tracing.EndSpan(ctx, sc, err)
444		}()
445	}
446	if err := validation.Validate([]validation.Validation{
447		{TargetValue: resourceGroupName,
448			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
449				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
450				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil {
451		return result, validation.NewError("automation.ModuleClient", "Update", err.Error())
452	}
453
454	req, err := client.UpdatePreparer(ctx, resourceGroupName, automationAccountName, moduleName, parameters)
455	if err != nil {
456		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Update", nil, "Failure preparing request")
457		return
458	}
459
460	resp, err := client.UpdateSender(req)
461	if err != nil {
462		result.Response = autorest.Response{Response: resp}
463		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Update", resp, "Failure sending request")
464		return
465	}
466
467	result, err = client.UpdateResponder(resp)
468	if err != nil {
469		err = autorest.NewErrorWithError(err, "automation.ModuleClient", "Update", resp, "Failure responding to request")
470		return
471	}
472
473	return
474}
475
476// UpdatePreparer prepares the Update request.
477func (client ModuleClient) UpdatePreparer(ctx context.Context, resourceGroupName string, automationAccountName string, moduleName string, parameters ModuleUpdateParameters) (*http.Request, error) {
478	pathParameters := map[string]interface{}{
479		"automationAccountName": autorest.Encode("path", automationAccountName),
480		"moduleName":            autorest.Encode("path", moduleName),
481		"resourceGroupName":     autorest.Encode("path", resourceGroupName),
482		"subscriptionId":        autorest.Encode("path", client.SubscriptionID),
483	}
484
485	const APIVersion = "2015-10-31"
486	queryParameters := map[string]interface{}{
487		"api-version": APIVersion,
488	}
489
490	preparer := autorest.CreatePreparer(
491		autorest.AsContentType("application/json; charset=utf-8"),
492		autorest.AsPatch(),
493		autorest.WithBaseURL(client.BaseURI),
494		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}/modules/{moduleName}", pathParameters),
495		autorest.WithJSON(parameters),
496		autorest.WithQueryParameters(queryParameters))
497	return preparer.Prepare((&http.Request{}).WithContext(ctx))
498}
499
500// UpdateSender sends the Update request. The method will close the
501// http.Response Body if it receives an error.
502func (client ModuleClient) UpdateSender(req *http.Request) (*http.Response, error) {
503	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
504}
505
506// UpdateResponder handles the response to the Update request. The method always
507// closes the http.Response Body.
508func (client ModuleClient) UpdateResponder(resp *http.Response) (result Module, err error) {
509	err = autorest.Respond(
510		resp,
511		azure.WithErrorUnlessStatusCode(http.StatusOK),
512		autorest.ByUnmarshallingJSON(&result),
513		autorest.ByClosing())
514	result.Response = autorest.Response{Response: resp}
515	return
516}
517