[英]Creating a dynamic secret variable block within Terraform for Cloud Run
我正在嘗試根據字符串列表動態創建以下塊
env {
name = "SECRET_ENV_VAR"
value_from {
secret_key_ref {
name = google_secret_manager_secret.secret.secret_id
key = "1"
}
}
}
基於文檔: https ://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_service#example-usage---cloud-run-service-secret-environment-variables
我想動態添加 Secrets,並定義了以下動態塊:
dynamic "env" {
for_each = toset(var.secrets)
content {
name = each.value
value_from {
secret_key_ref {
name = each.value
key = "1"
}
}
}
}
其中secrets
是 list(string) 類型的變量
但是,這會引發錯誤: Blocks of type "value_from" are not expected here.
我不確定我遺漏了什么,或者我在哪里錯誤地指定了 value_from 塊。
有人能指出我正確的方向來解決這個問題嗎?
更新; 根據這篇文章評論中的建議,我還嘗試將此變量實現為地圖。 ( https://www.terraform.io/docs/language/expressions/dynamic-blocks.html#multi-level-nested-block-structures )
dynamic "env" {
for_each = var.secrets
content {
name = each.key
dynamic "value_from" {
for_each = env.value.name
secret_key_ref {
name = value_from.value.name
key = value_from.value.version
}
}
}
}
但是,這也會給出相同的錯誤。 Blocks of type "value_from" are not expected here.
在此示例中,secrets 變量被定義為具有以下值的列表(任意):
secrets = [
{
name = "SECRET"
version = "1"
}
]
你必須升級你的 gcp provider 。 在v3.67.0中添加了對google_cloud_run_service
中的機密的支持。 當前版本是v4.1.0
,這意味着您必須使用非常舊的 gcp 提供程序。
最后,我通過將變量類型更改為 map(any) 解決了這個問題:
secrets = {
"SECRET" = "1"
}
這允許我創建“動態”環境塊,而無需實現嵌套的動態塊。
我正在嘗試做類似的事情,但仍然出現錯誤。
這是我的 main.tf
dynamic "env" {
for_each = var.basic-secrets
content {
name = each.key
dynamic "value_from" {
for_each = env.value.name
secret_key_ref {
name = value_from.value.name
key = value_from.value.version
}
}
}
}
變量.tf
basic-secrets = {
"AUTH0_SECRET" = "latest"}
變量類型
variable "basic-secrets" {
type = map(any)}
錯誤是:不支持的塊類型。 │ 此處不應包含“secret_key_ref”類型的塊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.