如何使用Terraform代码调用Ansible Playbook?

时间:2019-05-26 17:41:36

标签: ansible terraform provisioning

我有一本能正常工作的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脚本中调用该剧本并显示结果。

1 个答案:

答案 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代码捆绑在一起,而无需连接到其他实例。