diff --git a/modules/mysql/src/alicloud_rds.go b/modules/mysql/src/alicloud_rds.go index bb84911..c827ec1 100644 --- a/modules/mysql/src/alicloud_rds.go +++ b/modules/mysql/src/alicloud_rds.go @@ -63,13 +63,23 @@ func (mysql *MySQL) GenerateAlicloudResources(request *module.GeneratorRequest) } resources = append(resources, *alicloudDBInstanceRes) + // Build alicloud_rds_account resuorce. + alicloudRDSAccountRes, err := mysql.generateAlicloudRDSAccount( + alicloudProviderCfg, + region, mysql.Username, randomPasswordID, alicloudDBInstanceID, + ) + if err != nil { + return nil, nil, err + } + resources = append(resources, *alicloudRDSAccountRes) + // Build alicloud_db_connection resource. var alicloudDBConnectionRes *apiv1.Resource var alicloudDBConnectionID string if IsPublicAccessible(mysql.SecurityIPs) { alicloudDBConnectionRes, alicloudDBConnectionID, err = mysql.generateAlicloudDBConnection( alicloudProviderCfg, - region, alicloudDBInstanceID, + region, alicloudDBInstanceID, alicloudRDSAccountRes.ID, ) if err != nil { return nil, nil, err @@ -78,16 +88,6 @@ func (mysql *MySQL) GenerateAlicloudResources(request *module.GeneratorRequest) resources = append(resources, *alicloudDBConnectionRes) } - // Build alicloud_rds_account resuorce. - alicloudRDSAccountRes, err := mysql.generateAlicloudRDSAccount( - alicloudProviderCfg, - region, mysql.Username, randomPasswordID, alicloudDBInstanceID, - ) - if err != nil { - return nil, nil, err - } - resources = append(resources, *alicloudRDSAccountRes) - hostAddress := modules.KusionPathDependency(alicloudDBInstanceID, "connection_string") if !mysql.PrivateRouting { // Set the public network connection string as the host address. @@ -156,7 +156,7 @@ func (mysql *MySQL) generateAlicloudDBInstance(alicloudProviderCfg module.Provid // generateAlicloudDBConnection generates alicloud_db_connection resource // for the Alicloud provided MySQL database instance. func (mysql *MySQL) generateAlicloudDBConnection(alicloudProviderCfg module.ProviderConfig, - region, dbInstanceID string, + region, dbInstanceID, rdsAccountID string, ) (*apiv1.Resource, string, error) { resAttrs := map[string]interface{}{ "instance_id": modules.KusionPathDependency(dbInstanceID, "id"), @@ -173,6 +173,9 @@ func (mysql *MySQL) generateAlicloudDBConnection(alicloudProviderCfg module.Prov return nil, "", err } + // Add resource dependencies. + resource.DependsOn = append(resource.DependsOn, rdsAccountID) + return resource, id, nil } diff --git a/modules/mysql/src/alicloud_rds_test.go b/modules/mysql/src/alicloud_rds_test.go index 59a0033..bc254c0 100644 --- a/modules/mysql/src/alicloud_rds_test.go +++ b/modules/mysql/src/alicloud_rds_test.go @@ -82,7 +82,7 @@ func TestMySQLModule_GenerateAlicloudDBConnection(t *testing.T) { SubnetID: "test-subnet-id", } - res, id, err := mysql.generateAlicloudDBConnection(defaultAlicloudProviderCfg, "test-region", "db_instance_id") + res, id, err := mysql.generateAlicloudDBConnection(defaultAlicloudProviderCfg, "test-region", "db_instance_id", "rds_account_id") assert.NotNil(t, res) assert.NotEqual(t, id, "") diff --git a/modules/postgres/src/alicloud_rds.go b/modules/postgres/src/alicloud_rds.go index 46ce8a6..d45b4c1 100644 --- a/modules/postgres/src/alicloud_rds.go +++ b/modules/postgres/src/alicloud_rds.go @@ -63,13 +63,23 @@ func (postgres *PostgreSQL) GenerateAlicloudResources(request *module.GeneratorR } resources = append(resources, *alicloudDBInstanceRes) + // Build alicloud_rds_account resuorce. + alicloudRDSAccountRes, err := postgres.generateAlicloudRDSAccount( + alicloudProviderCfg, + region, postgres.Username, randomPasswordID, alicloudDBInstanceID, + ) + if err != nil { + return nil, nil, err + } + resources = append(resources, *alicloudRDSAccountRes) + // Build alicloud_db_connection resource. var alicloudDBConnectionRes *apiv1.Resource var alicloudDBConnectionID string if IsPublicAccessible(postgres.SecurityIPs) { alicloudDBConnectionRes, alicloudDBConnectionID, err = postgres.generateAlicloudDBConnection( alicloudProviderCfg, - region, alicloudDBInstanceID, + region, alicloudDBInstanceID, alicloudRDSAccountRes.ID, ) if err != nil { return nil, nil, err @@ -78,16 +88,6 @@ func (postgres *PostgreSQL) GenerateAlicloudResources(request *module.GeneratorR resources = append(resources, *alicloudDBConnectionRes) } - // Build alicloud_rds_account resuorce. - alicloudRDSAccountRes, err := postgres.generateAlicloudRDSAccount( - alicloudProviderCfg, - region, postgres.Username, randomPasswordID, alicloudDBInstanceID, - ) - if err != nil { - return nil, nil, err - } - resources = append(resources, *alicloudRDSAccountRes) - hostAddress := modules.KusionPathDependency(alicloudDBInstanceID, "connection_string") if !postgres.PrivateRouting { // Set the public network connection string as the host address. @@ -156,7 +156,7 @@ func (postgres *PostgreSQL) generateAlicloudDBInstance(alicloudProviderCfg modul // generateAlicloudDBConnection generates alicloud_db_connection resource // for the Alicloud provided PostgreSQL database instance. func (postgres *PostgreSQL) generateAlicloudDBConnection(alicloudProviderCfg module.ProviderConfig, - region, dbInstanceID string, + region, dbInstanceID, rdsAccountID string, ) (*apiv1.Resource, string, error) { resAttrs := map[string]interface{}{ "instance_id": modules.KusionPathDependency(dbInstanceID, "id"), @@ -174,6 +174,9 @@ func (postgres *PostgreSQL) generateAlicloudDBConnection(alicloudProviderCfg mod return nil, "", err } + // Add resource dependencies. + resource.DependsOn = append(resource.DependsOn, rdsAccountID) + return resource, id, nil } diff --git a/modules/postgres/src/alicloud_rds_test.go b/modules/postgres/src/alicloud_rds_test.go index d68a2fe..2f1a2e2 100644 --- a/modules/postgres/src/alicloud_rds_test.go +++ b/modules/postgres/src/alicloud_rds_test.go @@ -82,7 +82,7 @@ func TestPostgreSQLModule_GenerateAlicloudDBConnection(t *testing.T) { SubnetID: "test-subnet-id", } - res, id, err := postgres.generateAlicloudDBConnection(defaultAlicloudProviderCfg, "test-region", "db_instance_id") + res, id, err := postgres.generateAlicloudDBConnection(defaultAlicloudProviderCfg, "test-region", "db_instance_id", "rds_account_id") assert.NotNil(t, res) assert.NotEqual(t, id, "")