terraform-provider-vcd icon indicating copy to clipboard operation
terraform-provider-vcd copied to clipboard

Error: Unsupported attribute on vcd_edgegateway.edgegateway.external_network.name

Open air-awan opened this issue 3 years ago • 2 comments

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

  1. terraform plan

Important Factoids

Using Org Account

References

air-awan avatar Sep 16 '21 11:09 air-awan

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.

Didainius avatar Sep 16 '21 11:09 Didainius

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?

air-awan avatar Sep 16 '21 12:09 air-awan