Skip to content

The require-executable module forces an external program lookup on the terraform running environment even not used #62

Open
@kewei5zhang

Description

@kewei5zhang

We are trying to use Terraform Cloud to plan and apply the eks-cluster-control-plane module and require-executable is a hard downstream dependency. It always fails because TFC runner has no python installed and there is no way we can disable terraform from checking the python executable even we are not using the required-executable functions.

Understand that we could just use the tf resources directly if not leveraging those basic validations gruntwork provided out of the box, but It is always good to provide options for users to work around without affecting the default behavior, especially for the use cases where people are migrating from self-hosted runners to terraform cloud.

Error Log:

with module.eks_cluster.module.require_kubergrunt.data.external.required_executable
on .terraform/modules/eks_cluster.require_kubergrunt/modules/require-executable/main.tf line 9, in data "external" "required_executable":
  program = ["python", "${path.module}/require_executable.py"]
The data source received an unexpected error while attempting to find the program.
Platform: linux
Program: python
Error: exec: "python": executable file not found in $PATH

Proposed Solution:
Using count to mute terraform plan if length(required_executable) == 0. (inspired by the executable-dependency module)

data "external" "required_executable" {
  count = length(var.required_executables) > 0 ? 1 : 0
  program = ["python3", "${path.module}/require_executable.py"]

  # Currently the external data source provider does not support list values in the query, so we convert the input list
  # to be a comma separated string.
  # See https://github.com/terraform-providers/terraform-provider-external/issues/2
  query = {
    required_executables = join(",", var.required_executables)
    error_message        = var.error_message
  }
}

Let me know what do you guys think, happy to contribute PRs.

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