我试图通过Terrraform`s的.yaml创建/应用这个kubectl文件https://github.com/Azure/aad-pod-identity/blob/master/deploy/infra/deployment.yaml到AKS,以安装Azure AD标识。它需要部署Azure网关入口控制器。与VS代码一起使用Windows 10
main.tf:
data "template_file" "aad_pod" {
template = "${file("${path.module}/templates/aad_pod.yaml")}"
}
resource "null_resource" "aad_pod_deploy" {
triggers = {
manifest_sha1 = "${sha1("${data.template_file.aad_pod.rendered}")}"
}
provisioner "local-exec" {
command = "kubectl apply -f -<<EOF\n${data.template_file.aad_pod.rendered}\nEOF"
}
}在terraform应用之后,我有以下错误:
Error: Error running command 'kubectl apply -f -<<EOF
'cutted listing of yaml file'
EOF': exit status 1. Output: << was unexpected at this time.如有任何帮助,将不胜感激。
发布于 2020-07-06 19:41:21
由于类Unix操作系统与Windows之间的差异,除非用例非常简单,否则很少可能以可移植的方式使用local-exec。这是供给者是最后的手段的原因之一。
我认为最便携的答案是使用官方的Kubernetes供应商与库伯奈特进行交互。或者,如果使用kubectl的输入格式对您所做的工作特别重要,则可以使用提供程序。
resource "kubectl_manifest" "example" {
yaml_body = data.template_file.aad_pod.rendered
}如果您有充分的理由使用local-exec提供程序而不是本机Terraform提供程序,那么您需要找到一种方法来编写一个命令,该命令可以由Unix样式的shell和Windows的命令行约定以兼容的方式解释。我希望先将文件写入磁盘并将文件名传递给kubectl,这样会更容易实现这一点,因为这避免了使用shell的任何特殊特性的需要,并允许由kubectl本身处理所有内容:
resource "local_file" "aad_pod_deploy" {
filename = "${path.module}/aad_pod.yaml"
content = data.template_file.aad_pod.rendered
provisioner "local-exec" {
command = "kubectl apply -f ${self.filename}"
}
}这种方法仍有一些需要注意的注意事项。例如,如果您在包含空格的目录路径下运行Terraform,那么self.filename将包含空格,因此可能不会按您的需要由Unix或kubectl Windows可执行文件进行解析。
发布于 2020-07-07 12:54:41
谢谢你的评论。我找到了解决办法。我正在使用地形中的helm_release资源。只需用必要的模板创建您的舵图,并将其与helm_release一起使用。我为AAD的身份做了一个头盔图,这就是我的工作。
https://stackoverflow.com/questions/62715905
复制相似问题