func resourceConsulKeysHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["path"].(string))) return hashcode.String(buf.String()) }
func resourceAwsEniAttachmentHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["instance"].(string))) buf.WriteString(fmt.Sprintf("%d-", m["device_index"].(int))) return hashcode.String(buf.String()) }
func resourceAwsNetworkAclEntryHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%d-", m["from_port"].(int))) buf.WriteString(fmt.Sprintf("%d-", m["to_port"].(int))) buf.WriteString(fmt.Sprintf("%d-", m["rule_no"].(int))) buf.WriteString(fmt.Sprintf("%s-", m["action"].(string))) // The AWS network ACL API only speaks protocol numbers, and that's // all we store. Never hash a protocol name. protocol := m["protocol"].(string) if _, err := strconv.Atoi(m["protocol"].(string)); err != nil { // We're a protocol name. Look up the number. buf.WriteString(fmt.Sprintf("%d-", protocolIntegers()[protocol])) } else { // We're a protocol number. Pass the value through. buf.WriteString(fmt.Sprintf("%s-", protocol)) } buf.WriteString(fmt.Sprintf("%s-", m["cidr_block"].(string))) if v, ok := m["ssl_certificate_id"]; ok { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } if v, ok := m["icmp_type"]; ok { buf.WriteString(fmt.Sprintf("%d-", v.(int))) } if v, ok := m["icmp_code"]; ok { buf.WriteString(fmt.Sprintf("%d-", v.(int))) } return hashcode.String(buf.String()) }
// HashResource hashes complex structures that are described using // a *Resource. This is the default set implementation used when a set's // element type is a full resource. func HashResource(resource *Resource) SchemaSetFunc { return func(v interface{}) int { var buf bytes.Buffer SerializeResourceForHash(&buf, v, resource) return hashcode.String(buf.String()) } }
func resourceAwsRouteTableHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) if v, ok := m["cidr_block"]; ok { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } if v, ok := m["gateway_id"]; ok { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } natGatewaySet := false if v, ok := m["nat_gateway_id"]; ok { natGatewaySet = v.(string) != "" buf.WriteString(fmt.Sprintf("%s-", v.(string))) } instanceSet := false if v, ok := m["instance_id"]; ok { instanceSet = v.(string) != "" buf.WriteString(fmt.Sprintf("%s-", v.(string))) } if v, ok := m["vpc_peering_connection_id"]; ok { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } if v, ok := m["network_interface_id"]; ok && !(instanceSet || natGatewaySet) { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } return hashcode.String(buf.String()) }
func writeV1BlockDevice( is *terraform.InstanceState, oldBd map[string]string) error { code := hashcode.String(oldBd["device_name"]) bdType := "ebs_block_device" if vn, ok := oldBd["virtual_name"]; ok && strings.HasPrefix(vn, "ephemeral") { bdType = "ephemeral_block_device" } else if dn, ok := oldBd["device_name"]; ok && dn == "/dev/sda1" { bdType = "root_block_device" } switch bdType { case "ebs_block_device": delete(oldBd, "virtual_name") case "root_block_device": delete(oldBd, "virtual_name") delete(oldBd, "encrypted") delete(oldBd, "snapshot_id") case "ephemeral_block_device": delete(oldBd, "delete_on_termination") delete(oldBd, "encrypted") delete(oldBd, "iops") delete(oldBd, "volume_size") delete(oldBd, "volume_type") } for attr, val := range oldBd { attrKey := fmt.Sprintf("%s.%d.%s", bdType, code, attr) is.Attributes[attrKey] = val } countAttr := fmt.Sprintf("%s.#", bdType) count, _ := strconv.Atoi(is.Attributes[countAttr]) is.Attributes[countAttr] = strconv.Itoa(count + 1) return nil }
func resourceDockerIpamConfigHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) if v, ok := m["subnet"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["ip_range"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["gateway"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["aux_address"]; ok { auxAddress := v.(map[string]interface{}) keys := make([]string, len(auxAddress)) i := 0 for k, _ := range auxAddress { keys[i] = k i++ } sort.Strings(keys) for _, k := range keys { buf.WriteString(fmt.Sprintf("%v-%v-", k, auxAddress[k].(string))) } } return hashcode.String(buf.String()) }
func resourceAwsElasticacheSubnetGroup() *schema.Resource { return &schema.Resource{ Create: resourceAwsElasticacheSubnetGroupCreate, Read: resourceAwsElasticacheSubnetGroupRead, Update: resourceAwsElasticacheSubnetGroupUpdate, Delete: resourceAwsElasticacheSubnetGroupDelete, Schema: map[string]*schema.Schema{ "description": &schema.Schema{ Type: schema.TypeString, Required: true, }, "name": &schema.Schema{ Type: schema.TypeString, Required: true, ForceNew: true, StateFunc: func(val interface{}) string { // Elasticache normalizes subnet names to lowercase, // so we have to do this too or else we can end up // with non-converging diffs. return strings.ToLower(val.(string)) }, }, "subnet_ids": &schema.Schema{ Type: schema.TypeSet, Required: true, Elem: &schema.Schema{Type: schema.TypeString}, Set: func(v interface{}) int { return hashcode.String(v.(string)) }, }, }, } }
func resourceAwsElasticacheSecurityGroup() *schema.Resource { return &schema.Resource{ Create: resourceAwsElasticacheSecurityGroupCreate, Read: resourceAwsElasticacheSecurityGroupRead, Delete: resourceAwsElasticacheSecurityGroupDelete, Schema: map[string]*schema.Schema{ "description": &schema.Schema{ Type: schema.TypeString, Required: true, ForceNew: true, }, "name": &schema.Schema{ Type: schema.TypeString, Required: true, ForceNew: true, }, "security_group_names": &schema.Schema{ Type: schema.TypeSet, Required: true, ForceNew: true, Elem: &schema.Schema{Type: schema.TypeString}, Set: func(v interface{}) int { return hashcode.String(v.(string)) }, }, }, } }
func resourceAwsVpcEndpoint() *schema.Resource { return &schema.Resource{ Create: resourceAwsVPCEndpointCreate, Read: resourceAwsVPCEndpointRead, Update: resourceAwsVPCEndpointUpdate, Delete: resourceAwsVPCEndpointDelete, Schema: map[string]*schema.Schema{ "policy": &schema.Schema{ Type: schema.TypeString, Optional: true, Computed: true, StateFunc: normalizeJson, }, "vpc_id": &schema.Schema{ Type: schema.TypeString, Required: true, ForceNew: true, }, "service_name": &schema.Schema{ Type: schema.TypeString, Required: true, ForceNew: true, }, "route_table_ids": &schema.Schema{ Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, Set: func(v interface{}) int { return hashcode.String(v.(string)) }, }, }, } }
func resourceComputeInstancePersonalityHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["file"].(string))) return hashcode.String(buf.String()) }
func resourceComputeVolumeAttachmentHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["volume_id"].(string))) return hashcode.String(buf.String()) }
// HashSchema hashes values that are described using a *Schema. This is the // default set implementation used when a set's element type is a single // schema. func HashSchema(schema *Schema) SchemaSetFunc { return func(v interface{}) int { var buf bytes.Buffer SerializeValueForHash(&buf, v, schema) return hashcode.String(buf.String()) } }
func resourceGoogleComputeBackendServiceBackendHash(v interface{}) int { if v == nil { return 0 } var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["group"].(string))) if v, ok := m["balancing_mode"]; ok { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } if v, ok := m["capacity_scaler"]; ok { buf.WriteString(fmt.Sprintf("%f-", v.(float64))) } if v, ok := m["description"]; ok { buf.WriteString(fmt.Sprintf("%s-", v.(string))) } if v, ok := m["max_rate"]; ok { buf.WriteString(fmt.Sprintf("%d-", int64(v.(int)))) } if v, ok := m["max_rate_per_instance"]; ok { buf.WriteString(fmt.Sprintf("%f-", v.(float64))) } if v, ok := m["max_rate_per_instance"]; ok { buf.WriteString(fmt.Sprintf("%f-", v.(float64))) } return hashcode.String(buf.String()) }
func resourceDockerVolumesHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) if v, ok := m["from_container"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["container_path"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["host_path"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["volume_name"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(string))) } if v, ok := m["read_only"]; ok { buf.WriteString(fmt.Sprintf("%v-", v.(bool))) } return hashcode.String(buf.String()) }
func volumeAttachmentID(name, volumeID, instanceID string) string { var buf bytes.Buffer buf.WriteString(fmt.Sprintf("%s-", name)) buf.WriteString(fmt.Sprintf("%s-", instanceID)) buf.WriteString(fmt.Sprintf("%s-", volumeID)) return fmt.Sprintf("vai-%d", hashcode.String(buf.String())) }
func resourceArmCdnEndpointOriginHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["host_name"].(string))) return hashcode.String(buf.String()) }
func networkAclIdRuleNumberEgressHash(networkAclId string, ruleNumber int, egress bool, protocol string) string { var buf bytes.Buffer buf.WriteString(fmt.Sprintf("%s-", networkAclId)) buf.WriteString(fmt.Sprintf("%d-", ruleNumber)) buf.WriteString(fmt.Sprintf("%t-", egress)) buf.WriteString(fmt.Sprintf("%s-", protocol)) return fmt.Sprintf("nacl-%d", hashcode.String(buf.String())) }
func resourceAzureSubnetHash(v interface{}) int { m := v.(map[string]interface{}) subnet := m["name"].(string) + m["address_prefix"].(string) if securityGroup, present := m["security_group"]; present { subnet = subnet + securityGroup.(string) } return hashcode.String(subnet) }
func resourceAwsEcsTaskDefinitionVolumeHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["host_path"].(string))) return hashcode.String(buf.String()) }
func resourceCloudinitConfigExists(d *schema.ResourceData, meta interface{}) (bool, error) { rendered, err := renderCloudinitConfig(d) if err != nil { return false, err } return strconv.Itoa(hashcode.String(rendered)) == d.Id(), nil }
func resourceAwsElasticacheParameterHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["value"].(string))) return hashcode.String(buf.String()) }
func resourceVolumeAttachmentHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) if m["instance_id"] != nil { buf.WriteString(fmt.Sprintf("%s-", m["instance_id"].(string))) } return hashcode.String(buf.String()) }
func resourceArmRouteTableRouteHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["address_prefix"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["next_hop_type"].(string))) return hashcode.String(buf.String()) }
func resourceAwsDbParameterHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) // Store the value as a lower case string, to match how we store them in flattenParameters buf.WriteString(fmt.Sprintf("%s-", strings.ToLower(m["value"].(string)))) return hashcode.String(buf.String()) }
func autoscalingTagsToHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["key"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["value"].(string))) buf.WriteString(fmt.Sprintf("%t-", m["propagate_at_launch"].(bool))) return hashcode.String(buf.String()) }
func resourceAwsEcsLoadBalancerHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["elb_name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["container_name"].(string))) buf.WriteString(fmt.Sprintf("%d-", m["container_port"].(int))) return hashcode.String(buf.String()) }
func resourceArmNetworkInterfaceIpConfigurationHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["subnet_id"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["private_ip_address_allocation"].(string))) return hashcode.String(buf.String()) }
func resourceAwsRoute53AliasRecordHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["zone_id"].(string))) buf.WriteString(fmt.Sprintf("%t-", m["evaluate_target_health"].(bool))) return hashcode.String(buf.String()) }
func resourceAzureEndpointHash(v interface{}) int { var buf bytes.Buffer m := v.(map[string]interface{}) buf.WriteString(fmt.Sprintf("%s-", m["name"].(string))) buf.WriteString(fmt.Sprintf("%s-", m["protocol"].(string))) buf.WriteString(fmt.Sprintf("%d-", m["public_port"].(int))) buf.WriteString(fmt.Sprintf("%d-", m["private_port"].(int))) return hashcode.String(buf.String()) }