terraform-provider-vcd
terraform-provider-vcd copied to clipboard
Error: Unsupported attribute on vcd_edgegateway.edgegateway.external_network.name
Terraform Version
Terraform v1.0.7 on windows_amd64
- provider registry.terraform.io/terraform-providers/vcd v3.3.1
Affected Resource(s)
vcd_edgegateway
Terraform Configuration Files
provider "vcd" {
user = var.vcd_user
password = var.vcd_pass
org = var.vcd_org
vdc = var.vcd_vdc
url = var.vcd_url
max_retry_timeout = var.vcd_max_retry_timeout
allow_unverified_ssl = var.vcd_allow_unverified_ssl
}
data "vcd_edgegateway" "edgegateway_1" {
name = var.vcd_vdc
org = var.vcd_org
vdc = var.vcd_vdc
}
output "edge_gateway_id" {
value=data.vcd_edgegateway.edgegateway_1.id
}
data "vcd_external_network" "external_network1" {
name = data.vcd_edgegateway.edgegateway_1.external_network.name
}
Debug Output
https://gist.github.com/air-awan/4799cc0bcdfce1697ab37d26804fc37a
Panic Output
Expected Behavior
Terraform should show external network name of the edge gateway https://registry.terraform.io/providers/vmware/vcd/latest/docs/data-sources/edgegateway
Actual Behavior
Error: Unsupported attribute in data "vcd_external_network" "external_network1": name = data.vcd_edgegateway.edgegateway_1.external_network.name
Can't access attributes on a set of objects. Did you mean to access an attribute across all elements of the set?
Steps to Reproduce
-
terraform plan
Important Factoids
Using Org Account
References
Hello, If you checked on the deifinition of external networks - it is more complicated then you think: https://registry.terraform.io/providers/vmware/vcd/latest/docs/resources/edgegateway
So you needto acces a set of elements. You could convert it using native tolist
function to make a list and then index over it.
Hi Didainius,
Thank you for answering. So actually I was just trying the example from this link: https://registry.terraform.io/providers/vmware/vcd/latest/docs/data-sources/edgegateway The very first example there was this:
data "vcd_edgegateway" "mygw" {
name = "mygw"
org = "myorg"
vdc = "myvdc"
}
output "edge_gateway_id" {
value = data.vcd_edgegateway.mygw.id
}
# Get the name of the default gateway from the data source
# and use it to establish a second data source
data "vcd_external_network" "external_network1" {
name = data.vcd_edgegateway.mygw.external_network.name
}
# From the second data source we extract the basic networking info
output "gateway" {
value = data.vcd_external_network.external_network1.ip_scope.0.gateway
}
output "netmask" {
value = data.vcd_external_network.external_network1.ip_scope.0.netmask
}
output "DNS" {
value = data.vcd_external_network.external_network1.ip_scope.0.dns1
}
output "external_ip" {
value = data.vcd_external_network.external_network1.ip_scope.0.static_ip_pool.0.start_address
}
I did try accessing it like a list by using [0]. Like you mentioned, it is a set, so it came back with Error: Invalid index.
So I tried using tolist as you suggested.
name = tolist(data.vcd_edgegateway.edgegateway_1.external_network.name)[0]
This one gave me the same Unsupported attribute error.
While trying this, name = tolist(data.vcd_edgegateway.edgegateway_1.external_network)[0].name
, the error message is different:
Error: error fetching external network (xxxxxxxxxxxxxx) details error fetching external network details functionality requires System Administrator privileges
What do you think?