linux Bash-获取存储在terraform文件中的值

yeotifhr  于 2022-12-03  发布在  Linux
关注(0)|答案(3)|浏览(81)

我需要在bash脚本中获取terraform文件中存储的值。

cat custom.tfvars
Val1 = {a1 = "12", b2 = "0.5", "count" = 2}
Val2 = {a1 = "14", b2 = "0.5", "count" = 1}

我想写一个脚本来获取Val1(count)的值。

  • 谢谢-谢谢
zmeyuzjn

zmeyuzjn1#

sed -En '/^Val1/{s/(^.*)(count.*= )([[:digit:]]+)(.*$)/\3/p}' custom.tfvars

使用-E启用正则表达式解释,然后处理以“val 1”开头的行根据括号中的正则表达式将该行拆分为4个部分,并仅替换第3部分的行,打印结果

fjaof16o

fjaof16o2#

虽然你可以使用普通的Unix文本处理工具来访问这个值(比如existing answer),你也会发现使用一个可以正确解析HCL的工具是很有用的。幸好Terraform附带了命令行命令terraform console,它将使你能够在初始化的工作空间中与Terraform配置和状态数据交互。
给定一个名为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来与配置交互,如下所示:

echo "var.Val1.count" | terraform console -var-file custom.tfvars
2

请注意,如果您在terraform.tfvars或以.auto.tfvars结尾的文件中定义了变量,则将自动使用该变量,而无需传递-var-file标志。
在这里使用terraform console还可以读取格式不同的等价结构:

echo "var.val1_fmt.count" | terraform console -var-file custom.tfvars
2
vm0i2vca

vm0i2vca3#

另一种方法是使用HCLQ(用于查询和操作HashiCorp HCL的命令行工具),下面是一些示例

cat custom.tfvars | hclq get 'Val1.count'

也可以更新值

cat custom.tfvars | hclq set 'Val1.count' 5

相关问题