【问题标题】:Kubernetes terraform, use EOF for apply inside null_resourceKubernetes terraform,使用 EOF 在 null_resource 中应用
【发布时间】:2019-02-19 11:49:47
【问题描述】:

Terraform Kubernetes 不允许使用 apiVersion: v1 以外的任何内容。但是我想通过使用null_resource 配置程序来运行kubectl apply -f ...kubectl delete -f ...(使用when = "destroy")来解决这个问题。

我已尝试使用 kubernetes 应用 EOF 模式使其工作,但还没有管理它。

这是我到达的地方,但似乎 | 是非法字符。

还希望我可以将 yaml 字符串拉出到一个多行变量中,这样我就不必在 null 资源中重复它了。

resource "null_resource" "res_name" {
  provisioner {
    command = <<EOF | kubectl apply -f -
      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: some-ingress-name
        annotations:  
          kubernetes.io/ingress.class: nginx
      spec:
        rules:
        - host: subdomain.example.com
          http:
            paths:
            - backend:
                serviceName: some-cluster-ip-service
                servicePort: 80
  }

  provisioner {
    when = "destroy"

    command = <<EOF | kubectl delete -f -
      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: some-ingress-name
        annotations:  
          kubernetes.io/ingress.class: nginx
      spec:
        rules:
        - host: subdomain.example.com
          http:
            paths:
            - backend:
                serviceName: some-cluster-ip-service
                servicePort: 80
  }
}

【问题讨论】:

标签: kubernetes terraform


【解决方案1】:

您的代码中存在一些错误。

该代码对我有用:

resource "null_resource" "res_name" {
  provisioner "local-exec" {
    command = "kubectl apply -f - <<EOF\n${var.ingress_yaml}\nEOF"
  }

  provisioner "local-exec" {
    when = "destroy"
    command = "kubectl delete -f - <<EOF\n${var.ingress_yaml}\nEOF"
  }
}

variable "ingress_yaml" {
  default = <<EOF
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: some-ingress-name
      annotations:
        kubernetes.io/ingress.class: nginx
    spec:
      rules:
      - host: subdomain.example.com
        http:
          paths:
          - backend:
              serviceName: some-cluster-ip-service
              servicePort: 80
    EOF
}

我建议改为从文件中读取 YAML 配置。然后你可以在你的 IDE 中获得 YAML 语法高亮和错误显示。 使用任一

【讨论】:

  • 感谢我没有考虑过template_file 资源的建议
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2020-12-24
  • 2018-06-19
  • 1970-01-01
  • 2019-10-20
相关资源
最近更新 更多