diff --git a/Makefile b/Makefile index 760cc387ac3..c6bdf5fd803 100644 --- a/Makefile +++ b/Makefile @@ -31,18 +31,6 @@ api-test: generate fmt vet manifests TEST_USE_EXISTING_CLUSTER=false go test -v -coverprofile=coverage.txt -covermode count ./api/... 2>&1 | tee testlogs.txt go-junit-report < testlogs.txt > report.xml go tool cover -html=coverage.txt -o cover.html - -# Generate test certs for development -generate-test-certs: - echo "[req]" > config.txt - echo "distinguished_name = req_distinguished_name" >> config.txt - echo "[req_distinguished_name]" >> config.txt - echo "[SAN]" >> config.txt - echo "subjectAltName=DNS:azureoperator-webhook-service.azureoperator-system.svc.cluster.local" >> config.txt - openssl req -x509 -days 730 -out tls.crt -keyout tls.key -newkey rsa:4096 -subj "/CN=azureoperator-webhook-service.azureoperator-system" -config config.txt -nodes - rm -rf /tmp/k8s-webhook-server - mkdir -p /tmp/k8s-webhook-server/serving-certs - mv tls.* /tmp/k8s-webhook-server/serving-certs/ # Run tests test: generate fmt vet manifests diff --git a/api/v1/sqlfirewallrule_types.go b/api/v1/sqlfirewallrule_types.go index 2828d8f4b22..69c5e4c0066 100644 --- a/api/v1/sqlfirewallrule_types.go +++ b/api/v1/sqlfirewallrule_types.go @@ -26,6 +26,7 @@ import ( type SqlFirewallRuleSpec struct { // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster // Important: Run "make" to regenerate code after modifying this file + ResourceGroup string `json:"resourcegroup,omitempty"` Server string `json:"server"` StartIPAddress string `json:"startipaddress,omitempty"` EndIPAddress string `json:"endipaddress,omitempty"` diff --git a/api/v1/sqlserver_types.go b/api/v1/sqlserver_types.go index 8091219c7a8..8b76f82e796 100644 --- a/api/v1/sqlserver_types.go +++ b/api/v1/sqlserver_types.go @@ -26,9 +26,8 @@ import ( type SqlServerSpec struct { // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster // Important: Run "make" to regenerate code after modifying this file - Location string `json:"location"` - ResourceGroup string `json:"resourcegroup,omitempty"` - AllowAzureServiceAccess bool `json:"allowazureserviceaccess,omitempty"` + Location string `json:"location"` + ResourceGroup string `json:"resourcegroup,omitempty"` } // SqlServerStatus defines the observed state of SqlServer diff --git a/api/v1/sqlserver_types_test.go b/api/v1/sqlserver_types_test.go index 6c4a257cf6e..e712df23209 100644 --- a/api/v1/sqlserver_types_test.go +++ b/api/v1/sqlserver_types_test.go @@ -59,9 +59,8 @@ var _ = Describe("SqlServer", func() { Namespace: "default", }, Spec: SqlServerSpec{ - Location: "westus", - ResourceGroup: "foo-resourcegroup", - AllowAzureServiceAccess: true, + Location: "westus", + ResourceGroup: "foo-resourcegroup", }} By("creating an API obj") diff --git a/config/samples/azure_v1_consumergroup.yaml b/config/samples/azure_v1_consumergroup.yaml index 0adc1b19143..fce86d853ce 100644 --- a/config/samples/azure_v1_consumergroup.yaml +++ b/config/samples/azure_v1_consumergroup.yaml @@ -4,6 +4,6 @@ metadata: name: consumergroup-sample-1 spec: # Add fields here - resourcegroup: "resourcegroup-sample-1" + resourcegroup: resourcegroup-azure-operators namespace: "eventhubnamespace-sample-1" eventHub: "eventhub-sample-2" diff --git a/config/samples/azure_v1_cosmosdb.yaml b/config/samples/azure_v1_cosmosdb.yaml index 0741c205517..909479b6b4b 100644 --- a/config/samples/azure_v1_cosmosdb.yaml +++ b/config/samples/azure_v1_cosmosdb.yaml @@ -5,6 +5,6 @@ metadata: spec: kind: GlobalDocumentDB location: westus - resourceGroup: resourcegroup-sample-1908 + resourceGroup: resourcegroup-azure-operators properties: databaseAccountOfferType: Standard diff --git a/config/samples/azure_v1_eventhub.yaml b/config/samples/azure_v1_eventhub.yaml index 5c57b014ab1..d2d4cbc8d24 100644 --- a/config/samples/azure_v1_eventhub.yaml +++ b/config/samples/azure_v1_eventhub.yaml @@ -4,7 +4,7 @@ metadata: name: eventhub-sample-2307-09 spec: location: "westus" - resourceGroup: "resourcegroup-sample-1907" + resourceGroup: resourcegroup-azure-operators namespace: "eventhubnamespace-sample-6" properties: messageRetentionInDays: 7 diff --git a/config/samples/azure_v1_eventhub_capture.yaml b/config/samples/azure_v1_eventhub_capture.yaml index a074c643e2e..b39a8b83265 100644 --- a/config/samples/azure_v1_eventhub_capture.yaml +++ b/config/samples/azure_v1_eventhub_capture.yaml @@ -4,7 +4,7 @@ metadata: name: eventhub-sample-2307-10-capture spec: location: "westus" - resourceGroup: "resourcegroup-sample-1907" + resourceGroup: resourcegroup-azure-operators namespace: "eventhubnamespace-sample-6" properties: messageRetentionInDays: 7 diff --git a/config/samples/azure_v1_eventhubnamespace.yaml b/config/samples/azure_v1_eventhubnamespace.yaml index 83b61d10c53..a673f59edc9 100644 --- a/config/samples/azure_v1_eventhubnamespace.yaml +++ b/config/samples/azure_v1_eventhubnamespace.yaml @@ -4,7 +4,7 @@ metadata: name: eventhubnamespace-sample-6 spec: location: "westus" - resourceGroup: "resourcegroup-sample-1907" + resourceGroup: resourcegroup-azure-operators sku: name: "Standard" tier: "Standard" diff --git a/config/samples/azure_v1_keyvault.yaml b/config/samples/azure_v1_keyvault.yaml index d8c31d4d289..02bb9a1b824 100644 --- a/config/samples/azure_v1_keyvault.yaml +++ b/config/samples/azure_v1_keyvault.yaml @@ -3,5 +3,5 @@ kind: KeyVault metadata: name: keyvaultsample123 spec: - resourceGroup: resourcegroup-sample-6 + resourceGroup: resourcegroup-azure-operators location: westus diff --git a/config/samples/azure_v1_rediscache.yaml b/config/samples/azure_v1_rediscache.yaml index a78959b3dfd..2259bf4c06a 100644 --- a/config/samples/azure_v1_rediscache.yaml +++ b/config/samples/azure_v1_rediscache.yaml @@ -4,7 +4,7 @@ metadata: name: rediscache-sample1908xyzkj spec: location: westus - resourceGroup: resourcegroup-sample-1908 + resourceGroup: resourcegroup-azure-operators properties: sku: name: Basic diff --git a/config/samples/azure_v1_resourcegroup.yaml b/config/samples/azure_v1_resourcegroup.yaml index fe67d8499f0..7049492d57a 100644 --- a/config/samples/azure_v1_resourcegroup.yaml +++ b/config/samples/azure_v1_resourcegroup.yaml @@ -1,6 +1,6 @@ apiVersion: azure.microsoft.com/v1 kind: ResourceGroup metadata: - name: resourcegroup-sample-1907 + name: resourcegroup-azure-operators spec: location: "westus" diff --git a/config/samples/azure_v1_sqldatabase.yaml b/config/samples/azure_v1_sqldatabase.yaml index 960d6f7b712..4c252c33b1c 100644 --- a/config/samples/azure_v1_sqldatabase.yaml +++ b/config/samples/azure_v1_sqldatabase.yaml @@ -4,6 +4,6 @@ metadata: name: sqldatabase-sample spec: location: westus - resourcegroup: resourcegroup-sample-1907 - edition: 0 - server: sqlserver-sample + resourcegroup: resourcegroup-azure-operators + server: sqlserver-sample-777 + edition: 0 \ No newline at end of file diff --git a/config/samples/azure_v1_sqlfirewallrule.yaml b/config/samples/azure_v1_sqlfirewallrule.yaml index c8587326db4..b3b3b7fc127 100644 --- a/config/samples/azure_v1_sqlfirewallrule.yaml +++ b/config/samples/azure_v1_sqlfirewallrule.yaml @@ -1,8 +1,11 @@ apiVersion: azure.microsoft.com/v1 kind: SqlFirewallRule metadata: - name: sqlfirewallrule-sample + name: sqlf-allowazuresvcaccess spec: - server: sqlserver-sample - startipaddress: 1.1.1.1 - endipaddress: 6.6.6.6 + resourcegroup: resourcegroup-azure-operators + server: sqlserver-sample-777 + + # this IP range enables Azure Service access + startipaddress: 0.0.0.0 + endipaddress: 0.0.0.0 diff --git a/config/samples/azure_v1_sqlserver.yaml b/config/samples/azure_v1_sqlserver.yaml index 9da047d5282..efd1a734995 100644 --- a/config/samples/azure_v1_sqlserver.yaml +++ b/config/samples/azure_v1_sqlserver.yaml @@ -1,8 +1,7 @@ apiVersion: azure.microsoft.com/v1 kind: SqlServer metadata: - name: sqlserver-sample + name: sqlserver-sample-777 spec: location: "westus" - resourcegroup: "resourcegroup-sample-1907" - allowazureserviceaccess: true + resourcegroup: resourcegroup-azure-operators diff --git a/config/samples/azure_v1_storage.yaml b/config/samples/azure_v1_storage.yaml index 4e2ad323841..1b4e1b2302f 100644 --- a/config/samples/azure_v1_storage.yaml +++ b/config/samples/azure_v1_storage.yaml @@ -4,7 +4,7 @@ metadata: name: storagesample1908ayzkj spec: location: westus - resourceGroup: resourcegroup-sample-1908 + resourceGroup: resourcegroup-azure-operators sku: name: Standard_RAGRS kind: StorageV2 diff --git a/controllers/sqldatabase_controller.go b/controllers/sqldatabase_controller.go index 150f0fd182f..a68b8440b1b 100644 --- a/controllers/sqldatabase_controller.go +++ b/controllers/sqldatabase_controller.go @@ -120,11 +120,10 @@ func (r *SqlDatabaseReconciler) SetupWithManager(mgr ctrl.Manager) error { func (r *SqlDatabaseReconciler) reconcileExternal(instance *azurev1.SqlDatabase) error { ctx := context.Background() location := instance.Spec.Location - server := instance.Spec.Server groupName := instance.Spec.ResourceGroup - dbEdition := instance.Spec.Edition - + server := instance.Spec.Server dbName := instance.ObjectMeta.Name + dbEdition := instance.Spec.Edition sdkClient := sql.GoSDKClient{ Ctx: ctx, @@ -146,7 +145,6 @@ func (r *SqlDatabaseReconciler) reconcileExternal(instance *azurev1.SqlDatabase) var ownerInstance azurev1.SqlServer sqlServerNamespacedName := types.NamespacedName{Name: server, Namespace: instance.Namespace} err := r.Get(ctx, sqlServerNamespacedName, &ownerInstance) - if err != nil { //log error and kill it, as the parent might not exist in the cluster. It could have been created elsewhere or through the portal directly r.Recorder.Event(instance, "Warning", "Failed", "Unable to get owner instance of SqlServer") @@ -194,10 +192,10 @@ func (r *SqlDatabaseReconciler) reconcileExternal(instance *azurev1.SqlDatabase) func (r *SqlDatabaseReconciler) deleteExternal(instance *azurev1.SqlDatabase) error { ctx := context.Background() - dbname := instance.ObjectMeta.Name + location := instance.Spec.Location groupName := instance.Spec.ResourceGroup server := instance.Spec.Server - location := instance.Spec.Location + dbName := instance.ObjectMeta.Name // create the Go SDK client with relevant info sdk := sql.GoSDKClient{ @@ -207,8 +205,8 @@ func (r *SqlDatabaseReconciler) deleteExternal(instance *azurev1.SqlDatabase) er Location: location, } - r.Log.Info(fmt.Sprintf("deleting external resource: group/%s/server/%s/database/%s"+groupName, server, dbname)) - _, err := sdk.DeleteDB(dbname) + r.Log.Info(fmt.Sprintf("deleting external resource: group/%s/server/%s/database/%s"+groupName, server, dbName)) + _, err := sdk.DeleteDB(dbName) if err != nil { if errhelp.IsStatusCode204(err) { r.Recorder.Event(instance, "Warning", "DoesNotExist", "Resource to delete does not exist") @@ -218,7 +216,7 @@ func (r *SqlDatabaseReconciler) deleteExternal(instance *azurev1.SqlDatabase) er r.Recorder.Event(instance, "Warning", "Failed", "Couldn't delete resouce in azure") return err } - r.Recorder.Event(instance, "Normal", "Deleted", dbname+" deleted") + r.Recorder.Event(instance, "Normal", "Deleted", dbName+" deleted") return nil } diff --git a/controllers/sqlfirewallrule_controller.go b/controllers/sqlfirewallrule_controller.go index 145d05a040b..3f421a1304f 100644 --- a/controllers/sqlfirewallrule_controller.go +++ b/controllers/sqlfirewallrule_controller.go @@ -118,44 +118,42 @@ func (r *SqlFirewallRuleReconciler) SetupWithManager(mgr ctrl.Manager) error { func (r *SqlFirewallRuleReconciler) reconcileExternal(instance *azurev1.SqlFirewallRule) error { ctx := context.Background() - ruleName := instance.ObjectMeta.Name + groupName := instance.Spec.ResourceGroup server := instance.Spec.Server + ruleName := instance.ObjectMeta.Name startIP := instance.Spec.StartIPAddress endIP := instance.Spec.EndIPAddress + sdkClient := sql.GoSDKClient{ + Ctx: ctx, + ResourceGroupName: groupName, + ServerName: server, + } + r.Log.Info("Calling createorupdate SQL firewall rule") - // get owner instance of SqlServer + //get owner instance of SqlServer r.Recorder.Event(instance, "Normal", "UpdatingOwner", "Updating owner SqlServer instance") var ownerInstance azurev1.SqlServer sqlServerNamespacedName := types.NamespacedName{Name: server, Namespace: instance.Namespace} err := r.Get(ctx, sqlServerNamespacedName, &ownerInstance) if err != nil { //log error and kill it, as the parent might not exist in the cluster. It could have been created elsewhere or through the portal directly - r.Recorder.Event(instance, "Warning", "Failed", "Unable to get owner instance of SqlServer when setting firewall parent") - return err - } - - // set owner instance to the SqlServer instance - r.Recorder.Event(instance, "Normal", "OwnerAssign", "Got owner instance of Sql Server and assigning controller reference now") - err = controllerutil.SetControllerReference(&ownerInstance, instance, r.Scheme) - if err != nil { - r.Recorder.Event(instance, "Warning", "Failed", "Unable to set controller reference to SqlServer") - return err + r.Recorder.Event(instance, "Warning", "Failed", "Unable to get owner instance of SqlServer") + } else { + r.Recorder.Event(instance, "Normal", "OwnerAssign", "Got owner instance of Sql Server and assigning controller reference now") + innerErr := controllerutil.SetControllerReference(&ownerInstance, instance, r.Scheme) + if innerErr != nil { + r.Recorder.Event(instance, "Warning", "Failed", "Unable to set controller reference to SqlServer") + } + r.Recorder.Event(instance, "Normal", "OwnerAssign", "Owner instance assigned successfully") } - r.Recorder.Event(instance, "Normal", "OwnerAssign", "Owner instance assigned successfully") // write information back to instance if err := r.Update(ctx, instance); err != nil { r.Recorder.Event(instance, "Warning", "Failed", "Unable to update instance") } - // actually add the firewall rule - sdkClient := sql.GoSDKClient{ - Ctx: ctx, - ResourceGroupName: ownerInstance.Spec.ResourceGroup, - ServerName: server, - } _, err = sdkClient.CreateOrUpdateSQLFirewallRule(ruleName, startIP, endIP) if err != nil { if errhelp.IsAsynchronousOperationNotComplete(err) || errhelp.IsGroupNotFound(err) { @@ -186,19 +184,9 @@ func (r *SqlFirewallRuleReconciler) reconcileExternal(instance *azurev1.SqlFirew func (r *SqlFirewallRuleReconciler) deleteExternal(instance *azurev1.SqlFirewallRule) error { ctx := context.Background() - ruleName := instance.ObjectMeta.Name + groupName := instance.Spec.ResourceGroup server := instance.Spec.Server - - //get owner instance of SqlServer - var ownerInstance azurev1.SqlServer - sqlServerNamespacedName := types.NamespacedName{Name: server, Namespace: instance.Namespace} - err := r.Get(ctx, sqlServerNamespacedName, &ownerInstance) - if err != nil { - //log error and kill it, as the parent might not exist in the cluster. It could have been created elsewhere or through the portal directly - r.Recorder.Event(instance, "Warning", "DoesNotExist", "Unable to get owner instance of SqlServer when removing firewall rule (OK)") - return nil - } - groupName := ownerInstance.Spec.ResourceGroup + ruleName := instance.ObjectMeta.Name // create the Go SDK client with relevant info sdk := sql.GoSDKClient{ @@ -208,7 +196,7 @@ func (r *SqlFirewallRuleReconciler) deleteExternal(instance *azurev1.SqlFirewall } r.Log.Info(fmt.Sprintf("deleting external resource: group/%s/server/%s/firewallrule/%s"+groupName, server, ruleName)) - err = sdk.DeleteSQLFirewallRule(ruleName) + err := sdk.DeleteSQLFirewallRule(ruleName) if err != nil { if errhelp.IsStatusCode204(err) { r.Recorder.Event(instance, "Warning", "DoesNotExist", "Resource to delete does not exist") diff --git a/controllers/sqlserver_controller.go b/controllers/sqlserver_controller.go index f742a096edf..f62681a5b8c 100644 --- a/controllers/sqlserver_controller.go +++ b/controllers/sqlserver_controller.go @@ -72,17 +72,6 @@ func (r *SqlServerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { return ctrl.Result{}, client.IgnoreNotFound(err) } - location := instance.Spec.Location - name := instance.ObjectMeta.Name - groupName := instance.Spec.ResourceGroup - - sdkClient := sql.GoSDKClient{ - Ctx: ctx, - ResourceGroupName: groupName, - ServerName: name, - Location: location, - } - if helpers.IsBeingDeleted(&instance) { if helpers.HasFinalizer(&instance, SQLServerFinalizerName) { if err := r.deleteExternal(&instance); err != nil { @@ -115,16 +104,27 @@ func (r *SqlServerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { } } - availableResp, err := sdkClient.CheckNameAvailability() - if err != nil { - log.Info("error validating name") - return ctrl.Result{}, err - } - if !availableResp.Available { - log.Info("Servername is invalid or not available") - r.Recorder.Event(&instance, "Warning", "Failed", "Servername is invalid") - return ctrl.Result{Requeue: false}, fmt.Errorf("Servername invalid %s", availableResp.Name) - } + /* + location := instance.Spec.Location + name := instance.ObjectMeta.Name + groupName := instance.Spec.ResourceGroup + sdkClient := sql.GoSDKClient{ + Ctx: ctx, + ResourceGroupName: groupName, + ServerName: name, + Location: location, + } + availableResp, err := sdkClient.CheckNameAvailability() + if err != nil { + log.Info("error validating name") + return ctrl.Result{}, err + } + if !availableResp.Available { + log.Info("Servername is invalid or not available") + r.Recorder.Event(&instance, "Warning", "Failed", "Servername is invalid") + return ctrl.Result{Requeue: false}, fmt.Errorf("Servername invalid %s", availableResp.Name) + } + */ // availableResp, err := sdkClient.CheckNameAvailability() // if err != nil { @@ -272,15 +272,6 @@ func (r *SqlServerReconciler) verifyExternal(instance *azurev1.SqlServer) error r.Recorder.Event(instance, "Normal", "Checking", fmt.Sprintf("instance in %s state", instance.Status.State)) if instance.Status.State == "Ready" { - - if instance.Spec.AllowAzureServiceAccess == true { - // Add firewall rule to allow azure service access - _, err := sdkClient.CreateOrUpdateSQLFirewallRule("AllowAzureAccess", "0.0.0.0", "0.0.0.0") - if err != nil { - r.Recorder.Event(instance, "Warning", "Failed", "Unable to add firewall rule to SQL server") - return errhelp.NewAzureError(err) - } - } instance.Status.Provisioned = true instance.Status.Provisioning = false } diff --git a/pkg/resourcemanager/sqlclient/resourceclient.go b/pkg/resourcemanager/sqlclient/resourceclient.go index f8ef15e3e31..bb107aec03a 100644 --- a/pkg/resourcemanager/sqlclient/resourceclient.go +++ b/pkg/resourcemanager/sqlclient/resourceclient.go @@ -16,12 +16,10 @@ type ResourceClient interface { CreateOrUpdateSQLFirewallRule(ruleName string, startIP string, endIP string) (result bool, err error) CreateOrUpdateDB(properties SQLDatabaseProperties) (result sql.Database, err error) GetServer() (result sql.Server, err error) - GetDB(databaseName string) (sql.Database, error) GetSQLFirewallRule(ruleName string) (result sql.FirewallRule, err error) + GetDB(databaseName string) (sql.Database, error) DeleteDB(databaseName string) (result autorest.Response, err error) - DeleteSQLServer() (result autorest.Response, err error) DeleteSQLFirewallRule(ruleName string) (err error) - GetServer() (result sql.Server, err error) - IsAsyncNotCompleted(err error) (result bool) + DeleteSQLServer() (result autorest.Response, err error) CheckNameAvailability() (result AvailabilityResponse, err error) -} \ No newline at end of file +} diff --git a/pkg/resourcemanager/sqlclient/sqlclient_godsk.go b/pkg/resourcemanager/sqlclient/sqlclient_godsk.go index bf8de3bd084..3f9278d8632 100644 --- a/pkg/resourcemanager/sqlclient/sqlclient_godsk.go +++ b/pkg/resourcemanager/sqlclient/sqlclient_godsk.go @@ -7,7 +7,6 @@ package sqlclient import ( "net/http" - "strings" "github.com/Azure/azure-sdk-for-go/services/preview/sql/mgmt/2015-05-01-preview/sql" "github.com/Azure/azure-service-operator/pkg/resourcemanager/config" @@ -36,10 +35,6 @@ func getGoDbClient() sql.DatabasesClient { return dbClient } -func NewDBClient() sql.DatabasesClient { - return getGoDbClient() -} - // getGoFirewallClient retrieves a FirewallRulesClient func getGoFirewallClient() sql.FirewallRulesClient { firewallClient := sql.NewFirewallRulesClient(config.SubscriptionID()) @@ -74,19 +69,14 @@ func (sdk GoSDKClient) CreateOrUpdateSQLServer(properties SQLServerProperties) ( // based on code from: https://github.com/Azure-Samples/azure-sdk-for-go-samples/blob/master/sql/sql.go#L111 // to allow allow Azure services to connect example: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure#manage-firewall-rules-using-azure-cli func (sdk GoSDKClient) CreateOrUpdateSQLFirewallRule(ruleName string, startIP string, endIP string) (result bool, err error) { - serversClient := getGoServersClient() - firewallClient := getGoFirewallClient() // check to see if the server exists, if it doesn't then short-circuit - server, err := serversClient.Get( - sdk.Ctx, - sdk.ResourceGroupName, - sdk.ServerName, - ) + server, err := sdk.GetServer() if err != nil || *server.State != "Ready" { return false, err } + firewallClient := getGoFirewallClient() _, err = firewallClient.CreateOrUpdate( sdk.Ctx, sdk.ResourceGroupName, @@ -134,28 +124,28 @@ func (sdk GoSDKClient) GetServer() (result sql.Server, err error) { ) } -// GetDB retrieves a database -func (sdk GoSDKClient) GetDB(databaseName string) (sql.Database, error) { - dbClient := getGoDbClient() +// GetSQLFirewallRule returns a firewall rule +func (sdk GoSDKClient) GetSQLFirewallRule(ruleName string) (result sql.FirewallRule, err error) { + firewallClient := getGoFirewallClient() - return dbClient.Get( + return firewallClient.Get( sdk.Ctx, sdk.ResourceGroupName, sdk.ServerName, - databaseName, - "serviceTierAdvisors, transparentDataEncryption", + ruleName, ) } -// GetSQLFirewallRule returns a firewall rule -func (sdk GoSDKClient) GetSQLFirewallRule(ruleName string) (result sql.FirewallRule, err error) { - firewallClient := getGoFirewallClient() +// GetDB retrieves a database +func (sdk GoSDKClient) GetDB(databaseName string) (sql.Database, error) { + dbClient := getGoDbClient() - return firewallClient.Get( + return dbClient.Get( sdk.Ctx, sdk.ResourceGroupName, sdk.ServerName, - ruleName, + databaseName, + "serviceTierAdvisors, transparentDataEncryption", ) } @@ -243,17 +233,6 @@ func (sdk GoSDKClient) DeleteSQLServer() (result autorest.Response, err error) { return future.Result(serversClient) } -// IsAsyncNotCompleted returns true if the error is due to async not completed -func (sdk GoSDKClient) IsAsyncNotCompleted(err error) (result bool) { - result = false - if err != nil && strings.Contains(err.Error(), "asynchronous operation has not completed") { - result = true - } else if strings.Contains(err.Error(), "is busy with another operation") { - result = true - } - return result -} - // CheckNameAvailability determines whether a SQL resource can be created with the specified name func (sdk GoSDKClient) CheckNameAvailability() (result AvailabilityResponse, err error) { serversClient := getGoServersClient() diff --git a/pkg/resourcemanager/sqlclient/sqlproperties.go b/pkg/resourcemanager/sqlclient/sqlproperties.go index e469d6217fd..299401b3414 100644 --- a/pkg/resourcemanager/sqlclient/sqlproperties.go +++ b/pkg/resourcemanager/sqlclient/sqlproperties.go @@ -139,9 +139,9 @@ func translateDBEdition(in DBEdition) (result sql.DatabaseEdition) { // AvailabilityResponse is the response for checking name validation type AvailabilityResponse struct { - Available bool - Message string - Name string + Available bool + Message string + Name string } // ToAvailabilityResponse converts CheckNameAvailabilityResponse to AvailabilityResponse