gpt4 book ai didi

Kubernetes terraform,使用 EOF 在 null_resource 中应用

转载 作者:行者123 更新时间:2023-12-02 11:35:36 25 4
gpt4 key购买 nike

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

我尝试使用 kubernetes apply EOF 模式使其工作,但尚未成功。

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

还希望我可以将 yaml 字符串提取到多行变量中,这样我就不必在空资源中重复它。

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
}
}

最佳答案

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

该代码在我这边有效:

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 语法突出显示和错误显示。使用其中之一

关于Kubernetes terraform,使用 EOF 在 null_resource 中应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com