【问题标题】:How to run ansible inside virtualenv with terraform local-exec provisioner如何使用 terraform local-exec provisioner 在 vi​​rtualenv 中运行 ansible
【发布时间】:2020-01-02 12:37:19
【问题描述】:

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

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

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

【问题讨论】:

  • 你像ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos your_playbook一样累吗。 local-exec 像 bash 一样工作。如果您能够使用 bash 运行上述内容,那么它应该可以在 local-exec 中运行
  • 你是如何管理你的 virtualenv 的?您是否有不想在运行 Terraform 的终端会话中启动 venv 的原因?

标签: python docker ansible terraform


【解决方案1】:

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

如果您运行该解释器,那么它将自动配置为在 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。

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 2019-09-30
    • 2019-08-20
    • 2014-06-20
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多