You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Terraform configuration language has the fileexists() function which returns successfully if a file exists at a given path, however it does not currently handle directories. Even if it was adjusted to support directories (or created as a separate function), as with most configuration language functions, the result is evaluated before the rest of the graph. This can cause issues for practitioners wishing to check/manage directories generated/updated during the graph for purposes of clearer error messaging or other operations which might need a listing of all files within a directory.
While today we generally rely on the function documentation to warn practitioners about this potential issue, it may make sense to provide a graph-aware solution for the use case.
Proposal
Create a new local_directory data source which attempts to read a local filesystem directory. It should error if the directory does not exist otherwise return a set of file paths, for potential usage elsewhere in a Terraform configuration.
As a design sketch of potential usage:
# Ensure example directory exists, potentially due to# another graph node with side effects creating the directory# or as a precondition for other graph nodesdata"local_directory""example" {
path="${path.module}/example"
}
# Another way to check directory exists and has files, using new check block functionality to only raise warningcheck {
data"local_directory""node_modules" {
path="${path.module}/node_modules"
}
assert {
condition=length(data.local_directory.node_modules.file_paths) >0error_message="${data.local_directory.node_modules.path} does not contain any files"
}
}
Proposed data source configurable attributes:
path - String, required, the path to the directory
Proposed data source computed attributes:
file_paths - Set of strings, the paths to all files within directory
Terraform CLI and Provider Versions
N/A
Use Cases or Problem Statement
The Terraform configuration language has the fileexists() function which returns successfully if a file exists at a given path, however it does not currently handle directories. Even if it was adjusted to support directories (or created as a separate function), as with most configuration language functions, the result is evaluated before the rest of the graph. This can cause issues for practitioners wishing to check/manage directories generated/updated during the graph for purposes of clearer error messaging or other operations which might need a listing of all files within a directory.
While today we generally rely on the function documentation to warn practitioners about this potential issue, it may make sense to provide a graph-aware solution for the use case.
Proposal
Create a new
local_directory
data source which attempts to read a local filesystem directory. It should error if the directory does not exist otherwise return a set of file paths, for potential usage elsewhere in a Terraform configuration.As a design sketch of potential usage:
Proposed data source configurable attributes:
path
- String, required, the path to the directoryProposed data source computed attributes:
file_paths
- Set of strings, the paths to all files within directoryHow much impact is this issue causing?
Medium
Additional Information
fileexists()
function proposal to handle directories (or preferably createdirexists()
function): fileexists should not return an error when subject is a directory (should always return boolean) terraform#25316local_directories
data source proposal: Consider local_directories Data Source #215Code of Conduct
The text was updated successfully, but these errors were encountered: