我正在 python venv 中运行 ansible playbooks
我的策略通常涉及云基础设施 (AWS) 和系统工程的混合。我已将它们配置为通过连接运行云基础设施任务:本地 - 这是为了最大限度地减少目标系统所需的访问权限。
但是,自从使用 venv 以来,我在 ansible_python_interpreter 位置方面遇到了冲突:
home = /opt/homebrew/opt/[email protected]/bin
include-system-site-packages = false
version = 3.12.5
executable = /opt/homebrew/Cellar/[email protected]/3.12.5/Frameworks/Python.framework/Versions/3.12/bin/python3.12
command = /opt/homebrew/opt/[email protected]/bin/python3.12 -m venv /Users/jd/projects/mgr2/ansible
因此,我无法运行混合剧本,我需要添加
vars:
ansible_python_interpreter: /Users/jd/projects/mgr2/ansible/bin/python3
到我的剧本来运行本地任务或删除此行来运行目标系统任务。
我正在寻找一种在 PATH 变量中包含 python3 的方法,具体取决于我要采购的 venv。
我假设您有如下的剧本
- hosts: remote
tasks:
- name: Fetch file from remote
fetch:
src: /path/to/remote/file
dest: /path/to/local/directory
flat: yes
- hosts: localhost
connection: local
vars:
ansible_python_interpreter: "/Users/jd/projects/mgr2/ansible/bin/python3"
tasks:
- name: Copy file locally
copy:
src: /path/to/source/file
dest: /path/to/destination
- name: Clone Git repository locally
git:
repo: 'https://github.com/example/repo.git'
dest: /path/to/local/repo
对于上面的示例 playbook,您可以根据主机是
ansible_python_interpreter
还是 local
在清单文件中设置 remote
。
示例
inventory.yml
:
all:
hosts:
localhost:
ansible_connection: local
ansible_python_interpreter: "/Users/jd/projects/mgr2/ansible/bin/python3"
remote:
ansible_host: remote.host.ip
ansible_python_interpreter: /usr/bin/python3