gpt4 book ai didi

来自本地人的 terraform 变量默认值插值

转载 作者:行者123 更新时间:2023-12-05 04:52:59 25 4
gpt4 key购买 nike

我有一个用例,我需要两个 AWS 提供商来提供不同的资源。默认的 aws 提供程序在主模块中配置,该模块使用另一个定义附加 aws 提供程序的模块。

默认情况下,我希望两个提供商都使用相同的 AWS 凭证,除非被明确覆盖。

我想我可以做这样的事情。在主模块中:

locals {
foo_cloud_access_key = aws.access_key
foo_cloud_secret_key = aws.secret_key
}

variable "foo_cloud_access_key" {
type = string
default = local.foo_cloud_access_key
}

variable "foo_cloud_secret_key" {
type = string
default = local.foo_cloud_secret_key
}

然后,variables foo_cloud_secret_keyfoo_cloud_access_key 将像这样传递给子模块:

module foobar {
...
foobar_access_key = var.foo_cloud_access_key
foobar_secret_key = var.foo_cloud_secret_key
...
}

然后 module foobar 将配置其附加项的地方提供了这些变量:

provider "aws" {
alias = "foobar_aws"
access_key = var.foobar_access_key
secret_key = var.foobar_secret_key
}

当我运行 init terraform 时出现这个错误(对于两个变量):

Error: Variables not allowed
on variables.tf line 66, in variable "foo_cloud_access_key":
66: default = local.foo_cloud_access_key

Variables may not be used here.

是否有可能在 terraform 中实现类似的东西,或者是否有任何其他方法可以做到这一点?

最佳答案

拥有复杂的计算变量默认值是可能的,但只有一种解决方法:

  • 为变量定义一个虚拟默认值,例如
  • 定义一个局部变量,它的值要么是变量的值,要么是实际的默认值
variable "something" {
default = null
}

locals {
some_computation = ... # based on whatever data you want
something = var.something == null ? local.some_computation : var.something
}

然后在其余的 terraform 文件中只使用 local.something 而不是 var.something

关于来自本地人的 terraform 变量默认值插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66284854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com