【发布时间】:2019-10-12 10:22:58
【问题描述】:
我有一个运行良好的 ansible 剧本,现在我必须使用 terrform 脚本调用该剧本。目前我正在使用如下所示的代码,但在 terraform init 期间会导致错误:
Error: Unknown root level key: provisioner
我使用的是 Terraform v0.11.7,只有在运行此特定代码时才会出现错误。 我的 main.tf 也仅包含此代码。我使用的目录结构是这样的:
.
├── create-user.yml
├── library
│ └── mkpassword.py
├── main.tf
├── outputs.tf
├── roles
│ └── linux_user_creation
│ └── tasks
│ └── main.yml
└── variables.tf
main.tf 看起来像:
provisioner "remote-exec" {
inline = ["sudo dnf -y install python"]
connection {
type = "ssh"
user = "ubuntu"
private_key = "${file(var.ssh_keyname)}"
}
}
provisioner "remote-exec" {
command = ["ansible-playbook -u root --private-key ${var.ssh_keyname} -i ${self.ipv4_address} create-user.yml -e 'email_id=${var.email_id}'"]
}
我希望从 terraform 脚本中调用 playbook 并显示结果。
【问题讨论】:
-
provisioner 必须是另一个资源的一部分,例如
aws_instance资源,如果没有有意义的话,甚至是null_resource资源。如果您展示了完整的 Terraform 代码,将对回答者有所帮助,以便他们更全面地解释这应该如何工作。 -
你好 @ydaetskcoR 我已经更新了 main.tf 并且我没有添加任何资源,因为我正在使用其他 tf 创建资源。
-
您可能需要查看 Terraform 的 Ansible 供应器插件。 github.com/radekg/terraform-provisioner-ansible另外,我写了一篇关于使用它的文章,希望对你有所帮助medium.com/@robinflume/…
-
@rflume 非常感谢,但是您认为上面的代码看起来不错吗?不知道为什么,但一切都在运行
provisioner "remote-exec"模块,它返回错误为:Unknown root level key: provisioner -
如果这就是你的全部 Terraform 而你实际上并没有使用 Terraform 在某处创建资源你连接到什么,为什么你需要 Terraform 而不是直接运行 Ansible?
标签: ansible terraform provisioning