Skip to content

The terraform_required_providers rule fails to detect provider usage in modules and providers using for_each #305

@simao-silva

Description

@simao-silva

TFLint Version

tflint v0.59.1

Terraform Version

OpenTofu v1.10.6

Description

The terraform_required_providers rule does not recognize provider dependencies under the following conditions:

  • Providers are declared with for_each and alias
  • Modules use for_each and pass providers via the providers block with dynamic references like kubernetes.kubernetes[each.key]

As a result, TFLint reports missing required_providers entries even though the providers are correctly used:

Failed to check ruleset; failed to check "terraform_required_providers" rule: main.tf:30,18-49: Invalid expression; A single static variable reference is required: only attribute access and indexing with constant keys. No calculations, function calls, template expressions, etc are allowed here., and 1 other diagnostic(s)

Example

provider "kubernetes" {
  for_each               = var.clusters
  alias                  = "kubernetes"
  host                   = "https://${module.kubernetes[each.key].cluster_endpoint}"
  cluster_ca_certificate = sensitive(base64decode(module.kubernetes[each.key].cluster_ca_certificate))
  token                  = sensitive(module.kubernetes[each.key].cluster_access_token)
}

module "service_account" {
  for_each = module.kubernetes
  providers = {
    kubernetes = kubernetes.kubernetes[each.key]
  }
(...)

Expected Behavior

TFLint should detect that the kubernetes provider is used in the module via the providers mapping and not require an explicit required_providers block if the provider is already declared in the root configuration with for_each.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions