tfvar is a Terraform's variable definitions template generator.
For Terraform configuration that has input variables declared, e.g.,
variable "image_id" {
type = string
}
variable "availability_zone_names" {
type = list(string)
default = ["us-west-1a"]
}
variable "docker_ports" {
type = list(object({
internal = number
external = number
protocol = string
}))
default = [
{
internal = 8300
external = 8300
protocol = "tcp"
}
]
}
-
tfvar will search for all input variables and generate template that helps user populates those variables easily:
$ tfvar . availability_zone_names = ["us-west-1a"] docker_ports = [{ external = 8300, internal = 8300, protocol = "tcp" }] image_id = null
-
Note that default values are assigned to the definitions by default as shown above. Use the
--ignore-default
options to ignore the default values.$ tfvar . --ignore-default availability_zone_names = null docker_ports = null image_id = null
-
tfvar also provides other output formats:
-
In environment variable formats with
-e
flag:$ tfvar . -e export TF_VAR_availability_zone_names='["us-west-1a"]' export TF_VAR_docker_ports='[{ external = 8300, internal = 8300, protocol = "tcp" }]' export TF_VAR_image_id=''
-
The
-r, --resource
flag outputs all variables astfe_variable
resource of Terraform Enterprise (tfe) provider. -
The
-w, --workspace
flag outputs all variables in the payload format for the Workspace Variables API https://www.terraform.io/docs/cloud/api/workspace-variables.html#sample-payload which can used together withjq
to filter variables by key name.$ tfvar -w . | jq '. | select(.data.attributes.key == "region")' { "data": { "type": "vars", "attributes": { "key": "region", "value": "", "description": "", "category": "terraform", "hcl": false, "sensitive": false } } }
-
-
There is also
--auto-assign
option for those who wants the values fromterraform.tfvars[.json]
,*.auto.tfvars[.json]
, and environment variables (TF_VAR_
followed by the name of a declared variable) to be assigned to the generated definitions automatically.$ export TF_VAR_availability_zone_names='["custom_zone"]' $ tfvar . --auto-assign availability_zone_names = ["custom_zone"] docker_ports = [{ external = 8300, internal = 8300, protocol = "tcp" }] image_id = null
-
Like the
terraform (plan|apply)
CLI tool, individual vairables can also be specified via--var
option.$ tfvar . --var=availability_zone_names='["custom_zone"]' --var=image_id=abc123 availability_zone_names = ["custom_zone"] docker_ports = [{ external = 8300, internal = 8300, protocol = "tcp" }] image_id = "abc123"
-
Variables in file can also be specified via
--var-file
option.$ cat my.tfvars image_id = "xyz" $ tfvar . --var-file my.tfvars availability_zone_names = ["us-west-1a"] docker_ports = [{ external = 8300, internal = 8300, protocol = "tcp" }] image_id = "xyz"
-
Multiple files can be specified via providing more
--var-file
options, variables overrides as forterraform
command.$ cat my.tfvars image_id = "xyz" $ cat other.tfvars image_id = "abc" $ tfvar . --var-file my.tfvars --var-file other.tfvars image_id = "abc"
For more info, checkout the --help
page:
$ tfvar --help
Generate variable definitions template for Terraform module as
one would write it in variable definitions files (.tfvars).
Usage:
tfvar [DIR] [flags]
Flags:
-a, --auto-assign Use values from environment variables TF_VAR_* and
variable definitions files e.g. terraform.tfvars[.json] *.auto.tfvars[.json]
-d, --debug Print debug log on stderr
-e, --env-var Print output in export TF_VAR_image_id=ami-abc123 format
-h, --help help for tfvar
--ignore-default Do not use defined default values
-r, --resource Print output in Terraform Enterprise (tfe) provider's tfe_variable resource format
--var stringArray Set a variable in the generated definitions.
This flag can be set multiple times.
--var-file stringArray Set variables from a file.
This flag can be set multiple times.
-v, --version version for tfvar
-w, --workspace Print output variables as payloads for Workspace Variables API
brew install shihanng/tfvar/tfvar
curl -sLO https://github.com/shihanng/tfvar/releases/latest/download/tfvar_linux_amd64.deb
dpkg -i tfvar_linux_amd64.deb
rpm -ivh https://github.com/shihanng/tfvar/releases/latest/download/tfvar_linux_amd64.rpm
The release page contains binaries built for various platforms. Download the version matches your environment (e.g. linux_amd64
) and place the binary in the executable $PATH
e.g. /usr/local/bin
:
curl -sL https://github.com/shihanng/tfvar/releases/latest/download/tfvar_linux_amd64.tar.gz | \
tar xz -C /usr/local/bin/ tfvar
With Go already installed in your system, use go get
go get github.com/shihanng/tfvar
or clone this repo and make install
git clone https://github.com/shihanng/tfvar.git
cd tfvar
make install
Want to add missing feature? Found bug 🐛? Pull requests and issues are welcome. For major changes, please open an issue first to discuss what you would like to change ❤️.
make lint
make test
should help with the idiomatic Go styles and unit-tests.