我需要在bash脚本中获取terraform文件中存储的值。
cat custom.tfvars Val1 = {a1 = "12", b2 = "0.5", "count" = 2} Val2 = {a1 = "14", b2 = "0.5", "count" = 1}
我想写一个脚本来获取Val1(count)的值。
Val1(count)
zmeyuzjn1#
sed -En '/^Val1/{s/(^.*)(count.*= )([[:digit:]]+)(.*$)/\3/p}' custom.tfvars
使用-E启用正则表达式解释,然后处理以“val 1”开头的行根据括号中的正则表达式将该行拆分为4个部分,并仅替换第3部分的行,打印结果
fjaof16o2#
虽然你可以使用普通的Unix文本处理工具来访问这个值(比如existing answer),你也会发现使用一个可以正确解析HCL的工具是很有用的。幸好Terraform附带了命令行命令terraform console,它将使你能够在初始化的工作空间中与Terraform配置和状态数据交互。给定一个名为custom.tfvars的文件,其中包含以下内容:
terraform console
custom.tfvars
Val1 = { a1 = "12", b2 = "0.5", "count" = 2 } Val2 = { a1 = "14", b2 = "0.5", "count" = 1 } val1_fmt = { a1 = "12" b2 = "0.5" count = 2 }
您还需要声明变量,这样您可能会得到如下所示的结果:
variable "Val1" {} variable "Val2" {} variable "val1_fmt" {}
然后,您可以使用terraform init初始化该目录,然后运行terraform console以交互方式(默认)或通过将控制台命令传输到terraform console来与配置交互,如下所示:
terraform init
echo "var.Val1.count" | terraform console -var-file custom.tfvars 2
请注意,如果您在terraform.tfvars或以.auto.tfvars结尾的文件中定义了变量,则将自动使用该变量,而无需传递-var-file标志。在这里使用terraform console还可以读取格式不同的等价结构:
terraform.tfvars
.auto.tfvars
-var-file
echo "var.val1_fmt.count" | terraform console -var-file custom.tfvars 2
vm0i2vca3#
另一种方法是使用HCLQ(用于查询和操作HashiCorp HCL的命令行工具),下面是一些示例
cat custom.tfvars | hclq get 'Val1.count'
也可以更新值
cat custom.tfvars | hclq set 'Val1.count' 5
3条答案
按热度按时间zmeyuzjn1#
使用-E启用正则表达式解释,然后处理以“val 1”开头的行根据括号中的正则表达式将该行拆分为4个部分,并仅替换第3部分的行,打印结果
fjaof16o2#
虽然你可以使用普通的Unix文本处理工具来访问这个值(比如existing answer),你也会发现使用一个可以正确解析HCL的工具是很有用的。幸好Terraform附带了命令行命令
terraform console
,它将使你能够在初始化的工作空间中与Terraform配置和状态数据交互。给定一个名为
custom.tfvars
的文件,其中包含以下内容:您还需要声明变量,这样您可能会得到如下所示的结果:
然后,您可以使用
terraform init
初始化该目录,然后运行terraform console
以交互方式(默认)或通过将控制台命令传输到terraform console
来与配置交互,如下所示:请注意,如果您在
terraform.tfvars
或以.auto.tfvars
结尾的文件中定义了变量,则将自动使用该变量,而无需传递-var-file
标志。在这里使用
terraform console
还可以读取格式不同的等价结构:vm0i2vca3#
另一种方法是使用HCLQ(用于查询和操作HashiCorp HCL的命令行工具),下面是一些示例
也可以更新值