如何在地形代码中调用ansible playbook?
How to call ansible playbook in terraform code?
我有一个运行良好的 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}'"]
}
我希望 playbook 应该从 terraform 脚本调用并显示结果。
代码片段 main.tf
不完整。您能否 post 运行 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 代码捆绑在一起,并且不需要连接到其他实例。
我有一个运行良好的 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}'"]
}
我希望 playbook 应该从 terraform 脚本调用并显示结果。
代码片段 main.tf
不完整。您能否 post 运行 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 代码捆绑在一起,并且不需要连接到其他实例。