1package postgresql
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// FirewallRulesClient is the the Microsoft Azure management API provides create, read, update, and delete
19// functionality for Azure PostgreSQL resources including servers, databases, firewall rules, VNET rules, security
20// alert policies, log files and configurations with new business model.
21type FirewallRulesClient struct {
22	BaseClient
23}
24
25// NewFirewallRulesClient creates an instance of the FirewallRulesClient client.
26func NewFirewallRulesClient(subscriptionID string) FirewallRulesClient {
27	return NewFirewallRulesClientWithBaseURI(DefaultBaseURI, subscriptionID)
28}
29
30// NewFirewallRulesClientWithBaseURI creates an instance of the FirewallRulesClient client using a custom endpoint.
31// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
32func NewFirewallRulesClientWithBaseURI(baseURI string, subscriptionID string) FirewallRulesClient {
33	return FirewallRulesClient{NewWithBaseURI(baseURI, subscriptionID)}
34}
35
36// CreateOrUpdate creates a new firewall rule or updates an existing firewall rule.
37// Parameters:
38// resourceGroupName - the name of the resource group. The name is case insensitive.
39// serverName - the name of the server.
40// firewallRuleName - the name of the server firewall rule.
41// parameters - the required parameters for creating or updating a firewall rule.
42func (client FirewallRulesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serverName string, firewallRuleName string, parameters FirewallRule) (result FirewallRulesCreateOrUpdateFuture, err error) {
43	if tracing.IsEnabled() {
44		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallRulesClient.CreateOrUpdate")
45		defer func() {
46			sc := -1
47			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
48				sc = result.FutureAPI.Response().StatusCode
49			}
50			tracing.EndSpan(ctx, sc, err)
51		}()
52	}
53	if err := validation.Validate([]validation.Validation{
54		{TargetValue: client.SubscriptionID,
55			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
56		{TargetValue: resourceGroupName,
57			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
58				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
59				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
60		{TargetValue: parameters,
61			Constraints: []validation.Constraint{{Target: "parameters.FirewallRuleProperties", Name: validation.Null, Rule: true,
62				Chain: []validation.Constraint{{Target: "parameters.FirewallRuleProperties.StartIPAddress", Name: validation.Null, Rule: true,
63					Chain: []validation.Constraint{{Target: "parameters.FirewallRuleProperties.StartIPAddress", Name: validation.Pattern, Rule: `^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$`, Chain: nil}}},
64					{Target: "parameters.FirewallRuleProperties.EndIPAddress", Name: validation.Null, Rule: true,
65						Chain: []validation.Constraint{{Target: "parameters.FirewallRuleProperties.EndIPAddress", Name: validation.Pattern, Rule: `^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$`, Chain: nil}}},
66				}}}}}); err != nil {
67		return result, validation.NewError("postgresql.FirewallRulesClient", "CreateOrUpdate", err.Error())
68	}
69
70	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, serverName, firewallRuleName, parameters)
71	if err != nil {
72		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "CreateOrUpdate", nil, "Failure preparing request")
73		return
74	}
75
76	result, err = client.CreateOrUpdateSender(req)
77	if err != nil {
78		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "CreateOrUpdate", nil, "Failure sending request")
79		return
80	}
81
82	return
83}
84
85// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
86func (client FirewallRulesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, serverName string, firewallRuleName string, parameters FirewallRule) (*http.Request, error) {
87	pathParameters := map[string]interface{}{
88		"firewallRuleName":  autorest.Encode("path", firewallRuleName),
89		"resourceGroupName": autorest.Encode("path", resourceGroupName),
90		"serverName":        autorest.Encode("path", serverName),
91		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
92	}
93
94	const APIVersion = "2017-12-01"
95	queryParameters := map[string]interface{}{
96		"api-version": APIVersion,
97	}
98
99	preparer := autorest.CreatePreparer(
100		autorest.AsContentType("application/json; charset=utf-8"),
101		autorest.AsPut(),
102		autorest.WithBaseURL(client.BaseURI),
103		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBForPostgreSQL/servers/{serverName}/firewallRules/{firewallRuleName}", pathParameters),
104		autorest.WithJSON(parameters),
105		autorest.WithQueryParameters(queryParameters))
106	return preparer.Prepare((&http.Request{}).WithContext(ctx))
107}
108
109// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
110// http.Response Body if it receives an error.
111func (client FirewallRulesClient) CreateOrUpdateSender(req *http.Request) (future FirewallRulesCreateOrUpdateFuture, err error) {
112	var resp *http.Response
113	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
114	if err != nil {
115		return
116	}
117	var azf azure.Future
118	azf, err = azure.NewFutureFromResponse(resp)
119	future.FutureAPI = &azf
120	future.Result = future.result
121	return
122}
123
124// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
125// closes the http.Response Body.
126func (client FirewallRulesClient) CreateOrUpdateResponder(resp *http.Response) (result FirewallRule, err error) {
127	err = autorest.Respond(
128		resp,
129		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted),
130		autorest.ByUnmarshallingJSON(&result),
131		autorest.ByClosing())
132	result.Response = autorest.Response{Response: resp}
133	return
134}
135
136// Delete deletes a server firewall rule.
137// Parameters:
138// resourceGroupName - the name of the resource group. The name is case insensitive.
139// serverName - the name of the server.
140// firewallRuleName - the name of the server firewall rule.
141func (client FirewallRulesClient) Delete(ctx context.Context, resourceGroupName string, serverName string, firewallRuleName string) (result FirewallRulesDeleteFuture, err error) {
142	if tracing.IsEnabled() {
143		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallRulesClient.Delete")
144		defer func() {
145			sc := -1
146			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
147				sc = result.FutureAPI.Response().StatusCode
148			}
149			tracing.EndSpan(ctx, sc, err)
150		}()
151	}
152	if err := validation.Validate([]validation.Validation{
153		{TargetValue: client.SubscriptionID,
154			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
155		{TargetValue: resourceGroupName,
156			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
157				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
158				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
159		return result, validation.NewError("postgresql.FirewallRulesClient", "Delete", err.Error())
160	}
161
162	req, err := client.DeletePreparer(ctx, resourceGroupName, serverName, firewallRuleName)
163	if err != nil {
164		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "Delete", nil, "Failure preparing request")
165		return
166	}
167
168	result, err = client.DeleteSender(req)
169	if err != nil {
170		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "Delete", nil, "Failure sending request")
171		return
172	}
173
174	return
175}
176
177// DeletePreparer prepares the Delete request.
178func (client FirewallRulesClient) DeletePreparer(ctx context.Context, resourceGroupName string, serverName string, firewallRuleName string) (*http.Request, error) {
179	pathParameters := map[string]interface{}{
180		"firewallRuleName":  autorest.Encode("path", firewallRuleName),
181		"resourceGroupName": autorest.Encode("path", resourceGroupName),
182		"serverName":        autorest.Encode("path", serverName),
183		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
184	}
185
186	const APIVersion = "2017-12-01"
187	queryParameters := map[string]interface{}{
188		"api-version": APIVersion,
189	}
190
191	preparer := autorest.CreatePreparer(
192		autorest.AsDelete(),
193		autorest.WithBaseURL(client.BaseURI),
194		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBForPostgreSQL/servers/{serverName}/firewallRules/{firewallRuleName}", pathParameters),
195		autorest.WithQueryParameters(queryParameters))
196	return preparer.Prepare((&http.Request{}).WithContext(ctx))
197}
198
199// DeleteSender sends the Delete request. The method will close the
200// http.Response Body if it receives an error.
201func (client FirewallRulesClient) DeleteSender(req *http.Request) (future FirewallRulesDeleteFuture, err error) {
202	var resp *http.Response
203	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
204	if err != nil {
205		return
206	}
207	var azf azure.Future
208	azf, err = azure.NewFutureFromResponse(resp)
209	future.FutureAPI = &azf
210	future.Result = future.result
211	return
212}
213
214// DeleteResponder handles the response to the Delete request. The method always
215// closes the http.Response Body.
216func (client FirewallRulesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
217	err = autorest.Respond(
218		resp,
219		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
220		autorest.ByClosing())
221	result.Response = resp
222	return
223}
224
225// Get gets information about a server firewall rule.
226// Parameters:
227// resourceGroupName - the name of the resource group. The name is case insensitive.
228// serverName - the name of the server.
229// firewallRuleName - the name of the server firewall rule.
230func (client FirewallRulesClient) Get(ctx context.Context, resourceGroupName string, serverName string, firewallRuleName string) (result FirewallRule, err error) {
231	if tracing.IsEnabled() {
232		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallRulesClient.Get")
233		defer func() {
234			sc := -1
235			if result.Response.Response != nil {
236				sc = result.Response.Response.StatusCode
237			}
238			tracing.EndSpan(ctx, sc, err)
239		}()
240	}
241	if err := validation.Validate([]validation.Validation{
242		{TargetValue: client.SubscriptionID,
243			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
244		{TargetValue: resourceGroupName,
245			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
246				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
247				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
248		return result, validation.NewError("postgresql.FirewallRulesClient", "Get", err.Error())
249	}
250
251	req, err := client.GetPreparer(ctx, resourceGroupName, serverName, firewallRuleName)
252	if err != nil {
253		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "Get", nil, "Failure preparing request")
254		return
255	}
256
257	resp, err := client.GetSender(req)
258	if err != nil {
259		result.Response = autorest.Response{Response: resp}
260		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "Get", resp, "Failure sending request")
261		return
262	}
263
264	result, err = client.GetResponder(resp)
265	if err != nil {
266		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "Get", resp, "Failure responding to request")
267		return
268	}
269
270	return
271}
272
273// GetPreparer prepares the Get request.
274func (client FirewallRulesClient) GetPreparer(ctx context.Context, resourceGroupName string, serverName string, firewallRuleName string) (*http.Request, error) {
275	pathParameters := map[string]interface{}{
276		"firewallRuleName":  autorest.Encode("path", firewallRuleName),
277		"resourceGroupName": autorest.Encode("path", resourceGroupName),
278		"serverName":        autorest.Encode("path", serverName),
279		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
280	}
281
282	const APIVersion = "2017-12-01"
283	queryParameters := map[string]interface{}{
284		"api-version": APIVersion,
285	}
286
287	preparer := autorest.CreatePreparer(
288		autorest.AsGet(),
289		autorest.WithBaseURL(client.BaseURI),
290		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBForPostgreSQL/servers/{serverName}/firewallRules/{firewallRuleName}", pathParameters),
291		autorest.WithQueryParameters(queryParameters))
292	return preparer.Prepare((&http.Request{}).WithContext(ctx))
293}
294
295// GetSender sends the Get request. The method will close the
296// http.Response Body if it receives an error.
297func (client FirewallRulesClient) GetSender(req *http.Request) (*http.Response, error) {
298	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
299}
300
301// GetResponder handles the response to the Get request. The method always
302// closes the http.Response Body.
303func (client FirewallRulesClient) GetResponder(resp *http.Response) (result FirewallRule, err error) {
304	err = autorest.Respond(
305		resp,
306		azure.WithErrorUnlessStatusCode(http.StatusOK),
307		autorest.ByUnmarshallingJSON(&result),
308		autorest.ByClosing())
309	result.Response = autorest.Response{Response: resp}
310	return
311}
312
313// ListByServer list all the firewall rules in a given server.
314// Parameters:
315// resourceGroupName - the name of the resource group. The name is case insensitive.
316// serverName - the name of the server.
317func (client FirewallRulesClient) ListByServer(ctx context.Context, resourceGroupName string, serverName string) (result FirewallRuleListResult, err error) {
318	if tracing.IsEnabled() {
319		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallRulesClient.ListByServer")
320		defer func() {
321			sc := -1
322			if result.Response.Response != nil {
323				sc = result.Response.Response.StatusCode
324			}
325			tracing.EndSpan(ctx, sc, err)
326		}()
327	}
328	if err := validation.Validate([]validation.Validation{
329		{TargetValue: client.SubscriptionID,
330			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}},
331		{TargetValue: resourceGroupName,
332			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
333				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
334				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
335		return result, validation.NewError("postgresql.FirewallRulesClient", "ListByServer", err.Error())
336	}
337
338	req, err := client.ListByServerPreparer(ctx, resourceGroupName, serverName)
339	if err != nil {
340		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "ListByServer", nil, "Failure preparing request")
341		return
342	}
343
344	resp, err := client.ListByServerSender(req)
345	if err != nil {
346		result.Response = autorest.Response{Response: resp}
347		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "ListByServer", resp, "Failure sending request")
348		return
349	}
350
351	result, err = client.ListByServerResponder(resp)
352	if err != nil {
353		err = autorest.NewErrorWithError(err, "postgresql.FirewallRulesClient", "ListByServer", resp, "Failure responding to request")
354		return
355	}
356
357	return
358}
359
360// ListByServerPreparer prepares the ListByServer request.
361func (client FirewallRulesClient) ListByServerPreparer(ctx context.Context, resourceGroupName string, serverName string) (*http.Request, error) {
362	pathParameters := map[string]interface{}{
363		"resourceGroupName": autorest.Encode("path", resourceGroupName),
364		"serverName":        autorest.Encode("path", serverName),
365		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
366	}
367
368	const APIVersion = "2017-12-01"
369	queryParameters := map[string]interface{}{
370		"api-version": APIVersion,
371	}
372
373	preparer := autorest.CreatePreparer(
374		autorest.AsGet(),
375		autorest.WithBaseURL(client.BaseURI),
376		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBForPostgreSQL/servers/{serverName}/firewallRules", pathParameters),
377		autorest.WithQueryParameters(queryParameters))
378	return preparer.Prepare((&http.Request{}).WithContext(ctx))
379}
380
381// ListByServerSender sends the ListByServer request. The method will close the
382// http.Response Body if it receives an error.
383func (client FirewallRulesClient) ListByServerSender(req *http.Request) (*http.Response, error) {
384	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
385}
386
387// ListByServerResponder handles the response to the ListByServer request. The method always
388// closes the http.Response Body.
389func (client FirewallRulesClient) ListByServerResponder(resp *http.Response) (result FirewallRuleListResult, err error) {
390	err = autorest.Respond(
391		resp,
392		azure.WithErrorUnlessStatusCode(http.StatusOK),
393		autorest.ByUnmarshallingJSON(&result),
394		autorest.ByClosing())
395	result.Response = autorest.Response{Response: resp}
396	return
397}
398