terraform/builtin/providers/aws/data_source_aws_db_instance.go

291 lines
7.1 KiB
Go

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,
},
"address": {
Type: schema.TypeString,
Computed: true,
},
"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,
},
"endpoint": {
Type: schema.TypeString,
Computed: true,
},
"engine": {
Type: schema.TypeString,
Computed: true,
},
"engine_version": {
Type: schema.TypeString,
Computed: true,
},
"hosted_zone_id": {
Type: schema.TypeString,
Computed: true,
},
"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},
},
"port": {
Type: schema.TypeInt,
Computed: true,
},
"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},
},
"replicate_source_db": {
Type: schema.TypeString,
Computed: true,
},
},
}
}
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)
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))
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)
d.Set("replicate_source_db", dbInstance.ReadReplicaSourceDBInstanceIdentifier)
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
}