github.com/cbroglie/terraform@v0.7.0-rc3.0.20170410193827-735dfc416d46/builtin/providers/aws/data_source_aws_db_instance.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/rds" 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 func dataSourceAwsDbInstance() *schema.Resource { 13 return &schema.Resource{ 14 Read: dataSourceAwsDbInstanceRead, 15 16 Schema: map[string]*schema.Schema{ 17 "db_instance_identifier": { 18 Type: schema.TypeString, 19 Required: true, 20 ForceNew: true, 21 }, 22 23 "address": { 24 Type: schema.TypeString, 25 Computed: true, 26 }, 27 28 "allocated_storage": { 29 Type: schema.TypeInt, 30 Computed: true, 31 }, 32 33 "auto_minor_version_upgrade": { 34 Type: schema.TypeBool, 35 Computed: true, 36 }, 37 38 "availability_zone": { 39 Type: schema.TypeString, 40 Computed: true, 41 }, 42 43 "backup_retention_period": { 44 Type: schema.TypeInt, 45 Computed: true, 46 }, 47 48 "db_cluster_identifier": { 49 Type: schema.TypeString, 50 Computed: true, 51 }, 52 53 "db_instance_arn": { 54 Type: schema.TypeString, 55 Computed: true, 56 }, 57 58 "db_instance_class": { 59 Type: schema.TypeString, 60 Computed: true, 61 }, 62 63 "db_name": { 64 Type: schema.TypeString, 65 Computed: true, 66 }, 67 68 "db_parameter_groups": { 69 Type: schema.TypeList, 70 Computed: true, 71 Elem: &schema.Schema{Type: schema.TypeString}, 72 }, 73 74 "db_security_groups": { 75 Type: schema.TypeList, 76 Computed: true, 77 Elem: &schema.Schema{Type: schema.TypeString}, 78 }, 79 80 "db_subnet_group": { 81 Type: schema.TypeString, 82 Computed: true, 83 }, 84 85 "db_instance_port": { 86 Type: schema.TypeInt, 87 Computed: true, 88 }, 89 90 "endpoint": { 91 Type: schema.TypeString, 92 Computed: true, 93 }, 94 95 "engine": { 96 Type: schema.TypeString, 97 Computed: true, 98 }, 99 100 "engine_version": { 101 Type: schema.TypeString, 102 Computed: true, 103 }, 104 105 "hosted_zone_id": { 106 Type: schema.TypeString, 107 Computed: true, 108 }, 109 110 "iops": { 111 Type: schema.TypeInt, 112 Computed: true, 113 }, 114 115 "kms_key_id": { 116 Type: schema.TypeString, 117 Computed: true, 118 }, 119 120 "license_model": { 121 Type: schema.TypeString, 122 Computed: true, 123 }, 124 125 "master_username": { 126 Type: schema.TypeString, 127 Computed: true, 128 }, 129 130 "monitoring_interval": { 131 Type: schema.TypeInt, 132 Computed: true, 133 }, 134 135 "monitoring_role_arn": { 136 Type: schema.TypeString, 137 Computed: true, 138 }, 139 140 "multi_az": { 141 Type: schema.TypeBool, 142 Computed: true, 143 }, 144 145 "option_group_memberships": { 146 Type: schema.TypeList, 147 Computed: true, 148 Elem: &schema.Schema{Type: schema.TypeString}, 149 }, 150 151 "port": { 152 Type: schema.TypeInt, 153 Computed: true, 154 }, 155 156 "preferred_backup_window": { 157 Type: schema.TypeString, 158 Computed: true, 159 }, 160 161 "preferred_maintenance_window": { 162 Type: schema.TypeString, 163 Computed: true, 164 }, 165 166 "publicly_accessible": { 167 Type: schema.TypeBool, 168 Computed: true, 169 }, 170 171 "storage_encrypted": { 172 Type: schema.TypeBool, 173 Computed: true, 174 }, 175 176 "storage_type": { 177 Type: schema.TypeString, 178 Computed: true, 179 }, 180 181 "timezone": { 182 Type: schema.TypeString, 183 Computed: true, 184 }, 185 186 "vpc_security_groups": { 187 Type: schema.TypeList, 188 Computed: true, 189 Elem: &schema.Schema{Type: schema.TypeString}, 190 }, 191 }, 192 } 193 } 194 195 func dataSourceAwsDbInstanceRead(d *schema.ResourceData, meta interface{}) error { 196 conn := meta.(*AWSClient).rdsconn 197 198 opts := rds.DescribeDBInstancesInput{ 199 DBInstanceIdentifier: aws.String(d.Get("db_instance_identifier").(string)), 200 } 201 202 log.Printf("[DEBUG] DB Instance describe configuration: %#v", opts) 203 204 resp, err := conn.DescribeDBInstances(&opts) 205 if err != nil { 206 return err 207 } 208 209 if len(resp.DBInstances) < 1 { 210 return fmt.Errorf("Your query returned no results. Please change your search criteria and try again.") 211 } 212 if len(resp.DBInstances) > 1 { 213 return fmt.Errorf("Your query returned more than one result. Please try a more specific search criteria.") 214 } 215 216 dbInstance := *resp.DBInstances[0] 217 218 d.SetId(d.Get("db_instance_identifier").(string)) 219 220 d.Set("allocated_storage", dbInstance.AllocatedStorage) 221 d.Set("auto_minor_upgrade_enabled", dbInstance.AutoMinorVersionUpgrade) 222 d.Set("availability_zone", dbInstance.AvailabilityZone) 223 d.Set("backup_retention_period", dbInstance.BackupRetentionPeriod) 224 d.Set("db_cluster_identifier", dbInstance.DBClusterIdentifier) 225 d.Set("db_instance_arn", dbInstance.DBClusterIdentifier) 226 d.Set("db_instance_class", dbInstance.DBInstanceClass) 227 d.Set("db_name", dbInstance.DBName) 228 229 var parameterGroups []string 230 for _, v := range dbInstance.DBParameterGroups { 231 parameterGroups = append(parameterGroups, *v.DBParameterGroupName) 232 } 233 if err := d.Set("db_parameter_groups", parameterGroups); err != nil { 234 return fmt.Errorf("[DEBUG] Error setting db_parameter_groups attribute: %#v, error: %#v", parameterGroups, err) 235 } 236 237 var dbSecurityGroups []string 238 for _, v := range dbInstance.DBSecurityGroups { 239 dbSecurityGroups = append(dbSecurityGroups, *v.DBSecurityGroupName) 240 } 241 if err := d.Set("db_security_groups", dbSecurityGroups); err != nil { 242 return fmt.Errorf("[DEBUG] Error setting db_security_groups attribute: %#v, error: %#v", dbSecurityGroups, err) 243 } 244 245 d.Set("db_subnet_group", dbInstance.DBSubnetGroup) 246 d.Set("db_instance_port", dbInstance.DbInstancePort) 247 d.Set("engine", dbInstance.Engine) 248 d.Set("engine_version", dbInstance.EngineVersion) 249 d.Set("iops", dbInstance.Iops) 250 d.Set("kms_key_id", dbInstance.KmsKeyId) 251 d.Set("license_model", dbInstance.LicenseModel) 252 d.Set("master_username", dbInstance.MasterUsername) 253 d.Set("monitoring_interval", dbInstance.MonitoringInterval) 254 d.Set("monitoring_role_arn", dbInstance.MonitoringRoleArn) 255 d.Set("address", dbInstance.Endpoint.Address) 256 d.Set("port", dbInstance.Endpoint.Port) 257 d.Set("hosted_zone_id", dbInstance.Endpoint.HostedZoneId) 258 d.Set("endpoint", fmt.Sprintf("%s:%d", *dbInstance.Endpoint.Address, *dbInstance.Endpoint.Port)) 259 260 var optionGroups []string 261 for _, v := range dbInstance.OptionGroupMemberships { 262 optionGroups = append(optionGroups, *v.OptionGroupName) 263 } 264 if err := d.Set("option_group_memberships", optionGroups); err != nil { 265 return fmt.Errorf("[DEBUG] Error setting option_group_memberships attribute: %#v, error: %#v", optionGroups, err) 266 } 267 268 d.Set("preferred_backup_window", dbInstance.PreferredBackupWindow) 269 d.Set("preferred_maintenance_window", dbInstance.PreferredMaintenanceWindow) 270 d.Set("publicly_accessible", dbInstance.PubliclyAccessible) 271 d.Set("storage_encrypted", dbInstance.StorageEncrypted) 272 d.Set("storage_type", dbInstance.StorageType) 273 d.Set("timezone", dbInstance.Timezone) 274 275 var vpcSecurityGroups []string 276 for _, v := range dbInstance.VpcSecurityGroups { 277 vpcSecurityGroups = append(vpcSecurityGroups, *v.VpcSecurityGroupId) 278 } 279 if err := d.Set("vpc_security_groups", vpcSecurityGroups); err != nil { 280 return fmt.Errorf("[DEBUG] Error setting vpc_security_groups attribute: %#v, error: %#v", vpcSecurityGroups, err) 281 } 282 283 return nil 284 }