den*_*ski 2 kubernetes terraform
Terraform Kubernetes 不允许使用除apiVersion: v1. 但是我想通过使用null_resource配置器运行kubectl apply -f ...和kubectl delete -f ...(使用when = "destroy")来解决这个问题。
我已经尝试使用 kubernetes apply 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
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码中存在一些错误。
EOF的<<EOF(“这里-doc的”语法)|) 命令启动。在local-exec供应方运行在本地shell命令。因此,请使用<<EOFGithub 问题评论中的标准输入技巧。谢谢你的提示。也不知道这个。该代码适用于我:
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
}
Run Code Online (Sandbox Code Playgroud)
我建议改为从文件中读取 YAML 配置。然后,您可以获得 YAML 语法突出显示和 IDE 中显示的错误。使用任一
data "local_file" 或者 data "template_file", 当您想更改文件中的某些内容时。| 归档时间: |
|
| 查看次数: |
3418 次 |
| 最近记录: |