github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/azure/database.go (about) 1 // Copyright 2019 The Terraformer Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package azure 16 17 import ( 18 "context" 19 "fmt" 20 "strings" 21 22 "github.com/Azure/azure-sdk-for-go/services/mariadb/mgmt/2018-06-01/mariadb" 23 "github.com/Azure/azure-sdk-for-go/services/mysql/mgmt/2017-12-01/mysql" 24 "github.com/Azure/azure-sdk-for-go/services/postgresql/mgmt/2017-12-01/postgresql" 25 "github.com/Azure/azure-sdk-for-go/services/preview/sql/mgmt/2017-03-01-preview/sql" 26 "github.com/Azure/go-autorest/autorest" 27 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 28 "github.com/hashicorp/go-azure-helpers/authentication" 29 ) 30 31 type DatabasesGenerator struct { 32 AzureService 33 } 34 35 func (g *DatabasesGenerator) getMariaDBServers() ([]mariadb.Server, error) { 36 ctx := context.Background() 37 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 38 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 39 40 Client := mariadb.NewServersClient(SubscriptionID) 41 Client.Authorizer = Authorizer 42 43 var ( 44 Servers mariadb.ServerListResult 45 err error 46 ) 47 if rg := g.Args["resource_group"].(string); rg != "" { 48 Servers, err = Client.ListByResourceGroup(ctx, rg) 49 } else { 50 Servers, err = Client.List(ctx) 51 } 52 if err != nil { 53 return nil, err 54 } 55 56 return *Servers.Value, nil 57 } 58 59 func (g *DatabasesGenerator) createMariaDBServerResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { 60 var resources []terraformutils.Resource 61 62 for _, server := range servers { 63 resources = append(resources, terraformutils.NewResource( 64 *server.ID, 65 *server.Name, 66 "azurerm_mariadb_server", 67 g.ProviderName, 68 map[string]string{}, 69 []string{}, 70 map[string]interface{}{ 71 "administrator_login_password": "", 72 })) 73 } 74 75 return resources, nil 76 } 77 78 func (g *DatabasesGenerator) createMariaDBConfigurationResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { 79 var resources []terraformutils.Resource 80 ctx := context.Background() 81 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 82 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 83 84 Client := mariadb.NewConfigurationsClient(SubscriptionID) 85 Client.Authorizer = Authorizer 86 87 for _, server := range servers { 88 id, err := ParseAzureResourceID(*server.ID) 89 if err != nil { 90 return nil, err 91 } 92 configs, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 93 if err != nil { 94 return nil, err 95 } 96 97 for _, config := range *configs.Value { 98 resources = append(resources, terraformutils.NewSimpleResource( 99 *config.ID, 100 *config.Name+"-"+*server.Name, 101 "azurerm_mariadb_configuration", 102 g.ProviderName, 103 []string{"value"})) 104 } 105 } 106 107 return resources, nil 108 } 109 110 func (g *DatabasesGenerator) createMariaDBDatabaseResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { 111 var resources []terraformutils.Resource 112 ctx := context.Background() 113 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 114 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 115 116 Client := mariadb.NewDatabasesClient(SubscriptionID) 117 Client.Authorizer = Authorizer 118 119 for _, server := range servers { 120 id, err := ParseAzureResourceID(*server.ID) 121 if err != nil { 122 return nil, err 123 } 124 databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 125 if err != nil { 126 return nil, err 127 } 128 129 for _, database := range *databases.Value { 130 resources = append(resources, terraformutils.NewSimpleResource( 131 *database.ID, 132 *database.Name+"-"+*server.Name, 133 "azurerm_mariadb_database", 134 g.ProviderName, 135 []string{})) 136 } 137 } 138 139 return resources, nil 140 } 141 142 func (g *DatabasesGenerator) createMariaDBFirewallRuleResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { 143 var resources []terraformutils.Resource 144 ctx := context.Background() 145 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 146 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 147 148 Client := mariadb.NewFirewallRulesClient(SubscriptionID) 149 Client.Authorizer = Authorizer 150 for _, server := range servers { 151 id, err := ParseAzureResourceID(*server.ID) 152 if err != nil { 153 return nil, err 154 } 155 156 rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 157 if err != nil { 158 return nil, err 159 } 160 for _, rule := range *rules.Value { 161 resources = append(resources, terraformutils.NewSimpleResource( 162 *rule.ID, 163 *rule.Name, 164 "azurerm_mariadb_firewall_rule", 165 g.ProviderName, 166 []string{})) 167 } 168 } 169 170 return resources, nil 171 } 172 173 func (g *DatabasesGenerator) createMariaDBVirtualNetworkRuleResources(servers []mariadb.Server) ([]terraformutils.Resource, error) { 174 var resources []terraformutils.Resource 175 ctx := context.Background() 176 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 177 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 178 179 Client := mariadb.NewVirtualNetworkRulesClient(SubscriptionID) 180 Client.Authorizer = Authorizer 181 182 for _, server := range servers { 183 id, err := ParseAzureResourceID(*server.ID) 184 if err != nil { 185 return nil, err 186 } 187 iter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) 188 if err != nil { 189 return nil, err 190 } 191 for iter.NotDone() { 192 rule := iter.Value() 193 resources = append(resources, terraformutils.NewSimpleResource( 194 *rule.ID, 195 *rule.Name, 196 "azurerm_mariadb_virtual_network_rule", 197 g.ProviderName, 198 []string{})) 199 200 if err := iter.NextWithContext(ctx); err != nil { 201 return nil, err 202 } 203 } 204 } 205 return resources, nil 206 } 207 208 func (g *DatabasesGenerator) getMySQLServers() ([]mysql.Server, error) { 209 ctx := context.Background() 210 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 211 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 212 213 Client := mysql.NewServersClient(SubscriptionID) 214 Client.Authorizer = Authorizer 215 216 var ( 217 Servers mysql.ServerListResult 218 err error 219 ) 220 221 if rg := g.Args["resource_group"].(string); rg != "" { 222 Servers, err = Client.ListByResourceGroup(ctx, rg) 223 } else { 224 Servers, err = Client.List(ctx) 225 } 226 if err != nil { 227 return nil, err 228 } 229 230 return *Servers.Value, nil 231 } 232 233 func (g *DatabasesGenerator) createMySQLServerResources(servers []mysql.Server) ([]terraformutils.Resource, error) { 234 var resources []terraformutils.Resource 235 236 for _, server := range servers { 237 resources = append(resources, terraformutils.NewResource( 238 *server.ID, 239 *server.Name, 240 "azurerm_mysql_server", 241 g.ProviderName, 242 map[string]string{}, 243 []string{}, 244 map[string]interface{}{ 245 "administrator_login_password": "", 246 })) 247 } 248 249 return resources, nil 250 } 251 252 func (g *DatabasesGenerator) createMySQLConfigurationResources(servers []mysql.Server) ([]terraformutils.Resource, error) { 253 var resources []terraformutils.Resource 254 ctx := context.Background() 255 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 256 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 257 258 Client := mysql.NewConfigurationsClient(SubscriptionID) 259 Client.Authorizer = Authorizer 260 261 for _, server := range servers { 262 id, err := ParseAzureResourceID(*server.ID) 263 if err != nil { 264 return nil, err 265 } 266 267 configs, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 268 if err != nil { 269 return nil, err 270 } 271 for _, config := range *configs.Value { 272 resources = append(resources, terraformutils.NewSimpleResource( 273 *config.ID, 274 *config.Name+"-"+*server.Name, 275 "azurerm_mysql_configuration", 276 g.ProviderName, 277 []string{"value"})) 278 } 279 } 280 281 return resources, nil 282 } 283 284 func (g *DatabasesGenerator) createMySQLDatabaseResources(servers []mysql.Server) ([]terraformutils.Resource, error) { 285 var resources []terraformutils.Resource 286 ctx := context.Background() 287 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 288 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 289 290 Client := mysql.NewDatabasesClient(SubscriptionID) 291 Client.Authorizer = Authorizer 292 293 for _, server := range servers { 294 id, err := ParseAzureResourceID(*server.ID) 295 if err != nil { 296 return nil, err 297 } 298 databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 299 if err != nil { 300 return nil, err 301 } 302 303 for _, database := range *databases.Value { 304 resources = append(resources, terraformutils.NewSimpleResource( 305 *database.ID, 306 *database.Name+"-"+*server.Name, 307 "azurerm_mysql_database", 308 g.ProviderName, 309 []string{})) 310 } 311 } 312 return resources, nil 313 } 314 315 func (g *DatabasesGenerator) createMySQLFirewallRuleResources(servers []mysql.Server) ([]terraformutils.Resource, error) { 316 var resources []terraformutils.Resource 317 ctx := context.Background() 318 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 319 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 320 321 Client := mysql.NewFirewallRulesClient(SubscriptionID) 322 Client.Authorizer = Authorizer 323 324 for _, server := range servers { 325 id, err := ParseAzureResourceID(*server.ID) 326 if err != nil { 327 return nil, err 328 } 329 rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 330 if err != nil { 331 return nil, err 332 } 333 334 for _, rule := range *rules.Value { 335 resources = append(resources, terraformutils.NewSimpleResource( 336 *rule.ID, 337 *rule.Name, 338 "azurerm_mysql_firewall_rule", 339 g.ProviderName, 340 []string{})) 341 } 342 } 343 344 return resources, nil 345 } 346 347 func (g *DatabasesGenerator) createMySQLVirtualNetworkRuleResources(servers []mysql.Server) ([]terraformutils.Resource, error) { 348 var resources []terraformutils.Resource 349 ctx := context.Background() 350 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 351 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 352 353 Client := mysql.NewVirtualNetworkRulesClient(SubscriptionID) 354 Client.Authorizer = Authorizer 355 356 for _, server := range servers { 357 id, err := ParseAzureResourceID(*server.ID) 358 if err != nil { 359 return nil, err 360 } 361 362 iter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) 363 if err != nil { 364 return nil, err 365 } 366 367 for iter.NotDone() { 368 rule := iter.Value() 369 resources = append(resources, terraformutils.NewSimpleResource( 370 *rule.ID, 371 *rule.Name, 372 "azurerm_mysql_virtual_network_rule", 373 g.ProviderName, 374 []string{})) 375 376 if err := iter.NextWithContext(ctx); err != nil { 377 return nil, err 378 } 379 } 380 } 381 382 return resources, nil 383 } 384 385 func (g *DatabasesGenerator) getPostgreSQLServers() ([]postgresql.Server, error) { 386 ctx := context.Background() 387 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 388 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 389 390 Client := postgresql.NewServersClient(SubscriptionID) 391 Client.Authorizer = Authorizer 392 393 var ( 394 Servers postgresql.ServerListResult 395 err error 396 ) 397 398 if rg := g.Args["resource_group"].(string); rg != "" { 399 Servers, err = Client.ListByResourceGroup(ctx, rg) 400 } else { 401 Servers, err = Client.List(ctx) 402 } 403 404 if err != nil { 405 return nil, err 406 } 407 408 return *Servers.Value, nil 409 } 410 411 func (g *DatabasesGenerator) createPostgreSQLServerResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { 412 var resources []terraformutils.Resource 413 414 for _, server := range servers { 415 resources = append(resources, terraformutils.NewResource( 416 *server.ID, 417 *server.Name, 418 "azurerm_postgresql_server", 419 g.ProviderName, 420 map[string]string{}, 421 []string{}, 422 map[string]interface{}{ 423 "administrator_login_password": "", 424 })) 425 } 426 427 return resources, nil 428 } 429 430 func (g *DatabasesGenerator) createPostgreSQLDatabaseResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { 431 var resources []terraformutils.Resource 432 ctx := context.Background() 433 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 434 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 435 436 Client := postgresql.NewDatabasesClient(SubscriptionID) 437 Client.Authorizer = Authorizer 438 439 for _, server := range servers { 440 id, err := ParseAzureResourceID(*server.ID) 441 if err != nil { 442 return nil, err 443 } 444 databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 445 if err != nil { 446 return nil, err 447 } 448 449 for _, database := range *databases.Value { 450 resources = append(resources, terraformutils.NewSimpleResource( 451 *database.ID, 452 *database.Name+"-"+*server.Name, 453 "azurerm_postgresql_database", 454 g.ProviderName, 455 []string{})) 456 } 457 } 458 return resources, nil 459 } 460 461 func (g *DatabasesGenerator) createPostgreSQLConfigurationResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { 462 var resources []terraformutils.Resource 463 ctx := context.Background() 464 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 465 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 466 Client := postgresql.NewConfigurationsClient(SubscriptionID) 467 Client.Authorizer = Authorizer 468 469 for _, server := range servers { 470 id, err := ParseAzureResourceID(*server.ID) 471 if err != nil { 472 return nil, err 473 } 474 configs, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 475 if err != nil { 476 return nil, err 477 } 478 479 for _, config := range *configs.Value { 480 resources = append(resources, terraformutils.NewSimpleResource( 481 *config.ID, 482 *config.Name+"-"+*server.Name, 483 "azurerm_postgresql_configuration", 484 g.ProviderName, 485 []string{"value"})) 486 } 487 } 488 return resources, nil 489 } 490 491 func (g *DatabasesGenerator) createPostgreSQLFirewallRuleResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { 492 var resources []terraformutils.Resource 493 ctx := context.Background() 494 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 495 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 496 497 Client := postgresql.NewFirewallRulesClient(SubscriptionID) 498 Client.Authorizer = Authorizer 499 500 for _, server := range servers { 501 id, err := ParseAzureResourceID(*server.ID) 502 if err != nil { 503 return nil, err 504 } 505 rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 506 if err != nil { 507 return nil, err 508 } 509 510 for _, rule := range *rules.Value { 511 resources = append(resources, terraformutils.NewSimpleResource( 512 *rule.ID, 513 *rule.Name, 514 "azurerm_postgresql_firewall_rule", 515 g.ProviderName, 516 []string{})) 517 } 518 } 519 return resources, nil 520 } 521 522 func (g *DatabasesGenerator) createPostgreSQLVirtualNetworkRuleResources(servers []postgresql.Server) ([]terraformutils.Resource, error) { 523 var resources []terraformutils.Resource 524 ctx := context.Background() 525 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 526 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 527 528 Client := postgresql.NewVirtualNetworkRulesClient(SubscriptionID) 529 Client.Authorizer = Authorizer 530 531 for _, server := range servers { 532 id, err := ParseAzureResourceID(*server.ID) 533 if err != nil { 534 return nil, err 535 } 536 rulePages, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) 537 if err != nil { 538 return nil, err 539 } 540 541 for rulePages.NotDone() { 542 rule := rulePages.Value() 543 resources = append(resources, terraformutils.NewSimpleResource( 544 *rule.ID, 545 *rule.Name, 546 "azurerm_postgresql_virtual_network_rule", 547 g.ProviderName, 548 []string{})) 549 } 550 } 551 return resources, nil 552 } 553 554 func (g *DatabasesGenerator) getSQLServers() ([]sql.Server, error) { 555 var servers []sql.Server 556 ctx := context.Background() 557 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 558 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 559 560 Client := sql.NewServersClient(SubscriptionID) 561 Client.Authorizer = Authorizer 562 563 var ( 564 ServerPages sql.ServerListResultPage 565 err error 566 ) 567 568 if rg := g.Args["resource_group"].(string); rg != "" { 569 ServerPages, err = Client.ListByResourceGroup(ctx, rg) 570 } else { 571 ServerPages, err = Client.List(ctx) 572 } 573 if err != nil { 574 return nil, err 575 } 576 for ServerPages.NotDone() { 577 servers = append(servers, ServerPages.Values()...) 578 if err := ServerPages.NextWithContext(ctx); err != nil { 579 return nil, err 580 } 581 } 582 583 return servers, nil 584 } 585 586 func (g *DatabasesGenerator) createSQLServerResources(servers []sql.Server) ([]terraformutils.Resource, error) { 587 var resources []terraformutils.Resource 588 589 for _, server := range servers { 590 resources = append(resources, terraformutils.NewResource( 591 *server.ID, 592 *server.Name, 593 "azurerm_sql_server", 594 g.ProviderName, 595 map[string]string{}, 596 []string{}, 597 map[string]interface{}{ 598 "administrator_login_password": "", 599 })) 600 } 601 602 return resources, nil 603 } 604 605 func (g *DatabasesGenerator) createSQLDatabaseResources(servers []sql.Server) ([]terraformutils.Resource, error) { 606 var resources []terraformutils.Resource 607 ctx := context.Background() 608 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 609 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 610 611 Client := sql.NewDatabasesClient(SubscriptionID) 612 Client.Authorizer = Authorizer 613 614 for _, server := range servers { 615 id, err := ParseAzureResourceID(*server.ID) 616 if err != nil { 617 return nil, err 618 } 619 databases, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name, "", "") 620 if err != nil { 621 return nil, err 622 } 623 624 for _, database := range *databases.Value { 625 resources = append(resources, terraformutils.NewSimpleResource( 626 *database.ID, 627 *database.Name+"-"+*server.Name, 628 "azurerm_sql_database", 629 g.ProviderName, 630 []string{})) 631 } 632 } 633 return resources, nil 634 } 635 636 func (g *DatabasesGenerator) createSQLFirewallRuleResources(servers []sql.Server) ([]terraformutils.Resource, error) { 637 var resources []terraformutils.Resource 638 ctx := context.Background() 639 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 640 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 641 642 Client := sql.NewFirewallRulesClient(SubscriptionID) 643 Client.Authorizer = Authorizer 644 645 for _, server := range servers { 646 id, err := ParseAzureResourceID(*server.ID) 647 if err != nil { 648 return nil, err 649 } 650 rules, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 651 if err != nil { 652 return nil, err 653 } 654 655 for _, rule := range *rules.Value { 656 resources = append(resources, terraformutils.NewSimpleResource( 657 *rule.ID, 658 *rule.Name, 659 "azurerm_sql_firewall_rule", 660 g.ProviderName, 661 []string{})) 662 } 663 } 664 return resources, nil 665 } 666 667 func (g *DatabasesGenerator) createSQLVirtualNetworkRuleResources(servers []sql.Server) ([]terraformutils.Resource, error) { 668 var resources []terraformutils.Resource 669 ctx := context.Background() 670 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 671 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 672 673 Client := sql.NewVirtualNetworkRulesClient(SubscriptionID) 674 Client.Authorizer = Authorizer 675 676 for _, server := range servers { 677 id, err := ParseAzureResourceID(*server.ID) 678 if err != nil { 679 return nil, err 680 } 681 ruleIter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) 682 if err != nil { 683 return nil, err 684 } 685 686 for ruleIter.NotDone() { 687 rule := ruleIter.Value() 688 resources = append(resources, terraformutils.NewSimpleResource( 689 *rule.ID, 690 *rule.Name, 691 "azurerm_sql_virtual_network_rule", 692 g.ProviderName, 693 []string{})) 694 } 695 if err := ruleIter.NextWithContext(ctx); err != nil { 696 return nil, err 697 } 698 } 699 return resources, nil 700 } 701 702 func (g *DatabasesGenerator) createSQLElasticPoolResources(servers []sql.Server) ([]terraformutils.Resource, error) { 703 var resources []terraformutils.Resource 704 ctx := context.Background() 705 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 706 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 707 708 Client := sql.NewElasticPoolsClient(SubscriptionID) 709 Client.Authorizer = Authorizer 710 711 for _, server := range servers { 712 id, err := ParseAzureResourceID(*server.ID) 713 if err != nil { 714 return nil, err 715 } 716 pools, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 717 if err != nil { 718 return nil, err 719 } 720 721 for _, pool := range *pools.Value { 722 resources = append(resources, terraformutils.NewSimpleResource( 723 *pool.ID, 724 *pool.Name, 725 "azurerm_sql_elasticpool", 726 g.ProviderName, 727 []string{})) 728 } 729 } 730 return resources, nil 731 } 732 733 func (g *DatabasesGenerator) createSQLFailoverResources(servers []sql.Server) ([]terraformutils.Resource, error) { 734 var resources []terraformutils.Resource 735 ctx := context.Background() 736 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 737 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 738 739 Client := sql.NewFailoverGroupsClient(SubscriptionID) 740 Client.Authorizer = Authorizer 741 742 for _, server := range servers { 743 id, err := ParseAzureResourceID(*server.ID) 744 if err != nil { 745 return nil, err 746 } 747 748 iter, err := Client.ListByServerComplete(ctx, id.ResourceGroup, *server.Name) 749 if err != nil { 750 return nil, err 751 } 752 753 for iter.NotDone() { 754 failoverGroup := iter.Value() 755 756 resources = append(resources, terraformutils.NewSimpleResource( 757 *failoverGroup.ID, 758 *failoverGroup.Name, 759 "azurerm_sql_failover_group", 760 g.ProviderName, 761 []string{})) 762 } 763 } 764 return resources, nil 765 } 766 767 func (g *DatabasesGenerator) createSQLADAdministratorResources(servers []sql.Server) ([]terraformutils.Resource, error) { 768 var resources []terraformutils.Resource 769 ctx := context.Background() 770 SubscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 771 Authorizer := g.Args["authorizer"].(autorest.Authorizer) 772 773 Client := sql.NewServerAzureADAdministratorsClient(SubscriptionID) 774 Client.Authorizer = Authorizer 775 776 for _, server := range servers { 777 id, err := ParseAzureResourceID(*server.ID) 778 if err != nil { 779 return nil, err 780 } 781 782 administrators, err := Client.ListByServer(ctx, id.ResourceGroup, *server.Name) 783 if err != nil { 784 return nil, err 785 } 786 787 for _, administrator := range *administrators.Value { 788 resources = append(resources, terraformutils.NewSimpleResource( 789 *administrator.ID, 790 *administrator.Name, 791 "azurerm_sql_active_directory_administrator", 792 g.ProviderName, 793 []string{})) 794 } 795 } 796 return resources, nil 797 } 798 799 func (g *DatabasesGenerator) InitResources() error { 800 mariadbServers, err := g.getMariaDBServers() 801 if err != nil { 802 return err 803 } 804 805 mysqlServers, err := g.getMySQLServers() 806 if err != nil { 807 return err 808 } 809 810 postgresqlServers, err := g.getPostgreSQLServers() 811 if err != nil { 812 return err 813 } 814 815 sqlServers, err := g.getSQLServers() 816 if err != nil { 817 return err 818 } 819 820 mariadbFunctions := []func([]mariadb.Server) ([]terraformutils.Resource, error){ 821 g.createMariaDBServerResources, 822 g.createMariaDBDatabaseResources, 823 g.createMariaDBConfigurationResources, 824 g.createMariaDBFirewallRuleResources, 825 g.createMariaDBVirtualNetworkRuleResources, 826 } 827 828 mysqlFunctions := []func([]mysql.Server) ([]terraformutils.Resource, error){ 829 g.createMySQLServerResources, 830 g.createMySQLDatabaseResources, 831 g.createMySQLConfigurationResources, 832 g.createMySQLFirewallRuleResources, 833 g.createMySQLVirtualNetworkRuleResources, 834 } 835 836 postgresqlFunctions := []func([]postgresql.Server) ([]terraformutils.Resource, error){ 837 g.createPostgreSQLServerResources, 838 g.createPostgreSQLDatabaseResources, 839 g.createPostgreSQLConfigurationResources, 840 g.createPostgreSQLFirewallRuleResources, 841 g.createPostgreSQLVirtualNetworkRuleResources, 842 } 843 844 sqlFunctions := []func([]sql.Server) ([]terraformutils.Resource, error){ 845 g.createSQLServerResources, 846 g.createSQLDatabaseResources, 847 g.createSQLADAdministratorResources, 848 g.createSQLElasticPoolResources, 849 g.createSQLFailoverResources, 850 g.createSQLFirewallRuleResources, 851 g.createSQLVirtualNetworkRuleResources, 852 } 853 854 for _, f := range mariadbFunctions { 855 resources, err := f(mariadbServers) 856 if err != nil { 857 return err 858 } 859 g.Resources = append(g.Resources, resources...) 860 } 861 862 for _, f := range mysqlFunctions { 863 resources, err := f(mysqlServers) 864 if err != nil { 865 return err 866 } 867 g.Resources = append(g.Resources, resources...) 868 } 869 870 for _, f := range postgresqlFunctions { 871 resources, err := f(postgresqlServers) 872 if err != nil { 873 return err 874 } 875 g.Resources = append(g.Resources, resources...) 876 } 877 878 for _, f := range sqlFunctions { 879 resources, err := f(sqlServers) 880 if err != nil { 881 return err 882 } 883 g.Resources = append(g.Resources, resources...) 884 } 885 886 return nil 887 } 888 889 func (g *DatabasesGenerator) PostConvertHook() error { 890 dbEngines := []string{ 891 "mariadb", 892 "mysql", 893 "postgresql", 894 "sql", 895 } 896 897 for _, engineName := range dbEngines { 898 for _, resource := range g.Resources { 899 dbServerResourceType := fmt.Sprintf("azurerm_%s_server", engineName) 900 if resource.InstanceInfo.Type == dbServerResourceType { 901 dbName := resource.Item["name"] 902 for rIdx, r := range g.Resources { 903 if r.InstanceInfo.Type != dbServerResourceType && 904 strings.Contains(r.InstanceInfo.Type, engineName) && 905 r.Item["server_name"] == dbName { 906 g.Resources[rIdx].Item["server_name"] = fmt.Sprintf("${%s.%s}", resource.InstanceInfo.Id, "name") 907 } 908 } 909 } 910 } 911 } 912 913 return nil 914 }