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