如何在Terraform代码中调用Ansible Playbook



我有一本可奏效的剧本,现在我必须使用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代码捆绑在一起,而无需连接到其他实例。

最新更新