Filesystem and Workspace Info
Terraform makes several kinds of named values available. Each of these names is an expression that references the associated value. You can use them as standalone expressions, or combine them with other expressions to compute new values.
Types of Named Values
The main kinds of named values available in Terraform are:
- Resources
- Input variables
- Local values
- Child module outputs
- Data sources
- Filesystem and workspace info
- Block-local values
Filesystem and Workspace Info
The following values are available:
- path.module is the filesystem path of the module where the expression is placed. We do not recommend using path.module in write operations because it can produce different behavior depending on whether you use remote or local module sources. Multiple invocations of local modules use the same source directory, overwriting the data in path.module during each call. This can lead to race conditions and unexpected results.
- path.root is the filesystem path of the root module of the configuration.
- path.cwd is the filesystem path of the original working directory from where you ran Terraform before applying any -chdir argument. This path is an absolute path that includes details about the filesystem structure. It is also useful in some advanced cases where Terraform is run from a directory other than the root module directory. We recommend using path.root or path.module over path.cwd where possible.
- terraform.workspace is the name of the currently selected workspace.
Example of path.module
In this example, we are using the AWS provider to create an S3 bucket resource. The tags
block specifies some tags for the bucket, and the lifecycle
block prevents the bucket from being destroyed. The versioning
block enables versioning for the bucket.
We also use path.module
to reference a directory called files
within the same module. We use the fileset
function to get a list of all files in the files
directory, and then we create an S3 object for each file in the bucket using the dynamic
block. The source
parameter of the content
block is set to ${path.module}/files/${object.value}
, which resolves to the path of each file in the files
directory.
Note that this is just an example, and in practice, you may need to modify the configuration to fit your specific use case.
Example of path.root
In this example, we’re using path.root
to define the base_dir
local variable, which will contain the absolute path to the directory containing your Terraform files. We then use this variable to dynamically generate the name of an S3 bucket.
Note that we’re prefixing the bucket name with ${local.base_dir}
. This is just one example of how you can use the path.root
function in your Terraform code – you can use it to construct file paths, define resource names, and more.
Example of path.cwd
In this example, we’re using path.cwd
to define the current_dir
local variable, which will contain the absolute path to the current working directory. We then use this variable to dynamically generate the name of an S3 bucket.
Note that we’re prefixing the bucket name with ${local.current_dir}
. This is just one example of how you can use the path.cwd
function in your Terraform code – you can use it to construct file paths, define resource names, and more.
- Best AI tools for Software Engineers - November 4, 2024
- Installing Jupyter: Get up and running on your computer - November 2, 2024
- An Introduction of SymOps by SymOps.com - October 30, 2024