kubernetes - 将复杂的 YAML 转换为 .tf
问题描述
我有以下相对复杂的 YAML:
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: ${aws_iam_role.tf-eks-node.arn}
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
我现在想把它翻译成一个 Terraform-Kubernetes 兼容的资源,它完全由 String、Lists 和 Maps 组成。我该怎么做呢?我在这里找到了一个使用连字符表示列表的 LimitRange 的示例:
resource "kubernetes_limit_range" "example" {
metadata {
name = "terraform-example"
}
spec {
limit {
type = "Pod"
max {
cpu = "200m"
memory = "1024M"
}
}
limit {
type = "PersistentVolumeClaim"
min {
storage = "24M"
}
}
limit {
type = "Container"
default {
cpu = "50m"
memory = "24M"
}
}
}
}
我目前对 mapRoles 块的尝试如下:
mapRole { rolearn = "${aws_iam_role.tf-eks-node.arn}"
username = "system:node:{{EC2PrivateDNSName}}"
groups = ["system:bootstrappers","system:nodes"]}
这是不正确的,因为 mapRoles 是一个列表(因为它的单数元素是一个列表元素,如连字符所示);但是如果它是一个列表,并且连字符之后的所有内容都是列表元素,那么列表标题是什么?
使用答案中提到的想法,我尝试将元数据块预先放入数据块中:
data "template_file" "map_roles" {
template = <<EOF
- rolearn: ${var.arn}
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
EOF
vars {
arn = "${var.kube-arn}"
}
}
resource "kubernetes_config_map" "aws_auth" {
metadata {
name = "aws-auth"
namespace = "kube-system"
}
data {
mapRoles = "${data.template_file.map_roles.template}"
}
}
解决方案
所以当你在 YAML 中有这个时:
data:
mapRoles: |
这意味着之后的所有内容|
都是一个字符串,它是 的值mapRoles
。我不确定那是你想要的。如果你想要列表列表,你会想要这样的东西:
data:
mapRoles:
- rolearn: ${aws_iam_role.tf-eks-node.arn}
- username: system:node:{{EC2PrivateDNSName}}
- groups:
- system:bootstrappers
- system:nodes
这将转化为 HCL:
"data" = {
"mapRoles" = {
"rolearn" = "${aws_iam_role.tf-eks-node.arn}"
}
"mapRoles" = {
"username" = "system:node:{{EC2PrivateDNSName}}"
}
"mapRoles" = {
"groups" = ["system:bootstrappers", "system:nodes"]
}
}
推荐阅读
- plugins - Jmeter Perfmon 插件未显示任何图形详细信息
- ssis - 在 SSIS Oracle 连接字符串中存储敏感密码
- python - MatPlotLib Pcolormesh 没有正确覆盖
- sed - 删除 text1 和(text2 或行尾)之间的所有字符
- python - Pandas - 创建新列并根据过滤器分配值
- apache-kafka - 即使设置 acks=all,Kafka 生产者也会丢失消息
- mysql - Acces denied on rails test database
- python - 从数据框中删除行,其值在整列中仅出现一次
- python - 如何在两个单独的数据框中保持相同的 uuid?
- java - 如何将 Java 对象传递给另一个类以使用 Camunda 在执行方法中执行