Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expanding function arguments for "cidrsubnets" does not work with "locals". #24910

Closed
mkielar opened this issue May 9, 2020 · 3 comments
Closed
Labels
bug confirmed a Terraform Core team member has reproduced this issue v0.12 Issues (primarily bugs) reported against v0.12 releases

Comments

@mkielar
Copy link

mkielar commented May 9, 2020

Terraform Version

→ terraform -v
Terraform v0.12.24

Terraform Configuration Files

variable "azs" { 
  type    = list(string) 
  default = ["a", "b", "c"]
}

variable "vpc_cidr" {
  type    = "string"
  default = "10.0.0.0/16"
}

locals {
  
  private_newbits  = [for x in var.azs: 2]
  database_newbits = [for x in var.azs: 4]
  pub_newbits      = [for x in var.azs: 8]

  newbits = concat(local.private_newbits, local.database_newbits, local.pub_newbits)

  subnets = cidrsubnets(var.vpc_cidr, local.newbits...)

}

Debug Output


→ TF_LOG=trace terraform validate
2020/05/09 21:29:38 [INFO] Terraform version: 0.12.24
2020/05/09 21:29:38 [INFO] Go runtime version: go1.12.13
2020/05/09 21:29:38 [INFO] CLI args: []string{"/c/tools/wsl/home/mkielar/.tfenv/versions/0.12.24/terraform", "validate"}
2020/05/09 21:29:38 [DEBUG] Attempting to open CLI config file: /c/tools/wsl/home/mkielar/.terraformrc
2020/05/09 21:29:38 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.
2020/05/09 21:29:38 [INFO] CLI command args: []string{"validate"}
2020/05/09 21:29:38 [DEBUG] checking for provider in "."
2020/05/09 21:29:38 [DEBUG] checking for provider in "/c/tools/wsl/home/mkielar/.tfenv/versions/0.12.24"
2020/05/09 21:29:38 [DEBUG] checking for provisioner in "."
2020/05/09 21:29:38 [DEBUG] checking for provisioner in "/c/tools/wsl/home/mkielar/.tfenv/versions/0.12.24"
2020/05/09 21:29:38 [INFO] Failed to read plugin lock file .terraform/plugins/linux_amd64/lock.json: open .terraform/plugins/linux_amd64/lock.json: no such file or directory
2020/05/09 21:29:38 [TRACE] terraform.NewContext: starting
2020/05/09 21:29:38 [TRACE] terraform.NewContext: resolving provider version selections
2020/05/09 21:29:38 [TRACE] terraform.NewContext: loading provider schemas
2020/05/09 21:29:38 [TRACE] terraform.NewContext: complete
2020/05/09 21:29:38 [INFO] terraform: building graph: GraphTypeValidate
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.ConfigTransformer
2020/05/09 21:29:38 [TRACE] ConfigTransformer: Starting for path:
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.ConfigTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.LocalTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.LocalTransformer with new graph:
  local.database_newbits - *terraform.NodeLocal
  local.newbits - *terraform.NodeLocal
  local.private_newbits - *terraform.NodeLocal
  local.pub_newbits - *terraform.NodeLocal
  local.subnets - *terraform.NodeLocal
  ------
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.OutputTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.OutputTransformer (no changes)

2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.OrphanResourceInstanceTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.OrphanResourceInstanceTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.StateTransformer
2020/05/09 21:29:38 [TRACE] StateTransformer: state is empty, so nothing to do
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.StateTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.OrphanOutputTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.OrphanOutputTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.AttachResourceConfigTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.AttachResourceConfigTransformer (no changes)
Warning: Quoted type constraints are deprecated
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.AttachStateTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.AttachStateTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.RootVariableTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.RootVariableTransformer with new graph:
  local.database_newbits - *terraform.NodeLocal
  local.newbits - *terraform.NodeLocal
  local.private_newbits - *terraform.NodeLocal
  local.pub_newbits - *terraform.NodeLocal
  local.subnets - *terraform.NodeLocal
  var.azs - *terraform.NodeRootVariable
  var.vpc_cidr - *terraform.NodeRootVariable
  ------
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.MissingProvisionerTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.MissingProvisionerTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.ProvisionerTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.ProvisionerTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.ModuleVariableTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.ModuleVariableTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.graphTransformerMulti
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Executing graph transform *terraform.ProviderConfigTransformer
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Completed graph transform *terraform.ProviderConfigTransformer with new graph:
  local.database_newbits - *terraform.NodeLocal
  local.newbits - *terraform.NodeLocal
  local.private_newbits - *terraform.NodeLocal
  local.pub_newbits - *terraform.NodeLocal
  local.subnets - *terraform.NodeLocal
  var.azs - *terraform.NodeRootVariable
  var.vpc_cidr - *terraform.NodeRootVariable
  ------
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Executing graph transform *terraform.MissingProviderTransformer
2020/05/0
9 21:29:38 [TRACE] (graphTransformerMulti) Completed graph transform *terraform.MissingProviderTransformer (no changes)
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Executing graph transform *terraform.ProviderTransformer
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Completed graph transform *terraform.ProviderTransformer (no changes)
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Executing graph transform *terraform.PruneProviderTransformer
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Completed graph transform *terraform.PruneProviderTransformer (no changes)
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Executing graph transform *terraform.ParentProviderTransformer
2020/05/09 21:29:38 [TRACE] (graphTransformerMulti) Completed graph transform *terraform.ParentProviderTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.graphTransformerMulti (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.RemovedModuleTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.RemovedModuleTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.AttachSchemaTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.AttachSchemaTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.ReferenceTransformer
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer: "local.database_newbits" references: [var.azs]
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer: "var.azs" references: []
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer: "var.vpc_cidr" references: []
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer: "local.pub_newbits" references: [var.azs]
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer: "local.newbits" references: [local.private_newbits local.database_newbits local.pub_newbits]
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer: "local.subnets" references: [var.vpc_cidr local.newbits]
2020/05/09 21:29:38 [DEBUG] ReferenceTransformer:  on locals.tf line 7, in variable "vpc_cidr":
 "local.private_newbits" references: [var.azs]
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.ReferenceTransformer with new graph:
  local.database_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.newbits - *terraform.NodeLocal
    local.database_newbits - *terraform.NodeLocal
    local.private_newbits - *terraform.NodeLocal
    local.pub_newbits - *terraform.NodeLocal
  local.private_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.pub_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.subnets - *terraform.NodeLocal
    local.newbits - *terraform.NodeLocal
    var.vpc_cidr - *terraform.NodeRootVariable
  var.azs - *terraform.NodeRootVariable
  var.vpc_cidr - *terraform.NodeRootVariable
  ------
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.CountBoundaryTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.CountBoundaryTransformer with new graph:
  local.database_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.newbits - *terraform.NodeLocal
    local.database_newbits - *terraform.NodeLocal
    local.private_newbits - *terraform.NodeLocal
    local.pub_newbits - *terraform.NodeLocal
  local.private_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.pub_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.subnets - *terraform.NodeLocal
    local.newbits - *terraform.NodeLocal
    var.vpc_cidr - *terraform.NodeRootVariable
  meta.count-boundary (EachMode fixup) - *terraform.NodeCountBoundary
    local.database_newbits - *terraform.NodeLocal
    local.newbits - *terraform.NodeLocal
    local.private_newbits - *terraform.NodeLocal
    local.pub_newbits - *terraform.NodeLocal
    local.subnets - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
    var.vpc_cidr - *terraform.NodeRootVariable
  var.azs - *terraform.NodeRootVariable
  var.vpc_cidr - *terraform.NodeRoot   7:   type    = "string"
Variable
  ------
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.TargetsTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.TargetsTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.ForcedCBDTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.ForcedCBDTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.CloseProviderTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.CloseProviderTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.CloseProvisionerTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.CloseProvisionerTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.RootTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.RootTransformer (no changes)
2020/05/09 21:29:38 [TRACE] Executing graph transform *terraform.TransitiveReductionTransformer
2020/05/09 21:29:38 [TRACE] Completed graph transform *terraform.TransitiveReductionTransformer with new graph:
  local.database_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.newbits - *terraform.NodeLocal
    local.database_newbits - *terraform.NodeLocal
    local.private_newbits - *terraform.NodeLocal
    local.pub_newbits - *terraform.NodeLocal
  local.private_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.pub_newbits - *terraform.NodeLocal
    var.azs - *terraform.NodeRootVariable
  local.subnets - *terraform.NodeLocal
    local.newbits - *terraform.NodeLocal
    var.vpc_cidr - *terraform.NodeRootVariable
  meta.count-boundary (EachMode fixup) - *terraform.NodeCountBoundary
    local.subnets - *terraform.NodeLocal
  var.azs - *terraform.NodeRootVariable
  var.vpc_cidr - *terraform.NodeRootVariable
  ------
2020/05/09 21:29:38 [DEBUG] Starting graph walk: walkValidate
2020/05/09 21:29:38 [TRACE] dag/walk: updating g
raph
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "local.newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "local.subnets"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "local.private_newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "local.database_newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "var.azs"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "var.vpc_cidr"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "meta.count-boundary (EachMode fixup)"
2020/05/09 21:29:38 [TRACE] dag/walk: added new vertex: "local.pub_newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.newbits" waiting on "local.pub_newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "meta.count-boundary (EachMode fixup)" waiting on "local.subnets"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.newbits" waiting on "local.database_newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.subnets" waiting on "local.newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.newbits" waiting on "local.private_newbits"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.subnets" waiting on "var.vpc_cidr"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.private_newbits" waiting on "var.azs"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.database_newbits" waiting on "var.azs"
2020/05/09 21:29:38 [TRACE] dag/walk: added edge: "local.pub_newbits" waiting on "var.azs"
2020/05/09 21:29:38 [TRACE] dag/walk: dependencies changed for "local.database_newbits", sending new deps
2020/05/09 21:29:38 [TRACE] dag/walk: dependencies changed for "local.pub_newbits", sending new deps
2020/05/09 21:29:38 [TRACE] dag/walk: dependencies changed for "local.newbits", sending new deps
2020/05/09 21:29:38 [TRACE] dag/walk: dependencies changed for "meta.count-boundary (EachMode fixup)", sending new deps
2020/05/09 21:29:38 [TRACE] dag/walk: dependencies changed for "local.subnets", sending new deps
2020/05/09 21:29:38 [TRACETerraform 0.11 and earlier required type constraints to be given in quotes,
] dag/walk: dependencies changed for "local.private_newbits", sending new deps
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "var.azs"
2020/05/09 21:29:38 [TRACE] vertex "var.azs": starting visit (*terraform.NodeRootVariable)
2020/05/09 21:29:38 [TRACE] vertex "var.azs": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: var.azs
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalSequence
2020/05/09 21:29:38 [TRACE] [walkValidate] Exiting eval tree: var.azs
2020/05/09 21:29:38 [TRACE] vertex "var.azs": visit complete
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "local.database_newbits"
2020/05/09 21:29:38 [TRACE] vertex "local.database_newbits": starting visit (*terraform.NodeLocal)
2020/05/09 21:29:38 [TRACE] vertex "local.database_newbits": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: local.database_newbits
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalLocal
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "local.private_newbits"
2020/05/09 21:29:38 [TRACE] [walkValidate] Exiting eval tree: local.database_newbits
2020/05/09 21:29:38 [TRACE] vertex "local.database_newbits": visit complete
2020/05/09 21:29:38 [TRACE] vertex "local.private_newbits": starting visit (*terraform.NodeLocal)
2020/05/09 21:29:38 [TRACE] vertex "local.private_newbits": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: local.private_newbits
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalLocal
2020/05/09 21:29:38 [TRACE] [walkValidate] Exiting eval tree: local.private_newbits
2020/05/09 21:29:38 [TRACE] vertex "local.private_newbits": visit complete
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "var.vpc_cidr"
2020/05/09 21:29:38 [TRACE] vertex "var.vpc_cidr": starting visit (*terraform.NodeRootVariable)
2020/05/09 21:29:38 [TRACE] vertex "var.vpc_cidr": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: var.vpc_cidr
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalSequence
2020/05/09 21:29:38 [TRACE] [walkVbut that form is now deprecated and will be removed in a future version of
Terraform. To silence this warning, remove the quotes around "string".
alidate] Exiting eval tree: var.vpc_cidr
2020/05/09 21:29:38 [TRACE] vertex "var.vpc_cidr": visit complete
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "local.pub_newbits"
2020/05/09 21:29:38 [TRACE] vertex "local.pub_newbits": starting visit (*terraform.NodeLocal)
2020/05/09 21:29:38 [TRACE] vertex "local.pub_newbits": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: local.pub_newbits
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalLocal
2020/05/09 21:29:38 [TRACE] [walkValidate] Exiting eval tree: local.pub_newbits
2020/05/09 21:29:38 [TRACE] vertex "local.pub_newbits": visit complete
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "local.newbits"
2020/05/09 21:29:38 [TRACE] vertex "local.newbits": starting visit (*terraform.NodeLocal)
2020/05/09 21:29:38 [TRACE] vertex "local.newbits": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: local.newbits
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalLocal
2020/05/09 21:29:38 [TRACE] [walkValidate] Exiting eval tree: local.newbits
2020/05/09 21:29:38 [TRACE] vertex "local.newbits": visit complete
2020/05/09 21:29:38 [TRACE] dag/walk: visiting "local.subnets"
2020/05/09 21:29:38 [TRACE] vertex "local.subnets": starting visit (*terraform.NodeLocal)
2020/05/09 21:29:38 [TRACE] vertex "local.subnets": evaluating
2020/05/09 21:29:38 [TRACE] [walkValidate] Entering eval tree: local.subnets
2020/05/09 21:29:38 [TRACE] <root>: eval: *terraform.EvalLocal
2020/05/09 21:29:38 [ERROR] <root>: eval: *terraform.EvalLocal, err: Invalid expanding argument value: The expanding argument (indicated by ...) must be of a tuple, list, or set type.
2020/05/09 21:29:38 [TRACE] [walkValidate] Exiting eval tree: local.subnets
2020/05/09 21:29:38 [TRACE] vertex "local.subnets": visit complete
2020/05/09 21:29:38 [TRACE] dag/walk: upstream of "meta.count-boundary (EachMode fixup)" errored, so skipping


Error: Invalid expanding argument value

  on locals.tf line 19, in locals:
  19:   subnets = cidrsubnets(var.vpc_cidr, local.newbits...)

The expanding argument (indicated by ...) must be of a tuple, list, or set
type.

Crash Output

Expected Behavior

cidrsubnets should return a list of 9 subnets.

Actual Behavior

Calling terraform validate or terraform apply ends up with error message like this:

→ terraform validate

Error: Invalid expanding argument value

  on locals.tf line 19, in locals:
  19:   subnets = cidrsubnets(var.vpc_cidr, local.newbits...)

The expanding argument (indicated by ...) must be of a tuple, list, or set
type.

Steps to Reproduce

  1. terraform validate
  2. terraform apply also fails.

Additional Context

I'm converting a list of strings into a list of numbers. Then, I'm concatenating three lists of numbers, so that they make a bigger list of numbers. Then I'm passing the long list of numbers as numbits to cidrsubnets and expanding it, as cidrsubnets does not accept the list by itself.

If I don't expand it - i.e. i use:

subnets = cidrsubnets(var.vpc_cidr, local.newbits)

i get following error with terraform apply:

→ terraform apply

Error: Invalid function argument

  on locals.tf line 19, in locals:
  19:   subnets = cidrsubnets(var.vpc_cidr, local.newbits)
    |----------------
    | local.newbits is tuple with 9 elements

Invalid value for "newbits" parameter: number required.

So it sees it's a tuple, but then refuses to do the expansion.
Also, I fund this terraform module: https://github.com/hashicorp/terraform-cidr-subnets/blob/master/main.tf where it follows similar approach, but with variables instead of locals. I tried it, and then it passes validation correctly. Looks like terraform fails to infer type of a local value in some cases (expansion) but it can infer it in other cases (when I don'd attempt expansion it says it's a tuple).

References

@apparentlymart
Copy link
Member

Hi @mkielar! Sorry for this odd behavior, and thanks for the straightforward reproduction case.

I think you've hit the same underlying bug as #24699 here. I believe this is actually an interaction between two different bugs:

  • The HCL interpreter's handling of ... fails with this error when it's given an argument whose type is not decidable yet. The normal cause of that is when it's a resource output whose type will not be decided until the apply step, but that doesn't apply in your case and so that brings us to the other bug...
  • ...for some reason I've not yet determined, the concat function seems to be indicating that it cannot predict its result type, and thus triggering the above described behavior.

The first of the bugs above applies to both this one and #24699. The second one is unique to this particular issue, though fixing the first one would make the second one less important because it would change from being an error to just producing incomplete type information that could cause downstream validation to be skipped.

I think the fix over in HCL would be to add a new case to the switch statement that returns this error for if expandVal.Type() is cty.DynamicPseudoType, which is what it would return if the type isn't known yet. In that case, the function should immediately return cty.DynamicVal, diags and not attempt to execute the function yet. That will then allow the initial validation to succeed, so that later on the function call can be attempted again with full type information and produce the actual result.

@danieldreier danieldreier added bug confirmed a Terraform Core team member has reproduced this issue v0.12 Issues (primarily bugs) reported against v0.12 releases labels May 19, 2020
@apparentlymart
Copy link
Member

I think this is the same root cause as #22404, so I'm going to close this only to consolidate the discussion there. Thanks again!

@ghost
Copy link

ghost commented Jul 4, 2020

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.

If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@ghost ghost locked and limited conversation to collaborators Jul 4, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug confirmed a Terraform Core team member has reproduced this issue v0.12 Issues (primarily bugs) reported against v0.12 releases
Projects
None yet
Development

No branches or pull requests

3 participants