providers/azure/database.go (796 lines of code) (raw):

// Copyright 2019 The Terraformer Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azure import ( "context" "fmt" "strings" "github.com/Azure/azure-sdk-for-go/services/mariadb/mgmt/2018-06-01/mariadb" "github.com/Azure/azure-sdk-for-go/services/mysql/mgmt/2017-12-01/mysql" "github.com/Azure/azure-sdk-for-go/services/postgresql/mgmt/2017-12-01/postgresql" "github.com/Azure/azure-sdk-for-go/services/preview/sql/mgmt/2017-03-01-preview/sql" "github.com/Azure/go-autorest/autorest" "github.com/GoogleCloudPlatform/terraformer/terraformutils" "github.com/hashicorp/go-azure-helpers/authentication" ) type DatabasesGenerator struct { AzureService } func (g *DatabasesGenerator) getMariaDBServers() ([]mariadb.Server, error) { ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mariadb.NewServersClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer var ( Servers mariadb.ServerListResult err error ) if rg := g.Args["resource_group"].(string); rg != "" { Servers, err = Client.ListByResourceGroup(ctx, rg) } else { Servers, err = Client.List(ctx) } if err != nil { return nil, err } return *Servers.Value, nil } func (g *DatabasesGenerator) createMariaDBServerResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource for _, server := range servers { resources = append(resources, terraformutils.NewResource( *server.ID, *server.Name, "azurerm_mariadb_server", g.ProviderName, map[string]string{}, []string{}, map[string]interface{}{ "administrator_login_password": "", })) } return resources, nil } func (g *DatabasesGenerator) createMariaDBConfigurationResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mariadb.NewConfigurationsClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } configs, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, config := range *configs.Value { resources = append(resources, terraformutils.NewSimpleResource( *config.ID, *config.Name+"-"+*server.Name, "azurerm_mariadb_configuration", g.ProviderName, []string{"value"})) } } return resources, nil } func (g *DatabasesGenerator) createMariaDBDatabaseResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mariadb.NewDatabasesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, database := range *databases.Value { resources = append(resources, terraformutils.NewSimpleResource( *database.ID, *database.Name+"-"+*server.Name, "azurerm_mariadb_database", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createMariaDBFirewallRuleResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mariadb.NewFirewallRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, rule := range *rules.Value { resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_mariadb_firewall_rule", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createMariaDBVirtualNetworkRuleResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mariadb.NewVirtualNetworkRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } iter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for iter.NotDone() { rule := iter.Value() resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_mariadb_virtual_network_rule", g.ProviderName, []string{})) if err := iter.NextWithContext(ctx); err != nil { return nil, err } } } return resources, nil } func (g *DatabasesGenerator) getMySQLServers() ([]mysql.Server, error) { ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mysql.NewServersClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer var ( Servers mysql.ServerListResult err error ) if rg := g.Args["resource_group"].(string); rg != "" { Servers, err = Client.ListByResourceGroup(ctx, rg) } else { Servers, err = Client.List(ctx) } if err != nil { return nil, err } return *Servers.Value, nil } func (g *DatabasesGenerator) createMySQLServerResources(servers []mysql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource for _, server := range servers { resources = append(resources, terraformutils.NewResource( *server.ID, *server.Name, "azurerm_mysql_server", g.ProviderName, map[string]string{}, []string{}, map[string]interface{}{ "administrator_login_password": "", })) } return resources, nil } func (g *DatabasesGenerator) createMySQLConfigurationResources(servers []mysql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mysql.NewConfigurationsClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } configs, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, config := range *configs.Value { resources = append(resources, terraformutils.NewSimpleResource( *config.ID, *config.Name+"-"+*server.Name, "azurerm_mysql_configuration", g.ProviderName, []string{"value"})) } } return resources, nil } func (g *DatabasesGenerator) createMySQLDatabaseResources(servers []mysql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mysql.NewDatabasesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, database := range *databases.Value { resources = append(resources, terraformutils.NewSimpleResource( *database.ID, *database.Name+"-"+*server.Name, "azurerm_mysql_database", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createMySQLFirewallRuleResources(servers []mysql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mysql.NewFirewallRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, rule := range *rules.Value { resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_mysql_firewall_rule", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createMySQLVirtualNetworkRuleResources(servers []mysql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := mysql.NewVirtualNetworkRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } iter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for iter.NotDone() { rule := iter.Value() resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_mysql_virtual_network_rule", g.ProviderName, []string{})) if err := iter.NextWithContext(ctx); err != nil { return nil, err } } } return resources, nil } func (g *DatabasesGenerator) getPostgreSQLServers() ([]postgresql.Server, error) { ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := postgresql.NewServersClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer var ( Servers postgresql.ServerListResult err error ) if rg := g.Args["resource_group"].(string); rg != "" { Servers, err = Client.ListByResourceGroup(ctx, rg) } else { Servers, err = Client.List(ctx) } if err != nil { return nil, err } return *Servers.Value, nil } func (g *DatabasesGenerator) createPostgreSQLServerResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource for _, server := range servers { resources = append(resources, terraformutils.NewResource( *server.ID, *server.Name, "azurerm_postgresql_server", g.ProviderName, map[string]string{}, []string{}, map[string]interface{}{ "administrator_login_password": "", })) } return resources, nil } func (g *DatabasesGenerator) createPostgreSQLDatabaseResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := postgresql.NewDatabasesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, database := range *databases.Value { resources = append(resources, terraformutils.NewSimpleResource( *database.ID, *database.Name+"-"+*server.Name, "azurerm_postgresql_database", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createPostgreSQLConfigurationResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := postgresql.NewConfigurationsClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } configs, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, config := range *configs.Value { resources = append(resources, terraformutils.NewSimpleResource( *config.ID, *config.Name+"-"+*server.Name, "azurerm_postgresql_configuration", g.ProviderName, []string{"value"})) } } return resources, nil } func (g *DatabasesGenerator) createPostgreSQLFirewallRuleResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := postgresql.NewFirewallRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, rule := range *rules.Value { resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_postgresql_firewall_rule", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createPostgreSQLVirtualNetworkRuleResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := postgresql.NewVirtualNetworkRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } rulePages, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for rulePages.NotDone() { rule := rulePages.Value() resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_postgresql_virtual_network_rule", g.ProviderName, []string{})) if err := rulePages.NextWithContext(ctx); err != nil { return nil, err } } } return resources, nil } func (g *DatabasesGenerator) getSQLServers() ([]sql.Server, error) { var servers []sql.Server ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewServersClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer var ( ServerPages sql.ServerListResultPage err error ) if rg := g.Args["resource_group"].(string); rg != "" { ServerPages, err = Client.ListByResourceGroup(ctx, rg) } else { ServerPages, err = Client.List(ctx) } if err != nil { return nil, err } for ServerPages.NotDone() { servers = append(servers, ServerPages.Values()...) if err := ServerPages.NextWithContext(ctx); err != nil { return nil, err } } return servers, nil } func (g *DatabasesGenerator) createSQLServerResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource for _, server := range servers { resources = append(resources, terraformutils.NewResource( *server.ID, *server.Name, "azurerm_mssql_server", g.ProviderName, map[string]string{}, []string{}, map[string]interface{}{ "administrator_login_password": "", })) } return resources, nil } func (g *DatabasesGenerator) createSQLDatabaseResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewDatabasesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name, "", "") if err != nil { return nil, err } for _, database := range *databases.Value { resources = append(resources, terraformutils.NewSimpleResource( *database.ID, *database.Name+"-"+*server.Name, "azurerm_mssql_database", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createSQLFirewallRuleResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewFirewallRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, rule := range *rules.Value { resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_mssql_firewall_rule", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createSQLVirtualNetworkRuleResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewVirtualNetworkRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } ruleIter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for ruleIter.NotDone() { rule := ruleIter.Value() resources = append(resources, terraformutils.NewSimpleResource( *rule.ID, *rule.Name, "azurerm_sql_virtual_network_rule", g.ProviderName, []string{})) if err := ruleIter.NextWithContext(ctx); err != nil { return nil, err } } } return resources, nil } func (g *DatabasesGenerator) createSQLElasticPoolResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewElasticPoolsClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } pools, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, pool := range *pools.Value { resources = append(resources, terraformutils.NewSimpleResource( *pool.ID, *pool.Name, "azurerm_sql_elasticpool", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) createSQLFailoverResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewFailoverGroupsClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } iter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for iter.NotDone() { failoverGroup := iter.Value() resources = append(resources, terraformutils.NewSimpleResource( *failoverGroup.ID, *failoverGroup.Name, "azurerm_sql_failover_group", g.ProviderName, []string{})) if err := iter.NextWithContext(ctx); err != nil { return nil, err } } } return resources, nil } func (g *DatabasesGenerator) createSQLADAdministratorResources(servers []sql.Server) ([]terraformutils.Resource, error) { var resources []terraformutils.Resource ctx := context.Background() subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID resourceManagerEndpoint := g.Args["config"].(authentication.Config).CustomResourceManagerEndpoint Authorizer := g.Args["authorizer"].(autorest.Authorizer) Client := sql.NewServerAzureADAdministratorsClientWithBaseURI(resourceManagerEndpoint, subscriptionID) Client.Authorizer = Authorizer for _, server := range servers { id, err := ParseAzureResourceID(*server.ID) if err != nil { return nil, err } administrators, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) if err != nil { return nil, err } for _, administrator := range *administrators.Value { resources = append(resources, terraformutils.NewSimpleResource( *administrator.ID, *administrator.Name, "azurerm_sql_active_directory_administrator", g.ProviderName, []string{})) } } return resources, nil } func (g *DatabasesGenerator) InitResources() error { mariadbServers, err := g.getMariaDBServers() if err != nil { return err } mysqlServers, err := g.getMySQLServers() if err != nil { return err } postgresqlServers, err := g.getPostgreSQLServers() if err != nil { return err } sqlServers, err := g.getSQLServers() if err != nil { return err } mariadbFunctions := []func([]mariadb.Server) ([]terraformutils.Resource, error){ g.createMariaDBServerResources, g.createMariaDBDatabaseResources, g.createMariaDBConfigurationResources, g.createMariaDBFirewallRuleResources, g.createMariaDBVirtualNetworkRuleResources, } mysqlFunctions := []func([]mysql.Server) ([]terraformutils.Resource, error){ g.createMySQLServerResources, g.createMySQLDatabaseResources, g.createMySQLConfigurationResources, g.createMySQLFirewallRuleResources, g.createMySQLVirtualNetworkRuleResources, } postgresqlFunctions := []func([]postgresql.Server) ([]terraformutils.Resource, error){ g.createPostgreSQLServerResources, g.createPostgreSQLDatabaseResources, g.createPostgreSQLConfigurationResources, g.createPostgreSQLFirewallRuleResources, g.createPostgreSQLVirtualNetworkRuleResources, } sqlFunctions := []func([]sql.Server) ([]terraformutils.Resource, error){ g.createSQLServerResources, g.createSQLDatabaseResources, g.createSQLADAdministratorResources, g.createSQLElasticPoolResources, g.createSQLFailoverResources, g.createSQLFirewallRuleResources, g.createSQLVirtualNetworkRuleResources, } for _, f := range mariadbFunctions { resources, err := f(mariadbServers) if err != nil { return err } g.Resources = append(g.Resources, resources...) } for _, f := range mysqlFunctions { resources, err := f(mysqlServers) if err != nil { return err } g.Resources = append(g.Resources, resources...) } for _, f := range postgresqlFunctions { resources, err := f(postgresqlServers) if err != nil { return err } g.Resources = append(g.Resources, resources...) } for _, f := range sqlFunctions { resources, err := f(sqlServers) if err != nil { return err } g.Resources = append(g.Resources, resources...) } return nil } func (g *DatabasesGenerator) PostConvertHook() error { dbEngines := []string{ "mariadb", "mysql", "postgresql", "sql", } for _, engineName := range dbEngines { for _, resource := range g.Resources { dbServerResourceType := fmt.Sprintf("azurerm_%s_server", engineName) if resource.InstanceInfo.Type == dbServerResourceType { dbName := resource.Item["name"] for rIdx, r := range g.Resources { if r.InstanceInfo.Type != dbServerResourceType && strings.Contains(r.InstanceInfo.Type, engineName) && r.Item["server_name"] == dbName { g.Resources[rIdx].Item["server_name"] = fmt.Sprintf("${%s.%s}", resource.InstanceInfo.Id, "name") } } } } } return nil }