-
Notifications
You must be signed in to change notification settings - Fork 241
Description
I'm trying to use ConflictsWith on a TypeList and it isn't working. I think I've narrowed down the issue, but I'm not entirely sure.
The openstack_compute_instance_v2 resource has a network attribute of TypeList. The list defines several nested attributes that can all be used to create a network.
Some of the attributes can't be used together. For example, port and floating_ip. So I made the following changes:
"port": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"network.floating_ip"},
},
"floating_ip": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"network.port"},
},Then, given something simple like:
resource "openstack_compute_instance_v2" "instance_1" {
name = "instance_1"
network {
floating_ip = "foo"
port = "bar"
}
}I would expect an error to be throw, however, one isn't. But, if I change the schema to:
"port": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"network.0.floating_ip"},
},
"floating_ip": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"network.0.port"},
},Then I get a validation error. Of course, that is only applicable to the first defined network.
Throwing some debug output into helper/schema/schema.go and terraform/resource.go, I think the following is happening:
During the loop for a conflicting key, s is network.0.port but conflicting_key is network.floating_ip. When network.floating_ip is checked here, since no index is specified, no value is returned.