mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-07-09 03:28:29 +00:00
providers/google: Move URLMap hosts to TypeSet from TypeList (#7472)
Using TypeSet allows host entries to be ordered arbitrarily in a manifest.
This commit is contained in:
parent
ccc350197f
commit
4a3461aa74
|
@ -40,8 +40,10 @@ func resourceComputeUrlMap() *schema.Resource {
|
||||||
},
|
},
|
||||||
|
|
||||||
"host_rule": &schema.Schema{
|
"host_rule": &schema.Schema{
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeSet,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
// TODO(evandbrown): Enable when lists support validation
|
||||||
|
//ValidateFunc: validateHostRules,
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"description": &schema.Schema{
|
"description": &schema.Schema{
|
||||||
|
@ -258,10 +260,10 @@ func resourceComputeUrlMapCreate(d *schema.ResourceData, meta interface{}) error
|
||||||
urlMap.Description = v.(string)
|
urlMap.Description = v.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
_hostRules := d.Get("host_rule").([]interface{})
|
_hostRules := d.Get("host_rule").(*schema.Set)
|
||||||
urlMap.HostRules = make([]*compute.HostRule, len(_hostRules))
|
urlMap.HostRules = make([]*compute.HostRule, _hostRules.Len())
|
||||||
|
|
||||||
for i, v := range _hostRules {
|
for i, v := range _hostRules.List() {
|
||||||
urlMap.HostRules[i] = createHostRule(v)
|
urlMap.HostRules[i] = createHostRule(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,7 +334,7 @@ func resourceComputeUrlMapRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only read host rules into our TF state that we have defined */
|
/* Only read host rules into our TF state that we have defined */
|
||||||
_hostRules := d.Get("host_rule").([]interface{})
|
_hostRules := d.Get("host_rule").(*schema.Set).List()
|
||||||
_newHostRules := make([]interface{}, 0)
|
_newHostRules := make([]interface{}, 0)
|
||||||
for _, v := range _hostRules {
|
for _, v := range _hostRules {
|
||||||
_hostRule := v.(map[string]interface{})
|
_hostRule := v.(map[string]interface{})
|
||||||
|
@ -463,12 +465,12 @@ func resourceComputeUrlMapUpdate(d *schema.ResourceData, meta interface{}) error
|
||||||
_oldHostRulesMap := make(map[string]interface{})
|
_oldHostRulesMap := make(map[string]interface{})
|
||||||
_newHostRulesMap := make(map[string]interface{})
|
_newHostRulesMap := make(map[string]interface{})
|
||||||
|
|
||||||
for _, v := range _oldHostRules.([]interface{}) {
|
for _, v := range _oldHostRules.(*schema.Set).List() {
|
||||||
_hostRule := v.(map[string]interface{})
|
_hostRule := v.(map[string]interface{})
|
||||||
_oldHostRulesMap[_hostRule["path_matcher"].(string)] = v
|
_oldHostRulesMap[_hostRule["path_matcher"].(string)] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range _newHostRules.([]interface{}) {
|
for _, v := range _newHostRules.(*schema.Set).List() {
|
||||||
_hostRule := v.(map[string]interface{})
|
_hostRule := v.(map[string]interface{})
|
||||||
_newHostRulesMap[_hostRule["path_matcher"].(string)] = v
|
_newHostRulesMap[_hostRule["path_matcher"].(string)] = v
|
||||||
}
|
}
|
||||||
|
@ -515,7 +517,7 @@ func resourceComputeUrlMapUpdate(d *schema.ResourceData, meta interface{}) error
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now add in the brand new entries */
|
/* Now add in the brand new entries */
|
||||||
for host, _ := range _oldHostsSet {
|
for host, _ := range _newHostsSet {
|
||||||
hostRule.Hosts = append(hostRule.Hosts, host)
|
hostRule.Hosts = append(hostRule.Hosts, host)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -644,7 +646,6 @@ func resourceComputeUrlMapUpdate(d *schema.ResourceData, meta interface{}) error
|
||||||
|
|
||||||
urlMap.Tests = newTests
|
urlMap.Tests = newTests
|
||||||
}
|
}
|
||||||
|
|
||||||
op, err := config.clientCompute.UrlMaps.Update(project, urlMap.Name, urlMap).Do()
|
op, err := config.clientCompute.UrlMaps.Update(project, urlMap.Name, urlMap).Do()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -684,3 +685,18 @@ func resourceComputeUrlMapDelete(d *schema.ResourceData, meta interface{}) error
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func validateHostRules(v interface{}, k string) (ws []string, es []error) {
|
||||||
|
pathMatchers := make(map[string]bool)
|
||||||
|
hostRules := v.([]interface{})
|
||||||
|
for _, hri := range hostRules {
|
||||||
|
hr := hri.(map[string]interface{})
|
||||||
|
pm := hr["path_matcher"].(string)
|
||||||
|
if pathMatchers[pm] {
|
||||||
|
es = append(es, fmt.Errorf("Multiple host_rule entries with the same path_matcher are not allowed. Please collapse all hosts with the same path_matcher into one host_rule"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pathMatchers[pm] = true
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user