amazon-web-services - 在资源模板文件中迭代嵌套数据 for_each
问题描述
我会创建一个清单文件,其中可以是一个或多个端口。你能提示我如何迭代locals.k8_manifest
吗?
我尝试使用动态块,但看起来它没有在资源内部分叉,template_file
或者我的语法错误。
...
spec:
containers:
- name: 123
image: 123
ports:
- containerPort: 100
- containerPort: 200
- containerPort: 300
resources:
....
locals {
k8_manifest = {
"alertmanager" = {
name = "alertmanager"
namespace = "victoriametrics"
label_k8s-app = "alertmanager"
label_purpose = "victoriametrics"
description = "Prometheus alert manager for send"
replicas_number = 1
container_name = "alertmanager"
container_image_address = "11111111111.dkr.ecr.us-east-1.amazonaws.com/alertmanager:0.23.0"
restartPolicy = "Always"
terminationGracePeriodSeconds = "30"
dnsPolicy = "ClusterFirst"
schedulerName = "default-scheduler"
strategy_type_update = "RollingUpdate"
resources_cpu = "1"
resources_memory = "1Gi"
ports = {
containerport = "9093",
containerport = "9094",
containerport = "9096"
}
},
}
}
data "template_file" "k8_manifest" {
for_each = local.k8_manifest
template = file("${path.module}/manifests/manifests.tpl")
vars = {
name = try(each.value.name, null)
namespace = try(each.value.namespace, null)
label_k8s-app = try(each.value.label_k8s-app, null)
label_purpose = try(each.value.label_purpose, null)
description = try(each.value.description, null)
replicas_number = try(each.value.replicas_number, null)
container_name = try(each.value.container_name, null)
container_image_address = try(each.value.container_image_address, null)
restartPolicy = try(each.value.restartPolicy, null)
terminationGracePeriodSeconds = try(each.value.terminationGracePeriodSeconds, null)
dnsPolicy = try(each.value.dnsPolicy, null)
schedulerName = try(each.value.schedulerName, null)
strategy_type_update = try(each.value.strategy_type_update, null)
resources_cpu = try(each.value.resources_cpu, null)
resources_memory = try(each.value.resources_memory, null)
containerport = try(each.value.ports, null)
# dynamic "containerport" {
# content {
# containerport = each.value.ports
# }
# }
}
}
kind: Deployment
apiVersion: apps/v1
metadata:
name: ${name}
namespace: ${namespace}
labels:
k8s-app: ${label_k8s-app}
purpose: ${label_purpose}
annotations:
description: ${description}
spec:
replicas: ${replicas_number}
selector:
matchLabels:
k8s-app: ${label_k8s-app}
purpose: ${label_purpose}
template:
metadata:
name: ${name}
labels:
k8s-app: ${label_k8s-app}
purpose: ${label_purpose}
annotations:
description: ${description}
spec:
containers:
- name: ${name}
image: ${container_image_address}
ports:
{% for chapter in containerport ~}
- containerPort: ${containerport}
{% endfor ~}
resources:
requests:
cpu: ${resources_cpu}
memory: ${resources_memory}
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 300
解决方案
正如 Marko E 所说,它需要使用templatefile
templatefile("${path.module}/manifests/manifests.tpl
反而
file("${path.module}/manifests/manifests.tpl")
推荐阅读
- c# - Asp.Net MVC Web API 强制在 dateTime 上进行 UTC 转换
- angular - 通过 HTTPGET 将 Angular Observable 传递给 ASP MVC
- mysql - MySQL - 慢查询优化
- c - Cs50 的问题集 4 - Filter Less - Blur Function
- cypress - 针对不同状态的赛普拉斯 MOCK api 响应
- java - WildFly 18 NameNotFoundException: jboss -- 服务 jboss.naming.context.java.jboss.exported.jboss
- python - 无法对 OLS 模型进行预测
- c - CS50x Caesar - 插入 isalpha(argv[1]) 时出现分段错误
- node.js - 通过 axios 传递布尔值来表达路线,但不再像布尔值一样
- bash - AdonisJs 4.1:如何创建迁移数据库并启动服务器的启动脚本?