func resource_aws_security_group_update_state( s *terraform.ResourceState, sg *ec2.SecurityGroupInfo) (*terraform.ResourceState, error) { s.Attributes["description"] = sg.Description s.Attributes["name"] = sg.Name s.Attributes["vpc_id"] = sg.VpcId s.Attributes["owner_id"] = sg.OwnerId // Flatten our ingress values toFlatten := make(map[string]interface{}) toFlatten["ingress"] = flattenIPPerms(sg.IPPerms) for k, v := range flatmap.Flatten(toFlatten) { s.Attributes[k] = v } s.Dependencies = nil if s.Attributes["vpc_id"] != "" { s.Dependencies = append(s.Dependencies, terraform.ResourceDependency{ID: s.Attributes["vpc_id"]}, ) } return s, nil }
func resource_aws_instance_update_state( s *terraform.ResourceState, instance *ec2.Instance) (*terraform.ResourceState, error) { s.Attributes["availability_zone"] = instance.AvailZone s.Attributes["key_name"] = instance.KeyName s.Attributes["public_dns"] = instance.DNSName s.Attributes["public_ip"] = instance.PublicIpAddress s.Attributes["private_dns"] = instance.PrivateDNSName s.Attributes["private_ip"] = instance.PrivateIpAddress s.Attributes["subnet_id"] = instance.SubnetId s.Dependencies = nil // Extract the existing security groups useID := false if raw := flatmap.Expand(s.Attributes, "security_groups"); raw != nil { if sgs, ok := raw.([]interface{}); ok { for _, sg := range sgs { str, ok := sg.(string) if !ok { continue } if strings.HasPrefix(str, "sg-") { useID = true break } } } } // Build up the security groups sgs := make([]string, len(instance.SecurityGroups)) for i, sg := range instance.SecurityGroups { if instance.SubnetId != "" && useID { sgs[i] = sg.Id } else { sgs[i] = sg.Name } s.Dependencies = append(s.Dependencies, terraform.ResourceDependency{ID: sg.Id}, ) } flatmap.Map(s.Attributes).Merge(flatmap.Flatten(map[string]interface{}{ "security_groups": sgs, })) if instance.SubnetId != "" { s.Dependencies = append(s.Dependencies, terraform.ResourceDependency{ID: instance.SubnetId}, ) } return s, nil }
func resource_aws_security_group_update_state( s *terraform.ResourceState, sg *ec2.SecurityGroupInfo) (*terraform.ResourceState, error) { s.Attributes["description"] = sg.Description s.Attributes["name"] = sg.Name s.Attributes["vpc_id"] = sg.VpcId s.Attributes["owner_id"] = sg.OwnerId // Flatten our ingress values toFlatten := make(map[string]interface{}) ingressRules := make([]map[string]interface{}, 0, len(sg.IPPerms)) for _, perm := range sg.IPPerms { n := make(map[string]interface{}) n["from_port"] = perm.FromPort n["protocol"] = perm.Protocol n["to_port"] = perm.ToPort if len(perm.SourceIPs) > 0 { n["cidr_blocks"] = perm.SourceIPs } if len(perm.SourceGroups) > 0 { // We depend on other security groups for _, v := range perm.SourceGroups { s.Dependencies = append(s.Dependencies, terraform.ResourceDependency{ID: v.Id}, ) } n["security_groups"] = flattenSecurityGroups(perm.SourceGroups) } // Reverse the order, as Amazon sorts it the reverse of how we created // it. ingressRules = append([]map[string]interface{}{n}, ingressRules...) } toFlatten["ingress"] = ingressRules for k, v := range flatmap.Flatten(toFlatten) { s.Attributes[k] = v } if s.Attributes["vpc_id"] != "" { s.Dependencies = append(s.Dependencies, terraform.ResourceDependency{ID: s.Attributes["vpc_id"]}, ) } return s, nil }
func resource_aws_internet_gateway_update_state( s *terraform.ResourceState, ig *ec2.InternetGateway) (*terraform.ResourceState, error) { if s.Attributes["vpc_id"] != "" { // We belong to a VPC s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: s.Attributes["vpc_id"]}, } } return s, nil }
func resource_aws_route_table_update_state( s *terraform.ResourceState, rt *ec2.RouteTable) (*terraform.ResourceState, error) { s.Attributes["vpc_id"] = rt.VpcId // We belong to a VPC s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: rt.VpcId}, } return s, nil }
func resource_aws_subnet_update_state( s *terraform.ResourceState, subnet *ec2.Subnet) (*terraform.ResourceState, error) { s.Attributes["availability_zone"] = subnet.AvailabilityZone s.Attributes["cidr_block"] = subnet.CidrBlock s.Attributes["vpc_id"] = subnet.VpcId // We belong to a VPC s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: subnet.VpcId}, } return s, nil }
func resource_digitalocean_record_update_state( s *terraform.ResourceState, rec *digitalocean.Record) (*terraform.ResourceState, error) { s.Attributes["name"] = rec.Name s.Attributes["type"] = rec.Type s.Attributes["value"] = rec.Data s.Attributes["weight"] = rec.StringWeight() s.Attributes["priority"] = rec.StringPriority() s.Attributes["port"] = rec.StringPort() // We belong to a Domain s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: s.Attributes["domain"]}, } return s, nil }
func resource_aws_subnet_update_state( s *terraform.ResourceState, subnet *ec2.Subnet) (*terraform.ResourceState, error) { s.Attributes["availability_zone"] = subnet.AvailabilityZone s.Attributes["cidr_block"] = subnet.CidrBlock s.Attributes["vpc_id"] = subnet.VpcId if subnet.MapPublicIpOnLaunch { s.Attributes["map_public_ip_on_launch"] = "true" } // We belong to a VPC s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: subnet.VpcId}, } return s, nil }
func resource_aws_db_instance_update_state( s *terraform.ResourceState, v *rds.DBInstance) (*terraform.ResourceState, error) { s.Attributes["address"] = v.Address s.Attributes["allocated_storage"] = strconv.Itoa(v.AllocatedStorage) s.Attributes["availability_zone"] = v.AvailabilityZone s.Attributes["backup_retention_period"] = strconv.Itoa(v.BackupRetentionPeriod) s.Attributes["backup_window"] = v.PreferredBackupWindow s.Attributes["endpoint"] = fmt.Sprintf("%s:%s", s.Attributes["address"], strconv.Itoa(v.Port)) s.Attributes["engine"] = v.Engine s.Attributes["engine_version"] = v.EngineVersion s.Attributes["instance_class"] = v.DBInstanceClass s.Attributes["maintenance_window"] = v.PreferredMaintenanceWindow s.Attributes["multi_az"] = strconv.FormatBool(v.MultiAZ) s.Attributes["name"] = v.DBName s.Attributes["port"] = strconv.Itoa(v.Port) s.Attributes["status"] = v.DBInstanceStatus s.Attributes["username"] = v.MasterUsername s.Attributes["subnet_group_name"] = v.DBSubnetGroup.Name // Flatten our group values toFlatten := make(map[string]interface{}) if len(v.DBSecurityGroupNames) > 0 && v.DBSecurityGroupNames[0] != "" { toFlatten["security_group_names"] = v.DBSecurityGroupNames } if len(v.VpcSecurityGroupIds) > 0 && v.VpcSecurityGroupIds[0] != "" { toFlatten["vpc_security_group_ids"] = v.VpcSecurityGroupIds } for k, v := range flatmap.Flatten(toFlatten) { s.Attributes[k] = v } // We depend on any security groups attached for _, g := range v.DBSecurityGroupNames { s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: g}, } } return s, nil }
// State returns the new ResourceState after the diff and any Set // calls. func (d *ResourceData) State() *terraform.ResourceState { var result terraform.ResourceState result.ID = d.Id() // If we have no ID, then this resource doesn't exist and we just // return nil. if result.ID == "" { return nil } result.Attributes = d.stateObject("", d.schema) result.ConnInfo = d.ConnInfo() result.Dependencies = d.Dependencies() if v := d.Id(); v != "" { result.Attributes["id"] = d.Id() } return &result }
func resource_heroku_addon_update_state( s *terraform.ResourceState, addon *heroku.Addon) (*terraform.ResourceState, error) { s.Attributes["name"] = addon.Name s.Attributes["plan"] = addon.Plan.Name s.Attributes["provider_id"] = addon.ProviderId toFlatten := make(map[string]interface{}) if len(addon.ConfigVars) > 0 { toFlatten["config_vars"] = addon.ConfigVars } for k, v := range flatmap.Flatten(toFlatten) { s.Attributes[k] = v } s.Dependencies = []terraform.ResourceDependency{ terraform.ResourceDependency{ID: s.Attributes["app"]}, } return s, nil }