kubernetes 如何处理Terraform中不支持的属性

u4dcyp6a  于 2023-01-20  发布在  Kubernetes
关注(0)|答案(2)|浏览(127)

我有一个地形代码如下

locals {
    file_path = format("%s-%s", var.test1, var.test2)
    test_decode  =  yamldecode((data.github_repository_file.test.content))
   }
    data "github_repository_file" "test" {
     repository = "test-repo"
     branch     = "develop"
    file       = "${local.file_path}/local/test.yaml"
    }
  test_encode = ${yamlencode(local.test_decode.spec.names)}

当test.yaml文件中存在“.spec.names”属性时,此功能正常工作。由于我们根据local.file_path选择test.yaml,因此有时属性.spec.names可能不存在于test.yaml中,计划失败,并显示**“错误:不支持的属性”“。如何检查test.yaml中存在的“.spec.names**”属性?
更新问题以添加yaml示例

带名称属性的Yaml

apiVersion: helm.toolkit.gitops.io/v2beta1
kind: HelmRelease
metadata:
  name: "test"
  namespace: "test-system"
spec:
  chart:
    spec:
      chart: "test-environment"
      version: "0.1.10"
  names:
    key1: "value1"
    key2: "value2"
    key3: "value3"
    key4: "value4"

没有名称属性的YAML

apiVersion: helm.toolkit.gitops.io/v2beta1
kind: HelmRelease
metadata:
  name: "test"
  namespace: "test-system"
spec:
  chart:
    spec:
      chart: "test-environment"
      version: "0.1.10"
p1tboqfb

p1tboqfb1#

您可以使用try

test_encode = yamlencode(try(local.test_decode.spec.names, "some_default_value"))
xqk2d5yq

xqk2d5yq2#

我不知道是否存在更优雅的方法,但你可以像这样检查一个属性是否存在:

contains([for k, v in local.test_decode : k], "spec")

链接它来检查规范和名称是否像这样存在对我起作用,因为即使第一个条件失败,第二个条件仍然被求值:

contains([for k, v in local.test_decode : k], "spec") && contains([for k, v in local.test_decode.spec : k], "names")

这确实是一个技巧,但我不喜欢它,因为我认为它是相当黑客:

contains([for k, v in local.test_decode : k], "spec") ? contains([for k, v in local.test_decode.spec : k], "names") : false

相关问题