我有一本能正常工作的Ansible剧本,现在我必须使用Terrform脚本来调用该剧本。目前,我正在使用如下所示的代码,但在terraform初始化期间会导致错误:
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脚本中调用该剧本并显示结果。
答案 0 :(得分:0)
代码摘录形式main.tf
尚不完整。您能否发布运行remote-exec
预配器的完整资源定义?
Ansible剧本应该怎么做?在远程主机本身上创建用户?还是仅仅是存储您的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剧本直接与Terraform代码捆绑在一起,而无需连接到其他实例。