如何将 Terraform 和 Ansible 连接在一起?

How to connect Terraform and Ansible together?

我编写了一个 Terraform 脚本来启动 Azure 上的基础设施。我还编写了一个 Ansible 脚本来为在 Azure 上启动的 VM 打上最新更新的补丁。但是,当我无法在虚拟机启动后自动执行修补过程时。

您可以使用 Terraform 中的 Provisioner 在已配置的 VM 上执行 Ansible Playbook。我不确定您的 terraform 版本。但下面的代码可能会有所帮助。请记住,Provisioner 是最后的手段

  provisioner "local-exec" {
    command = "ansible-playbook -u user -i '${self.public_ip},' --private-key ${var.ssh_key_private} provision.yml" 
  }

https://www.terraform.io/docs/language/resources/provisioners/syntax.html

要实现端到端自动化,其中 Ansible 在启动实例时 运行(每次重启时 and/or),您可以传入 cloud-init configuration from Terraform. This is nice because that config may be referencing other parts of your infrastructure which can be sorted out by Terraform's dependency resolution. You would do this by providing Terraform cloudinit_config to the custom_data 参数Terraform 中的 Azure VM。

在 Ansible 方面,您还可以使用 Azure dynamic inventory。使用此动态清单,您可以将标签添加到 Terraform 中的资源,这样当 Ansible 为 运行 时,它们可以被过滤并分组到 Ansible 清单中。如果 Ansible 任务需要从主机收集事实,这将很有帮助。