Skip to content

Commit

Permalink
f/resource_aws_dms_endpoint: support for secrets id for oracle and po…
Browse files Browse the repository at this point in the history
…stgres
  • Loading branch information
nikhil-goenka committed Apr 21, 2021
1 parent 068ebd8 commit 95d4657
Show file tree
Hide file tree
Showing 3 changed files with 578 additions and 0 deletions.
142 changes: 142 additions & 0 deletions aws/resource_aws_dms_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,16 @@ func resourceAwsDmsEndpoint() *schema.Resource {
},
},
},
"secrets_manager_access_role_arn": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validateArn,
},
"secrets_manager_arn": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validateArn,
},
"server_name": {
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -394,6 +404,52 @@ func resourceAwsDmsEndpointCreate(d *schema.ResourceData, meta interface{}) erro
request.ServerName = aws.String(d.Get("server_name").(string))
request.Port = aws.Int64(int64(d.Get("port").(int)))
request.DatabaseName = aws.String(d.Get("database_name").(string))
case "oracle":
if _, ok := d.GetOk("secrets_manager_arn"); ok {
request.OracleSettings = &dms.OracleSettings{
SecretsManagerAccessRoleArn: aws.String(d.Get("secrets_manager_access_role_arn").(string)),
SecretsManagerSecretId: aws.String(d.Get("secrets_manager_arn").(string)),
DatabaseName: aws.String(d.Get("database_name").(string)),
}
} else {
request.OracleSettings = &dms.OracleSettings{
Username: aws.String(d.Get("username").(string)),
Password: aws.String(d.Get("password").(string)),
ServerName: aws.String(d.Get("server_name").(string)),
Port: aws.Int64(int64(d.Get("port").(int))),
DatabaseName: aws.String(d.Get("database_name").(string)),
}

// Set connection info in top-level namespace as well
request.Username = aws.String(d.Get("username").(string))
request.Password = aws.String(d.Get("password").(string))
request.ServerName = aws.String(d.Get("server_name").(string))
request.Port = aws.Int64(int64(d.Get("port").(int)))
request.DatabaseName = aws.String(d.Get("database_name").(string))
}
case "postgres":
if _, ok := d.GetOk("secrets_manager_arn"); ok {
request.PostgreSQLSettings = &dms.PostgreSQLSettings{
SecretsManagerAccessRoleArn: aws.String(d.Get("secrets_manager_access_role_arn").(string)),
SecretsManagerSecretId: aws.String(d.Get("secrets_manager_arn").(string)),
DatabaseName: aws.String(d.Get("database_name").(string)),
}
} else {
request.PostgreSQLSettings = &dms.PostgreSQLSettings{
Username: aws.String(d.Get("username").(string)),
Password: aws.String(d.Get("password").(string)),
ServerName: aws.String(d.Get("server_name").(string)),
Port: aws.Int64(int64(d.Get("port").(int))),
DatabaseName: aws.String(d.Get("database_name").(string)),
}

// Set connection info in top-level namespace as well
request.Username = aws.String(d.Get("username").(string))
request.Password = aws.String(d.Get("password").(string))
request.ServerName = aws.String(d.Get("server_name").(string))
request.Port = aws.Int64(int64(d.Get("port").(int)))
request.DatabaseName = aws.String(d.Get("database_name").(string))
}
case "s3":
request.S3Settings = &dms.S3Settings{
ServiceAccessRoleArn: aws.String(d.Get("s3_settings.0.service_access_role_arn").(string)),
Expand Down Expand Up @@ -629,6 +685,64 @@ func resourceAwsDmsEndpointUpdate(d *schema.ResourceData, meta interface{}) erro
request.Port = aws.Int64(int64(d.Get("port").(int)))
request.DatabaseName = aws.String(d.Get("database_name").(string))

hasChanges = true
}
case "oracle":
if d.HasChanges(
"username", "password", "server_name", "port", "database_name", "secrets_manager_access_role_arn",
"secrets_manager_arn") {
if _, ok := d.GetOk("secrets_manager_arn"); ok {
request.OracleSettings = &dms.OracleSettings{
DatabaseName: aws.String(d.Get("database_name").(string)),
SecretsManagerAccessRoleArn: aws.String(d.Get("secrets_manager_access_role_arn").(string)),
SecretsManagerSecretId: aws.String(d.Get("secrets_manager_arn").(string)),
}
} else {
request.OracleSettings = &dms.OracleSettings{
Username: aws.String(d.Get("username").(string)),
Password: aws.String(d.Get("password").(string)),
ServerName: aws.String(d.Get("server_name").(string)),
Port: aws.Int64(int64(d.Get("port").(int))),
DatabaseName: aws.String(d.Get("database_name").(string)),
}
request.EngineName = aws.String(d.Get("engine_name").(string)) // Must be included (should be 'oracle')

// Update connection info in top-level namespace as well
request.Username = aws.String(d.Get("username").(string))
request.Password = aws.String(d.Get("password").(string))
request.ServerName = aws.String(d.Get("server_name").(string))
request.Port = aws.Int64(int64(d.Get("port").(int)))
request.DatabaseName = aws.String(d.Get("database_name").(string))
}
hasChanges = true
}
case "postgres":
if d.HasChanges(
"username", "password", "server_name", "port", "database_name", "secrets_manager_access_role_arn",
"secrets_manager_arn") {
if _, ok := d.GetOk("secrets_manager_arn"); ok {
request.PostgreSQLSettings = &dms.PostgreSQLSettings{
DatabaseName: aws.String(d.Get("database_name").(string)),
SecretsManagerAccessRoleArn: aws.String(d.Get("secrets_manager_access_role_arn").(string)),
SecretsManagerSecretId: aws.String(d.Get("secrets_manager_arn").(string)),
}
} else {
request.PostgreSQLSettings = &dms.PostgreSQLSettings{
Username: aws.String(d.Get("username").(string)),
Password: aws.String(d.Get("password").(string)),
ServerName: aws.String(d.Get("server_name").(string)),
Port: aws.Int64(int64(d.Get("port").(int))),
DatabaseName: aws.String(d.Get("database_name").(string)),
}
request.EngineName = aws.String(d.Get("engine_name").(string)) // Must be included (should be 'postgres')

// Update connection info in top-level namespace as well
request.Username = aws.String(d.Get("username").(string))
request.Password = aws.String(d.Get("password").(string))
request.ServerName = aws.String(d.Get("server_name").(string))
request.Port = aws.Int64(int64(d.Get("port").(int)))
request.DatabaseName = aws.String(d.Get("database_name").(string))
}
hasChanges = true
}
case "s3":
Expand Down Expand Up @@ -747,6 +861,34 @@ func resourceAwsDmsEndpointSetState(d *schema.ResourceData, endpoint *dms.Endpoi
if err := d.Set("mongodb_settings", flattenDmsMongoDbSettings(endpoint.MongoDbSettings)); err != nil {
return fmt.Errorf("Error setting mongodb_settings for DMS: %s", err)
}
case "oracle":
if endpoint.OracleSettings != nil {
d.Set("username", endpoint.OracleSettings.Username)
d.Set("server_name", endpoint.OracleSettings.ServerName)
d.Set("port", endpoint.OracleSettings.Port)
d.Set("database_name", endpoint.OracleSettings.DatabaseName)
d.Set("secrets_manager_access_role_arn", endpoint.OracleSettings.SecretsManagerAccessRoleArn)
d.Set("secrets_manager_arn", endpoint.OracleSettings.SecretsManagerSecretId)
} else {
d.Set("username", endpoint.Username)
d.Set("server_name", endpoint.ServerName)
d.Set("port", endpoint.Port)
d.Set("database_name", endpoint.DatabaseName)
}
case "postgres":
if endpoint.PostgreSQLSettings != nil {
d.Set("username", endpoint.PostgreSQLSettings.Username)
d.Set("server_name", endpoint.PostgreSQLSettings.ServerName)
d.Set("port", endpoint.PostgreSQLSettings.Port)
d.Set("database_name", endpoint.PostgreSQLSettings.DatabaseName)
d.Set("secrets_manager_access_role_arn", endpoint.PostgreSQLSettings.SecretsManagerAccessRoleArn)
d.Set("secrets_manager_arn", endpoint.PostgreSQLSettings.SecretsManagerSecretId)
} else {
d.Set("username", endpoint.Username)
d.Set("server_name", endpoint.ServerName)
d.Set("port", endpoint.Port)
d.Set("database_name", endpoint.DatabaseName)
}
case "s3":
if err := d.Set("s3_settings", flattenDmsS3Settings(endpoint.S3Settings)); err != nil {
return fmt.Errorf("Error setting s3_settings for DMS: %s", err)
Expand Down
Loading

0 comments on commit 95d4657

Please sign in to comment.