我有一本可奏效的剧本,现在我必须使用Terronfor脚本来称呼该剧本。目前,我使用下面显示的代码,但在Terraform Init期间导致错误为: Error: Unknown root level key: provisioner
我正在使用Terraform V0.11.7,并且仅在运行此特定代码时发生错误。我的主体也仅由此代码组成。我使用的目录结构例如:
.
├── 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脚本中调用,并应显示结果。
代码切割表单main.tf
尚未完成。您可以发布运行remote-exec
供应商的完整资源定义吗?
Ansible Playbook应该做什么?在远程主机本身上创建用户?或者只是存储您的Ansible脚本的主机,并且用户实际上是在另一个远程主机上创建的?
如@ydaetskcor所述,您需要在null_resource
中运行此代码:
null_resource "provisioner" {
connection {
... # set the connection parameters here
}
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}'"]
}
}
但是,我建议安装Ansible Provisioner,如上面的评论中所述。这样,您将Ansible Playbook直接与Terraform代码捆绑在一起,而无需连接到其他实例。