func resourceAwsIamAccessKeyCreate(d *schema.ResourceData, meta interface{}) error { iamconn := meta.(*AWSClient).iamconn request := &iam.CreateAccessKeyInput{ UserName: aws.String(d.Get("user").(string)), } createResp, err := iamconn.CreateAccessKey(request) if err != nil { return fmt.Errorf( "Error creating access key for user %s: %s", *request.UserName, err, ) } if err := d.Set("secret", createResp.AccessKey.SecretAccessKey); err != nil { return err } return resourceAwsIamAccessKeyReadResult(d, &iam.AccessKeyMetadata{ AccessKeyID: createResp.AccessKey.AccessKeyID, CreateDate: createResp.AccessKey.CreateDate, Status: createResp.AccessKey.Status, UserName: createResp.AccessKey.UserName, }) }
func resourceAwsS3BucketObjectRead(d *schema.ResourceData, meta interface{}) error { s3conn := meta.(*AWSClient).s3conn bucket := d.Get("bucket").(string) key := d.Get("key").(string) etag := d.Get("etag").(string) resp, err := s3conn.HeadObject( &s3.HeadObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), IfMatch: aws.String(etag), }) if err != nil { // If S3 returns a 404 Request Failure, mark the object as destroyed if awsErr, ok := err.(awserr.RequestFailure); ok && awsErr.StatusCode() == 404 { d.SetId("") log.Printf("[WARN] Error Reading Object (%s), object not found (HTTP status 404)", key) return nil } return err } d.Set("cache_control", resp.CacheControl) d.Set("content_disposition", resp.ContentDisposition) d.Set("content_encoding", resp.ContentEncoding) d.Set("content_language", resp.ContentLanguage) d.Set("content_type", resp.ContentType) d.Set("version_id", resp.VersionId) log.Printf("[DEBUG] Reading S3 Bucket Object meta: %s", resp) return nil }
func getVolumeAttachments(computeClient *gophercloud.ServiceClient, d *schema.ResourceData) error { var attachments []volumeattach.VolumeAttachment err := volumeattach.List(computeClient, d.Id()).EachPage(func(page pagination.Page) (bool, error) { actual, err := volumeattach.ExtractVolumeAttachments(page) if err != nil { return false, err } attachments = actual return true, nil }) if err != nil { return err } vols := make([]map[string]interface{}, len(attachments)) for i, attachment := range attachments { vols[i] = make(map[string]interface{}) vols[i]["id"] = attachment.ID vols[i]["volume_id"] = attachment.VolumeID vols[i]["device"] = attachment.Device } log.Printf("[INFO] Volume attachments: %v", vols) d.Set("volume", vols) return nil }
func resourceGithubRepositoryCollaboratorRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*Organization).client u := d.Get("username").(string) r := d.Get("repository").(string) isCollaborator, _, err := client.Repositories.IsCollaborator(meta.(*Organization).name, r, u) if !isCollaborator || err != nil { d.SetId("") return nil } collaborators, _, err := client.Repositories.ListCollaborators(meta.(*Organization).name, r, &github.ListOptions{}) if err != nil { return err } for _, c := range collaborators { if *c.Login == u { permName, err := getRepoPermission(c.Permissions) if err != nil { return err } d.Set("permission", permName) return nil } } return nil }
func resourceAwsSnsTopicRead(d *schema.ResourceData, meta interface{}) error { snsconn := meta.(*AWSClient).snsconn attributeOutput, err := snsconn.GetTopicAttributes(&sns.GetTopicAttributesInput{ TopicArn: aws.String(d.Id()), }) if err != nil { return err } if attributeOutput.Attributes != nil && len(attributeOutput.Attributes) > 0 { attrmap := attributeOutput.Attributes resource := *resourceAwsSnsTopic() // iKey = internal struct key, oKey = AWS Attribute Map key for iKey, oKey := range SNSAttributeMap { log.Printf("[DEBUG] Updating %s => %s", iKey, oKey) if attrmap[oKey] != nil { // Some of the fetched attributes are stateful properties such as // the number of subscriptions, the owner, etc. skip those if resource.Schema[iKey] != nil { value := *attrmap[oKey] log.Printf("[DEBUG] Updating %s => %s -> %s", iKey, oKey, value) d.Set(iKey, *attrmap[oKey]) } } } } return nil }
func resourceFirewallRulesRead(d *schema.ResourceData, meta interface{}) error { vcdClient := meta.(*VCDClient) edgeGateway, err := vcdClient.OrgVdc.FindEdgeGateway(d.Get("edge_gateway").(string)) if err != nil { return fmt.Errorf("Error finding edge gateway: %#v", err) } ruleList := d.Get("rule").([]interface{}) firewallRules := *edgeGateway.EdgeGateway.Configuration.EdgeGatewayServiceConfiguration.FirewallService rulesCount := d.Get("rule.#").(int) for i := 0; i < rulesCount; i++ { prefix := fmt.Sprintf("rule.%d", i) if d.Get(prefix+".id").(string) == "" { log.Printf("[INFO] Rule %d has no id. Searching...", i) ruleid, err := matchFirewallRule(d, prefix, firewallRules.FirewallRule) if err == nil { currentRule := ruleList[i].(map[string]interface{}) currentRule["id"] = ruleid ruleList[i] = currentRule } } } d.Set("rule", ruleList) d.Set("default_action", firewallRules.DefaultAction) return nil }
func resourceAwsKeyPairRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).ec2conn req := &ec2.DescribeKeyPairsInput{ KeyNames: []*string{aws.String(d.Id())}, } resp, err := conn.DescribeKeyPairs(req) if err != nil { awsErr, ok := err.(awserr.Error) if ok && awsErr.Code() == "InvalidKeyPair.NotFound" { d.SetId("") return nil } return fmt.Errorf("Error retrieving KeyPair: %s", err) } for _, keyPair := range resp.KeyPairs { if *keyPair.KeyName == d.Id() { d.Set("key_name", keyPair.KeyName) d.Set("fingerprint", keyPair.KeyFingerprint) return nil } } return fmt.Errorf("Unable to find key pair within: %#v", resp.KeyPairs) }
func resourceComputeTargetPoolRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) region, err := getRegion(d, config) if err != nil { return err } project, err := getProject(d, config) if err != nil { return err } tpool, err := config.clientCompute.TargetPools.Get( project, region, d.Id()).Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { log.Printf("[WARN] Removing Target Pool %q because it's gone", d.Get("name").(string)) // The resource doesn't exist anymore d.SetId("") return nil } return fmt.Errorf("Error reading TargetPool: %s", err) } d.Set("self_link", tpool.SelfLink) return nil }
func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) database_name := d.Get("name").(string) instance_name := d.Get("instance").(string) project := config.Project db, err := config.clientSqlAdmin.Databases.Get(project, instance_name, database_name).Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { log.Printf("[WARN] Removing SQL Database %q because it's gone", d.Get("name").(string)) // The resource doesn't exist anymore d.SetId("") return nil } return fmt.Errorf("Error, failed to get"+ "database %s in instance %s: %s", database_name, instance_name, err) } d.Set("self_link", db.SelfLink) d.SetId(instance_name + ":" + database_name) return nil }
// resourceAzureStorageBlobRead does all the necessary API calls to // read the status of the storage blob off Azure. func resourceAzureStorageBlobRead(d *schema.ResourceData, meta interface{}) error { azureClient := meta.(*Client) // check for it's existence: exists, err := resourceAzureStorageBlobExists(d, meta) if err != nil { return err } // if it exists; read relevant information: if exists { storName := d.Get("storage_service_name").(string) blobClient, err := azureClient.getStorageServiceBlobClient(storName) if err != nil { return err } name := d.Get("name").(string) cont := d.Get("storage_container_name").(string) url := blobClient.GetBlobURL(cont, name) d.Set("url", url) } // NOTE: no need to unset the ID here, as resourceAzureStorageBlobExists // already should have done so if it were required. return nil }
func resourceComputeRouteRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) project, err := getProject(d, config) if err != nil { return err } route, err := config.clientCompute.Routes.Get( project, d.Id()).Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { log.Printf("[WARN] Removing Route %q because it's gone", d.Get("name").(string)) // The resource doesn't exist anymore d.SetId("") return nil } return fmt.Errorf("Error reading route: %#v", err) } d.Set("next_hop_network", route.NextHopNetwork) d.Set("self_link", route.SelfLink) return nil }
func resourceComputeSslCertificateRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) project, err := getProject(d, config) if err != nil { return err } cert, err := config.clientCompute.SslCertificates.Get( project, d.Id()).Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { log.Printf("[WARN] Removing SSL Certificate %q because it's gone", d.Get("name").(string)) // The resource doesn't exist anymore d.SetId("") return nil } return fmt.Errorf("Error reading ssl certificate: %s", err) } d.Set("self_link", cert.SelfLink) d.Set("id", strconv.FormatUint(cert.Id, 10)) return nil }
func resourceArmAvailabilitySetRead(d *schema.ResourceData, meta interface{}) error { availSetClient := meta.(*ArmClient).availSetClient id, err := parseAzureResourceID(d.Id()) if err != nil { return err } resGroup := id.ResourceGroup name := id.Path["availabilitySets"] resp, err := availSetClient.Get(resGroup, name) if resp.StatusCode == http.StatusNotFound { d.SetId("") return nil } if err != nil { return fmt.Errorf("Error making Read request on Azure Availability Set %s: %s", name, err) } availSet := *resp.Properties d.Set("platform_update_domain_count", availSet.PlatformUpdateDomainCount) d.Set("platform_fault_domain_count", availSet.PlatformFaultDomainCount) flattenAndSetTags(d, resp.Tags) return nil }
func resourceAwsElasticacheSecurityGroupRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).elasticacheconn req := &elasticache.DescribeCacheSecurityGroupsInput{ CacheSecurityGroupName: aws.String(d.Get("name").(string)), } res, err := conn.DescribeCacheSecurityGroups(req) if err != nil { return err } if len(res.CacheSecurityGroups) == 0 { return fmt.Errorf("Error missing %v", d.Get("name")) } var group *elasticache.CacheSecurityGroup for _, g := range res.CacheSecurityGroups { log.Printf("[DEBUG] CacheSecurityGroupName: %v, id: %v", g.CacheSecurityGroupName, d.Id()) if *g.CacheSecurityGroupName == d.Id() { group = g } } if group == nil { return fmt.Errorf("Error retrieving cache security group: %v", res) } d.Set("name", group.CacheSecurityGroupName) d.Set("description", group.Description) return nil }
func resourcePagerDutyServiceIntegrationRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*pagerduty.Client) log.Printf("[INFO] Reading PagerDuty service integration %s", d.Id()) service := d.Get("service").(string) o := &pagerduty.GetIntegrationOptions{} serviceIntegration, err := client.GetIntegration(service, d.Id(), *o) if err != nil { if isNotFound(err) { d.SetId("") return nil } return err } d.Set("name", serviceIntegration.Name) d.Set("type", serviceIntegration.Type) d.Set("service", serviceIntegration.Service) d.Set("vendor", serviceIntegration.Vendor) d.Set("integration_key", serviceIntegration.IntegrationKey) d.Set("integration_email", serviceIntegration.IntegrationEmail) return nil }
func resourceAwsVpnGatewayAttachmentRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).ec2conn vgwId := d.Get("vpn_gateway_id").(string) resp, err := conn.DescribeVpnGateways(&ec2.DescribeVpnGatewaysInput{ VpnGatewayIds: []*string{aws.String(vgwId)}, }) if err != nil { awsErr, ok := err.(awserr.Error) if ok && awsErr.Code() == "InvalidVPNGatewayID.NotFound" { log.Printf("[WARN] VPN Gateway %q not found.", vgwId) d.SetId("") return nil } return err } vgw := resp.VpnGateways[0] if *vgw.State == "deleted" { log.Printf("[INFO] VPN Gateway %q appears to have been deleted.", vgwId) d.SetId("") return nil } vga := vpnGatewayGetAttachment(vgw) if len(vgw.VpcAttachments) == 0 || *vga.State == "detached" { d.Set("vpc_id", "") return nil } d.Set("vpc_id", *vga.VpcId) return nil }
func resourceAwsEfsMountTargetRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).efsconn resp, err := conn.DescribeMountTargets(&efs.DescribeMountTargetsInput{ MountTargetId: aws.String(d.Id()), }) if err != nil { return err } if len(resp.MountTargets) < 1 { return fmt.Errorf("EFS mount target %q not found", d.Id()) } mt := resp.MountTargets[0] log.Printf("[DEBUG] Found EFS mount target: %#v", mt) d.SetId(*mt.MountTargetId) d.Set("file_system_id", *mt.FileSystemId) d.Set("ip_address", *mt.IpAddress) d.Set("subnet_id", *mt.SubnetId) d.Set("network_interface_id", *mt.NetworkInterfaceId) sgResp, err := conn.DescribeMountTargetSecurityGroups(&efs.DescribeMountTargetSecurityGroupsInput{ MountTargetId: aws.String(d.Id()), }) if err != nil { return err } d.Set("security_groups", schema.NewSet(schema.HashString, flattenStringList(sgResp.SecurityGroups))) return nil }
func resourceCloudStackNICRead(d *schema.ResourceData, meta interface{}) error { cs := meta.(*cloudstack.CloudStackClient) // Get the virtual machine details vm, count, err := cs.VirtualMachine.GetVirtualMachineByName(d.Get("virtual_machine").(string)) if err != nil { if count == 0 { log.Printf("[DEBUG] Instance %s does no longer exist", d.Get("virtual_machine").(string)) d.SetId("") return nil } else { return err } } // Read NIC info found := false for _, n := range vm.Nic { if n.Id == d.Id() { d.Set("ipaddress", n.Ipaddress) setValueOrID(d, "network", n.Networkname, n.Networkid) setValueOrID(d, "virtual_machine", vm.Name, vm.Id) found = true break } } if !found { log.Printf("[DEBUG] NIC for network %s does no longer exist", d.Get("network").(string)) d.SetId("") } return nil }
func (lt *opsworksLayerType) SetVolumeConfigurations(d *schema.ResourceData, v []*opsworks.VolumeConfiguration) { newValue := make([]*map[string]interface{}, len(v)) for i := 0; i < len(v); i++ { config := v[i] data := make(map[string]interface{}) newValue[i] = &data if config.Iops != nil { data["iops"] = int(*config.Iops) } else { data["iops"] = 0 } if config.MountPoint != nil { data["mount_point"] = *config.MountPoint } if config.NumberOfDisks != nil { data["number_of_disks"] = int(*config.NumberOfDisks) } if config.RaidLevel != nil { data["raid_level"] = strconv.Itoa(int(*config.RaidLevel)) } if config.Size != nil { data["size"] = int(*config.Size) } if config.VolumeType != nil { data["type"] = *config.VolumeType } } d.Set("ebs_volume", newValue) }
func resourceStorageBucketObjectRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) bucket := d.Get("bucket").(string) name := d.Get("name").(string) objectsService := storage.NewObjectsService(config.clientStorage) getCall := objectsService.Get(bucket, name) res, err := getCall.Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { log.Printf("[WARN] Removing Bucket Object %q because it's gone", d.Get("name").(string)) // The resource doesn't exist anymore d.SetId("") return nil } return fmt.Errorf("Error retrieving contents of object %s: %s", name, err) } d.Set("md5hash", res.Md5Hash) d.Set("crc32c", res.Crc32c) d.SetId(objectGetId(res)) return nil }
func resourceArmNetworkSecurityGroupRead(d *schema.ResourceData, meta interface{}) error { secGroupClient := meta.(*ArmClient).secGroupClient id, err := parseAzureResourceID(d.Id()) if err != nil { return err } resGroup := id.ResourceGroup name := id.Path["networkSecurityGroups"] resp, err := secGroupClient.Get(resGroup, name, "") if resp.StatusCode == http.StatusNotFound { d.SetId("") return nil } if err != nil { return fmt.Errorf("Error making Read request on Azure Network Security Group %s: %s", name, err) } if resp.Properties.SecurityRules != nil { d.Set("security_rule", flattenNetworkSecurityRules(resp.Properties.SecurityRules)) } flattenAndSetTags(d, resp.Tags) return nil }
// resourceArmLocalNetworkGatewayRead goes ahead and reads the state of the corresponding ARM local network gateway. func resourceArmLocalNetworkGatewayRead(d *schema.ResourceData, meta interface{}) error { lnetClient := meta.(*ArmClient).localNetConnClient id, err := parseAzureResourceID(d.Id()) if err != nil { return err } name := id.Path["localNetworkGateways"] resGroup := id.ResourceGroup resp, err := lnetClient.Get(resGroup, name) if err != nil { if resp.StatusCode == http.StatusNotFound { d.SetId("") return nil } return fmt.Errorf("Error reading the state of Azure ARM local network gateway '%s': %s", name, err) } d.Set("gateway_address", resp.Properties.GatewayIPAddress) prefs := []string{} if ps := *resp.Properties.LocalNetworkAddressSpace.AddressPrefixes; ps != nil { prefs = ps } d.Set("address_space", prefs) return nil }
func resourceAwsAmiCopyCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*AWSClient).ec2conn req := &ec2.CopyImageInput{ Name: aws.String(d.Get("name").(string)), Description: aws.String(d.Get("description").(string)), SourceImageId: aws.String(d.Get("source_ami_id").(string)), SourceRegion: aws.String(d.Get("source_ami_region").(string)), } res, err := client.CopyImage(req) if err != nil { return err } id := *res.ImageId d.SetId(id) d.Partial(true) // make sure we record the id even if the rest of this gets interrupted d.Set("id", id) d.Set("manage_ebs_snapshots", true) d.SetPartial("id") d.SetPartial("manage_ebs_snapshots") d.Partial(false) _, err = resourceAwsAmiWaitForAvailable(id, client) if err != nil { return err } return resourceAwsAmiUpdate(d, meta) }
func resourceStorageBucketRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) // Get the bucket and acl bucket := d.Get("name").(string) res, err := config.clientStorage.Buckets.Get(bucket).Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { log.Printf("[WARN] Removing Bucket %q because it's gone", d.Get("name").(string)) // The resource doesn't exist anymore d.SetId("") return nil } return fmt.Errorf("Error reading bucket %s: %v", bucket, err) } log.Printf("[DEBUG] Read bucket %v at location %v\n\n", res.Name, res.SelfLink) // Update the bucket ID according to the resource ID d.Set("self_link", res.SelfLink) d.SetId(res.Id) return nil }
func resourceComputeProjectMetadataRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) // Load project service log.Printf("[DEBUG] Loading project service: %s", config.Project) project, err := config.clientCompute.Projects.Get(config.Project).Do() if err != nil { return fmt.Errorf("Error loading project '%s': %s", config.Project, err) } md := project.CommonInstanceMetadata newMD := make(map[string]interface{}) for _, kv := range md.Items { newMD[kv.Key] = kv.Value } if err = d.Set("metadata", newMD); err != nil { return fmt.Errorf("Error setting metadata: %s", err) } d.SetId("common_metadata") return nil }
func resourceArmPublicIpRead(d *schema.ResourceData, meta interface{}) error { publicIPClient := meta.(*ArmClient).publicIPClient id, err := parseAzureResourceID(d.Id()) if err != nil { return err } resGroup := id.ResourceGroup name := id.Path["publicIPAddresses"] resp, err := publicIPClient.Get(resGroup, name) if resp.StatusCode == http.StatusNotFound { d.SetId("") return nil } if err != nil { return fmt.Errorf("Error making Read request on Azure public ip %s: %s", name, err) } if resp.Properties.DNSSettings != nil && resp.Properties.DNSSettings.Fqdn != nil && *resp.Properties.DNSSettings.Fqdn != "" { d.Set("fqdn", resp.Properties.DNSSettings.Fqdn) } if resp.Properties.IPAddress != nil && *resp.Properties.IPAddress != "" { d.Set("ip_address", resp.Properties.IPAddress) } return nil }
func resourceArmCdnProfileRead(d *schema.ResourceData, meta interface{}) error { cdnProfilesClient := meta.(*ArmClient).cdnProfilesClient id, err := parseAzureResourceID(d.Id()) if err != nil { return err } resGroup := id.ResourceGroup name := id.Path["Profiles"] resp, err := cdnProfilesClient.Get(name, resGroup) if resp.StatusCode == http.StatusNotFound { d.SetId("") return nil } if err != nil { return fmt.Errorf("Error making Read request on Azure CDN Profile %s: %s", name, err) } if resp.Properties != nil && resp.Properties.Sku != nil { d.Set("sku", string(resp.Properties.Sku.Name)) } flattenAndSetTags(d, resp.Tags) return nil }
func resourceAwsEfsFileSystemRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).efsconn resp, err := conn.DescribeFileSystems(&efs.DescribeFileSystemsInput{ FileSystemId: aws.String(d.Id()), }) if err != nil { if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "FileSystemNotFound" { log.Printf("[WARN] EFS File System (%s) not found, error code (404)", d.Id()) d.SetId("") return nil } return err } if len(resp.FileSystems) < 1 { return fmt.Errorf("EFS file system %q not found", d.Id()) } tagsResp, err := conn.DescribeTags(&efs.DescribeTagsInput{ FileSystemId: aws.String(d.Id()), }) if err != nil { return fmt.Errorf("Error retrieving EC2 tags for EFS file system (%q): %q", d.Id(), err.Error()) } d.Set("tags", tagsToMapEFS(tagsResp.Tags)) return nil }
func dataSourceDnsARecordRead(d *schema.ResourceData, meta interface{}) error { host := d.Get("host").(string) records, err := net.LookupIP(host) if err != nil { return err } addrs := make([]string, 0) for _, ip := range records { // LookupIP returns A (IPv4) and AAAA (IPv6) records // Filter out AAAA records if ipv4 := ip.To4(); ipv4 != nil { addrs = append(addrs, ipv4.String()) } } sort.Strings(addrs) d.Set("addrs", addrs) d.SetId(host) return nil }
func resourceAwsSnsTopicPolicyRead(d *schema.ResourceData, meta interface{}) error { snsconn := meta.(*AWSClient).snsconn attributeOutput, err := snsconn.GetTopicAttributes(&sns.GetTopicAttributesInput{ TopicArn: aws.String(d.Id()), }) if err != nil { if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "NotFound" { log.Printf("[WARN] SNS Topic (%s) not found, error code (404)", d.Id()) d.SetId("") return nil } return err } if attributeOutput.Attributes == nil { log.Printf("[WARN] SNS Topic (%q) attributes not found (nil)", d.Id()) d.SetId("") return nil } attrmap := attributeOutput.Attributes policy, ok := attrmap["Policy"] if !ok { log.Printf("[WARN] SNS Topic (%q) policy not found in attributes", d.Id()) d.SetId("") return nil } d.Set("policy", policy) return nil }