2017-02-10 15:58:31 +01:00
|
|
|
package aws
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
|
|
"github.com/aws/aws-sdk-go/service/rds"
|
|
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
|
|
)
|
|
|
|
|
|
|
|
func dataSourceAwsDbInstance() *schema.Resource {
|
|
|
|
return &schema.Resource{
|
|
|
|
Read: dataSourceAwsDbInstanceRead,
|
|
|
|
|
|
|
|
Schema: map[string]*schema.Schema{
|
|
|
|
"db_instance_identifier": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Required: true,
|
|
|
|
ForceNew: true,
|
|
|
|
},
|
|
|
|
|
2017-03-13 09:31:24 +01:00
|
|
|
"address": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
2017-02-10 15:58:31 +01:00
|
|
|
"allocated_storage": {
|
|
|
|
Type: schema.TypeInt,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"auto_minor_version_upgrade": {
|
|
|
|
Type: schema.TypeBool,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"availability_zone": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"backup_retention_period": {
|
|
|
|
Type: schema.TypeInt,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_cluster_identifier": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_instance_arn": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_instance_class": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_name": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_parameter_groups": {
|
|
|
|
Type: schema.TypeList,
|
|
|
|
Computed: true,
|
|
|
|
Elem: &schema.Schema{Type: schema.TypeString},
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_security_groups": {
|
|
|
|
Type: schema.TypeList,
|
|
|
|
Computed: true,
|
|
|
|
Elem: &schema.Schema{Type: schema.TypeString},
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_subnet_group": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"db_instance_port": {
|
|
|
|
Type: schema.TypeInt,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
2017-03-13 09:31:24 +01:00
|
|
|
"endpoint": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
2017-02-10 15:58:31 +01:00
|
|
|
"engine": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"engine_version": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
2017-03-13 09:31:24 +01:00
|
|
|
"hosted_zone_id": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
2017-02-10 15:58:31 +01:00
|
|
|
"iops": {
|
|
|
|
Type: schema.TypeInt,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"kms_key_id": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"license_model": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"master_username": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"monitoring_interval": {
|
|
|
|
Type: schema.TypeInt,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"monitoring_role_arn": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"multi_az": {
|
|
|
|
Type: schema.TypeBool,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"option_group_memberships": {
|
|
|
|
Type: schema.TypeList,
|
|
|
|
Computed: true,
|
|
|
|
Elem: &schema.Schema{Type: schema.TypeString},
|
|
|
|
},
|
|
|
|
|
2017-03-13 09:31:24 +01:00
|
|
|
"port": {
|
|
|
|
Type: schema.TypeInt,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
2017-02-10 15:58:31 +01:00
|
|
|
"preferred_backup_window": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"preferred_maintenance_window": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"publicly_accessible": {
|
|
|
|
Type: schema.TypeBool,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"storage_encrypted": {
|
|
|
|
Type: schema.TypeBool,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"storage_type": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"timezone": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
|
|
|
|
|
|
|
"vpc_security_groups": {
|
|
|
|
Type: schema.TypeList,
|
|
|
|
Computed: true,
|
|
|
|
Elem: &schema.Schema{Type: schema.TypeString},
|
|
|
|
},
|
2017-04-21 13:23:48 +02:00
|
|
|
|
|
|
|
"replicate_source_db": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Computed: true,
|
|
|
|
},
|
2017-02-10 15:58:31 +01:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func dataSourceAwsDbInstanceRead(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
conn := meta.(*AWSClient).rdsconn
|
|
|
|
|
|
|
|
opts := rds.DescribeDBInstancesInput{
|
|
|
|
DBInstanceIdentifier: aws.String(d.Get("db_instance_identifier").(string)),
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Printf("[DEBUG] DB Instance describe configuration: %#v", opts)
|
|
|
|
|
|
|
|
resp, err := conn.DescribeDBInstances(&opts)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(resp.DBInstances) < 1 {
|
|
|
|
return fmt.Errorf("Your query returned no results. Please change your search criteria and try again.")
|
|
|
|
}
|
|
|
|
if len(resp.DBInstances) > 1 {
|
|
|
|
return fmt.Errorf("Your query returned more than one result. Please try a more specific search criteria.")
|
|
|
|
}
|
|
|
|
|
|
|
|
dbInstance := *resp.DBInstances[0]
|
|
|
|
|
|
|
|
d.SetId(d.Get("db_instance_identifier").(string))
|
|
|
|
|
|
|
|
d.Set("allocated_storage", dbInstance.AllocatedStorage)
|
|
|
|
d.Set("auto_minor_upgrade_enabled", dbInstance.AutoMinorVersionUpgrade)
|
|
|
|
d.Set("availability_zone", dbInstance.AvailabilityZone)
|
|
|
|
d.Set("backup_retention_period", dbInstance.BackupRetentionPeriod)
|
|
|
|
d.Set("db_cluster_identifier", dbInstance.DBClusterIdentifier)
|
|
|
|
d.Set("db_instance_arn", dbInstance.DBClusterIdentifier)
|
|
|
|
d.Set("db_instance_class", dbInstance.DBInstanceClass)
|
|
|
|
d.Set("db_name", dbInstance.DBName)
|
|
|
|
|
|
|
|
var parameterGroups []string
|
|
|
|
for _, v := range dbInstance.DBParameterGroups {
|
|
|
|
parameterGroups = append(parameterGroups, *v.DBParameterGroupName)
|
|
|
|
}
|
|
|
|
if err := d.Set("db_parameter_groups", parameterGroups); err != nil {
|
|
|
|
return fmt.Errorf("[DEBUG] Error setting db_parameter_groups attribute: %#v, error: %#v", parameterGroups, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
var dbSecurityGroups []string
|
|
|
|
for _, v := range dbInstance.DBSecurityGroups {
|
|
|
|
dbSecurityGroups = append(dbSecurityGroups, *v.DBSecurityGroupName)
|
|
|
|
}
|
|
|
|
if err := d.Set("db_security_groups", dbSecurityGroups); err != nil {
|
|
|
|
return fmt.Errorf("[DEBUG] Error setting db_security_groups attribute: %#v, error: %#v", dbSecurityGroups, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
d.Set("db_subnet_group", dbInstance.DBSubnetGroup)
|
|
|
|
d.Set("db_instance_port", dbInstance.DbInstancePort)
|
|
|
|
d.Set("engine", dbInstance.Engine)
|
|
|
|
d.Set("engine_version", dbInstance.EngineVersion)
|
|
|
|
d.Set("iops", dbInstance.Iops)
|
|
|
|
d.Set("kms_key_id", dbInstance.KmsKeyId)
|
|
|
|
d.Set("license_model", dbInstance.LicenseModel)
|
|
|
|
d.Set("master_username", dbInstance.MasterUsername)
|
|
|
|
d.Set("monitoring_interval", dbInstance.MonitoringInterval)
|
|
|
|
d.Set("monitoring_role_arn", dbInstance.MonitoringRoleArn)
|
2017-03-13 09:31:24 +01:00
|
|
|
d.Set("address", dbInstance.Endpoint.Address)
|
|
|
|
d.Set("port", dbInstance.Endpoint.Port)
|
|
|
|
d.Set("hosted_zone_id", dbInstance.Endpoint.HostedZoneId)
|
|
|
|
d.Set("endpoint", fmt.Sprintf("%s:%d", *dbInstance.Endpoint.Address, *dbInstance.Endpoint.Port))
|
2017-02-10 15:58:31 +01:00
|
|
|
|
|
|
|
var optionGroups []string
|
|
|
|
for _, v := range dbInstance.OptionGroupMemberships {
|
|
|
|
optionGroups = append(optionGroups, *v.OptionGroupName)
|
|
|
|
}
|
|
|
|
if err := d.Set("option_group_memberships", optionGroups); err != nil {
|
|
|
|
return fmt.Errorf("[DEBUG] Error setting option_group_memberships attribute: %#v, error: %#v", optionGroups, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
d.Set("preferred_backup_window", dbInstance.PreferredBackupWindow)
|
|
|
|
d.Set("preferred_maintenance_window", dbInstance.PreferredMaintenanceWindow)
|
|
|
|
d.Set("publicly_accessible", dbInstance.PubliclyAccessible)
|
|
|
|
d.Set("storage_encrypted", dbInstance.StorageEncrypted)
|
|
|
|
d.Set("storage_type", dbInstance.StorageType)
|
|
|
|
d.Set("timezone", dbInstance.Timezone)
|
2017-04-21 13:23:48 +02:00
|
|
|
d.Set("replicate_source_db", dbInstance.ReadReplicaSourceDBInstanceIdentifier)
|
2017-02-10 15:58:31 +01:00
|
|
|
|
|
|
|
var vpcSecurityGroups []string
|
|
|
|
for _, v := range dbInstance.VpcSecurityGroups {
|
|
|
|
vpcSecurityGroups = append(vpcSecurityGroups, *v.VpcSecurityGroupId)
|
|
|
|
}
|
|
|
|
if err := d.Set("vpc_security_groups", vpcSecurityGroups); err != nil {
|
|
|
|
return fmt.Errorf("[DEBUG] Error setting vpc_security_groups attribute: %#v, error: %#v", vpcSecurityGroups, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|