ansible - 如何为本地和远程主机设置不同的python解释器
问题描述
用例:
剧本 1
- 当我们第一次连接到远程主机时,远程主机已经安装了一些 python 版本 - 自动发现功能会找到它
- 现在我们在远程主机上安装ansible-docker
- 从此时起:ansible-docker 文档建议使用
ansible_python_interpreter=/usr/bin/env python-docker
剧本 2
我们再次连接到同一个主机/s,但现在我们必须使用/usr/bin/env python-docker
python 解释器
做这个的最好方式是什么?
目前我们ansible_python_interpreter
在剧本级别设置Playbook 2
:
---
- name: DaqMon app
vars:
- ansible_python_interpreter: "{{ '/usr/bin/env python-docker' }}"
这可行,但这也会改变本地操作的 python 解释器。因此本地操作将失败,因为 (python-docker
本地不存在)。
- 当前的解决方法是显式指定
ansible_python_interpreter
每个本地操作,这既繁琐又容易出错
问题:
- 理想的解决方案是,如果我们可以将
'/usr/bin/env python-docker'
后备添加到interpreter-python-fallback - 但我认为这是不可能的 - 有没有办法只为远程主机设置 python 解释器 - 并为 localhost 保留默认值?
- 或者是否可以显式覆盖本地主机的 python 解释器?
解决方案
您应该ansible_python_interpreter
在主机级别设置 。
所以是的,可以在您的清单中为 localhost显式设置解释器。
localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python
我假设你也可以在你的 localhost 或 docker 主机上使用set_fact
on 。hostvars[<host>].ansible_python_interpreter
有一篇关于set_fact
onhostvars
的精彩文章!;-P
推荐阅读
- node.js - 使用 Docker 通过 kubernetes 部署 React 应用程序
- amazon-web-services - 如何使用 aws cdk (JAVA) 创建 cloudwatch 规则以每 15 分钟触发一次 lambda 函数?
- terraform - 通过 terraform 更改代码管道的默认事件规则
- tkinter - 为什么 TCL 在其他 Mac 上导致我的 pyinstaller 应用程序出现问题?
- python - 看不到继承的属性
- git - git clone 命令不适用于 https URL。对于 ssh 它可以工作 - Ubuntu 20 Git 版本 2.25.1
- arduino - 如何在 Arduino 库中将十进制转换为十六进制
- sql - SQL - 将对象附加到 json 数组的每个元素
- java - 如何删除并插入子依赖表(休眠)?
- vue.js - 是否可以在 dist 中隐藏服务器 URL(在 Vue.js 中)?