Terraform 配置文件中是否有一些特殊变量可以指向当前文件名?
我想将它用于各种资源中的描述字段,以便在系统中看到这些资源的人知道它们的主定义在哪里。
例如
在myinfra.tf
resource "aws_iam_policy" "my_policy" {
name = "something-important"
description = "Managed by Terraform at ${HERE_I_WOULD_LIKE_TO_USE_THE_VARIABLE}"
policy = <<EOF
[...]
EOF
}
Run Code Online (Sandbox Code Playgroud)
我希望描述变成:
description = "Managed by Terraform at myinfra.tf"
Run Code Online (Sandbox Code Playgroud)
我尝试过${path.module},但这只给出了“放置表达式的模块的文件系统路径”,所以务实地说 - 除了我想要的文件名之外的所有内容。
这是我可以分享的。使用数据外部资源调用外部脚本,该脚本将获取目录/文件名,然后将其作为字符串或资源所需的任何其他类型返回。显然,这并不完全是您想要的,因为您将间接获得目录/文件名,但希望它对其他人甚至您自己的用例有所帮助。
我们仅将其用于 azurerm 以及当前提供程序版本尚不支持的非常复杂的集成。我还没有专门针对 AWS 测试它,但由于它是核心 Terraform 资源提供程序,我猜测它可能可以全面工作。
data "external" "cwd" {
program = ["./script.sh"]
query = {
cwd = "${path.cwd}"
}
}
Run Code Online (Sandbox Code Playgroud)
resource "aws_iam_policy" "my_policy" {
name = "something-important"
description = "Managed by Terraform at ${data.external.dir_script.result.filename}"
policy = <<EOF
[...]
EOF
Run Code Online (Sandbox Code Playgroud)
这就是我的脚本的样子:
data "external" "cwd" {
program = ["./script.sh"]
query = {
cwd = "${path.cwd}"
}
}
Run Code Online (Sandbox Code Playgroud)
您需要确保脚本中的数据需要返回有效的 JSON 对象。
然后,程序必须在 stdout 上生成一个有效的 JSON 对象,该对象将用于填充导出到 Terraform 配置其余部分的结果属性。该 JSON 对象必须再次将其所有值作为字符串。成功完成后,它必须以状态零退出。
不幸的是,就像其他人提到的那样,没有其他方法可以“应用”当前文件名。
| 归档时间: |
|
| 查看次数: |
3690 次 |
| 最近记录: |