【问题标题】:How can I source Terraform HCL variables in bash?如何在 bash 中获取 Terraform HCL 变量?
【发布时间】:2022-12-15 17:50:05
【问题描述】:

我将 Terraform 变量定义为

variable "location" {
  type        = string
  default     = "eastus"
  description = "Desired Azure Region"
}

variable "resource_group" {
  type        = string
  default     = "my-rg"
  description = "Desired Azure Resource Group Name"
}

并可能/部分覆盖在 terraform.tfvars 文件中

location                 = "westeurope"

然后将变量定义为输出,例如文件outputs.tf:

output "resource_group" {
  value = var.resource_group
}

output "location" {
  value = var.location
}

如何在 bash 脚本中“获取”有效变量值以使用这些值?

【问题讨论】:

  • 您可能会考虑使用 JSON 而不是 HCL 来编写您的配置。它们会更冗长,但有更多工具可以操作 JSON。

标签: bash terraform


【解决方案1】:

一种方法是使用 Terraform 输出值作为 JSON,然后使用 jq 之类的实用程序来转换和获取变量:

source <(terraform output --json | jq -r 'keys[] as $k | "($k)=(.[$k] | .value)"')

请注意,输出仅在执行terraform plan、terraform apply甚至terraform refresh后可用

如果jq不可用或不需要,sed可用于将 Terraform HCL 输出转换为变量,即使是大写变量名称:

source <(terraform output | sed -r 's/^([a-z_]+)s+=s+(.*)$/U=L/')

或者如果 Terraform 模板/模块在另一个文件夹中,则使用 -chdir 参数:

source <(terraform -chdir=$TARGET_INFRA_FOLDER output | sed -r 's/^([a-z_]+)s+=s+(.*)$/U=L/')

然后这些变量可用于狂欢脚本:

LOCATION="westeurope"
RESOURCE_GROUP="my-rg"

并且可以作为$LOCATION和$RESOURCE_GROUP来解决。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2021-11-25
    • 2021-02-06
    • 1970-01-01
    • 2013-02-07
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多