如何在 terraform 代码中调用 ansible playbook?

Kan*_*kaM 5 provisioning ansible terraform

我有一个运行良好的 ansible 剧本,现在我必须使用 terrform 脚本调用该剧本。目前我正在使用如下所示的代码,但它会在 terraform init 期间导致错误:\nError: Unknown root level key: provisioner

\n\n

我正在使用 Terraform v0.11.7,并且仅当我运行此特定代码时才会发生错误。\n我的 main.tf 仅包含此代码。我使用的目录结构如下:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 create-user.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 library\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mkpassword.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 outputs.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 roles\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 linux_user_creation\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tasks\n\xe2\x94\x82           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 variables.tf\n
Run Code Online (Sandbox Code Playgroud)\n\n

main.tf 看起来像:

\n\n
  provisioner "remote-exec" {\n  inline = ["sudo dnf -y install python"]\n\n  connection {\n    type        = "ssh"\n    user        = "ubuntu"\n    private_key = "${file(var.ssh_keyname)}"\n  }\n}\n\nprovisioner "remote-exec" {\n  command = ["ansible-playbook -u root --private-key ${var.ssh_keyname} -i ${self.ipv4_address} create-user.yml -e \'email_id=${var.email_id}\'"]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望剧本应该从 terraform 脚本调用并应该显示结果。

\n

rfl*_*ume 5

代码片段形式main.tf不完整。您能否发布运行remote-exec配置程序的完整资源定义?

Ansible 剧本应该做什么?在远程主机本身上创建用户?或者它只是存储 Ansible 脚本的主机,而用户实际上是在另一个远程主机上创建的?

正如 @ydaetskcoR 提到的,您需要在以下目录中运行此代码null_resource

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}'"]
  }
}
Run Code Online (Sandbox Code Playgroud)

不过,我建议安装 Ansible 配置程序,正如上面的评论中已经提到的。这样,您就可以将 Ansible playbook 直接与 Terraform 代码捆绑在一起,而无需连接到其他实例。