Terraform 地形-如何修改地图关键点?
在Terraform 0.12.xx中,是否可以修改地图中的关键点而不是其各自的值?假设模块定义中包含以下内容:Terraform 地形-如何修改地图关键点?,terraform,interpolation,amazon-ecs,Terraform,Interpolation,Amazon Ecs,在Terraform 0.12.xx中,是否可以修改地图中的关键点而不是其各自的值?假设模块定义中包含以下内容: locals { task_logging = [ for k, v in var.task_logging_options : { name = trimprefix(k,"TASK_LOGGING_") value = v } ] } 但是,trimprefix此处仅适用于值 下面我正在为ECS服务创建一个
locals {
task_logging = [
for k, v in var.task_logging_options : {
name = trimprefix(k,"TASK_LOGGING_")
value = v
}
]
}
但是,trimprefix
此处仅适用于值
下面我正在为ECS服务创建一个任务定义:
{...}
"logConfiguration": {
"logDriver": "awsfirelens",
"secretOptions": [],
"options": ${jsonencode(local.task_logging_options)}
},
{...}
最后,在模块实例化中,我将传递task\u logging\u options
,如下所示:
task_logging_options = {
TASK_LOGGING_Name = "es"
TASK_LOGGING_Host = "some.host"
}
其中本地函数应该去掉前缀TASK\u LOGGING\u
,为Fluentbit配置构建JSON对象
最终结果应该是一个对象,类似于terraform plan中的代码片段:
~ logConfiguration = {
logDriver = "awsfirelens"
~ options = {
- Buffer_Size = "False" -> null
- HTTP_Passwd = "READACTED" -> null
- HTTP_User = "READACTED" -> null
- Host = "READACTEDd" -> null
- Index = "READACTED" -> null
- Name = "es" -> null
- Port = "READACTED" -> null
+ TASK_LOGGING_Host = "some.host"
+ TASK_LOGGING_Name = "es"
- Tls = "On" -> null
- Trace_Output = "On" -> null
}
secretOptions = []
}
不完全理解您想要实现什么,但您也可以使用
trimprefix(k,“任务日志记录”)
作为键
例如:
locals {
task_logging2 = [
for k, v in var.task_logging_options : {
trimprefix(k,"TASK_LOGGING_") = v
}
]
}
将导致本地。任务记录2
为:
[
{
"Host" = "some.host"
},
{
"Name" = "es"
},
]
{
"Host" = "some.host"
"Name" = "es"
}
更新
如果需要对象,可以使用以下选项:
locals {
task_logging2 = {
for k, v in var.task_logging_options :
trimprefix(k,"TASK_LOGGING_") => v
}
}
这导致本地。任务记录2
为:
[
{
"Host" = "some.host"
},
{
"Name" = "es"
},
]
{
"Host" = "some.host"
"Name" = "es"
}
不完全理解您想要实现什么,但您也可以使用
trimprefix(k,“任务日志记录”)
作为键
例如:
locals {
task_logging2 = [
for k, v in var.task_logging_options : {
trimprefix(k,"TASK_LOGGING_") = v
}
]
}
将导致本地。任务记录2
为:
[
{
"Host" = "some.host"
},
{
"Name" = "es"
},
]
{
"Host" = "some.host"
"Name" = "es"
}
更新
如果需要对象,可以使用以下选项:
locals {
task_logging2 = {
for k, v in var.task_logging_options :
trimprefix(k,"TASK_LOGGING_") => v
}
}
这导致本地。任务记录2
为:
[
{
"Host" = "some.host"
},
{
"Name" = "es"
},
]
{
"Host" = "some.host"
"Name" = "es"
}
我试过了。也许我忘了提到,结果应该是一个对象。我将编辑我的问题。@AlanKis我更新了答案,现在给出了对象。我已经尝试过了。也许我忘了提到,结果应该是一个对象。我将编辑我的问题。@AlanKis我更新了答案,现在给出了对象。