如何将 github 上的 CRD 应用到 terraform 集群?

red*_*888 8 terraform terraform-provider-kubernetes

我想用 terraform 安装 CRD,我希望这样做会很简单:

data "http" "crd" {
  url = "https://raw.githubusercontent.com/kubernetes-sigs/application/master/deploy/kube-app-manager-aio.yaml"
  request_headers = {
    Accept = "text/plain"
  }
}

resource "kubernetes_manifest" "install-crd" {
  manifest = data.http.crd.body
}
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

can't unmarshal tftypes.String into *map[string]tftypes.Value, expected
map[string]tftypes.Value
Run Code Online (Sandbox Code Playgroud)

尝试将其转换为 yamlyamldecode也不起作用,因为yamldecode不支持多文档 yaml 文件。

kubernetes_manifest我可以使用 exec,但在等待资源释放时我已经这样做了。只kubernetes_manifest支持单个资源还是可以用于从原始文本清单文件创建多个资源?

luk*_*302 5

kubernetes_manifest(强调我的)

通过提供清单属性来表示一个Kubernetes 资源

在我看来,它不支持多个资源/多文档 yaml 文件。

但是,您可以手动拆分传入文档及其yamldecode各个部分:

locals {
  yamls = [for data in split("---", data.http.crd.body): yamldecode(data)]
}

resource "kubernetes_manifest" "install-crd" {
  count = length(local.yamls)
  manifest = local.yamls[count.index]
}
Run Code Online (Sandbox Code Playgroud)

不幸的是在我的机器上这然后抱怨

清单配置中不允许使用“status”属性键

正好是 11 个清单中的一个。

由于我对 Kubernetes 毫无了解,我不知道这意味着什么,也不知道它是否需要修复。

或者,您始终可以使用null_resource带有脚本的脚本来获取 yaml 文档并使用 bash 工具或 python 或安装的任何工具来转换、拆分和过滤传入的 yaml。