python - 如何使用 terraform local-exec provisioner 在 virtualenv 中运行 ansible
问题描述
我相信标题描述了一切。:) 我的剧本看起来很简单:
- hosts: all
become: yes
roles:
- geerlingguy.docker
我在 virtualenv 中运行它。现在我想为我创建的每台机器使用 terraform local-exec 配置程序启动它。怎么做?有什么例子吗?
解决方案
关于如何在 virtualenv 中运行 Python 软件而不首先在 shell 中激活该 virtualenv 的一般答案是通过环境目录中的python
orpython3
解释器显式运行它。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。
推荐阅读
- python - 多处理池极慢
- powerbi - DAX 缺失值比率
- c# - 如何查找从键盘输入的值的类型?
- javascript - 我如何理解传递一个对象并在 Javascript 中的函数中更改它?
- python - 有没有更好的方法来根据某些字符拆分熊猫数据框列?
- qt - CLion 中的 Qt5 QML - QQmlApplicationEngine 无法加载组件
- javascript - 如何处理“未找到产品”。与赛普拉斯?
- mysql - 获取最近的记录,按 2 个日期汇总?
- c# - 注册类,将其从 android 项目传递给 App 类
- macos - 命令行工具已经安装,使用“软件更新”安装更新?