In a Terraform template, an input variable can be used to set some configuration point for a resource, such as
variable "some_prefix" {
type = string
}
resource "google_service_account" "some-sa" {
account_id = "${var.some_prefix}-sa"
display_name = "Some Service Account"
}In some scenario the input variable can get its value from an environment variable in the shell where terraform runs. It looks like
export TF_VAR_some_prefix=my-test terraform plan
This is handy where there is just a few variables. If there are many input variables to be set from environment variables, I thought it’s cool to let sed have a go to reformat shell environment variables to Terraform .tfvars file which terraform can load automatically.
# tested with GNU sed 4.7 in Ubuntu 20.04 # given input # KEY1=value1 # KEY2="value with space" # ... # expected output in tfvars file # key1 = "value1" # key2 = "value with space" # ... env | sed -r 's|^(.+)="*([^"]+)"*$|\L\1\E = "\2"|g' | terraform fmt > terraform.tfvars # note: # this only considers double quotes # \L starts the transformation to lower case # \E stops that # the terraform fmt command is optional, just to make the .tfvars file linted with nice indentations
Reference:
– https://stackoverflow.com/questions/2777579/how-can-i-output-only-captured-groups-with-sed
🙂
