首页 > 解决方案 > 如何使用 terraform local-exec provisioner 在 vi​​rtualenv 中运行 ansible

问题描述

我相信标题描述了一切。:) 我的剧本看起来很简单:

- hosts: all
  become: yes
  roles:
    - geerlingguy.docker

我在 virtualenv 中运行它。现在我想为我创建的每台机器使用 terraform local-exec 配置程序启动它。怎么做?有什么例子吗?

标签: pythondockeransibleterraform

解决方案


关于如何在 virtualenv 中运行 Python 软件而不首先在 shell 中激活该 virtualenv 的一般答案是通过环境目录中的pythonorpython3解释器显式运行它。bin

如果您运行该解释器,那么它将自动配置为在 virtualenv 中查找依赖项,而不是在系统范围内查找依赖项。

例如,如果您的 virtualenv 在其中,/home/example/foo/env那么您可以将其 Python 解释器运行为/home/example/foo/env/bin/python(或python3)。

要在 Terraform 的local-exec配置器中执行此操作,您可以执行以下操作:

  provisioner "local-exec" {
    command = "/home/example/foo/env/bin/python /path/to/ansible ansible-arguments"
  }

请注意,当其他方法不可行时,Terraform 的配置器功能旨在作为实用的最后手段。推荐的方法是构建一个预配置的机器映像(可能在构建时使用 Ansible 或其他一些配置管理系统),以便机器将立即以正确的配置启动,而无需单独配置它。

然后,这种方法又允许使用自动缩放等功能,新机器可以随时启动,独立于 Terraform。


推荐阅读