python3 venv - 如何为混合连接的 playbook 同步 ansible_python_interpreter:本地和目标系统

问题描述 投票:0回答:1

我正在 python venv 中运行 ansible playbooks

我的策略通常涉及云基础设施 (AWS) 和系统工程的混合。我已将它们配置为通过连接运行云基础设施任务:本地 - 这是为了最大限度地减少目标系统所需的访问权限。

但是,自从使用 venv 以来,我在 ansible_python_interpreter 位置方面遇到了冲突:

  • 在目标系统上,它们往往位于“默认”位置 /usr/bin/python3 - 我不能 100% 确定这是硬编码在 ansible 中,还是存储在 PATH 变量中
  • 在我的本地系统上,我假设它们是由
  • 定义的
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。

python python-3.x ansible python-venv
1个回答
0
投票

我假设您有如下的剧本

- 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
© www.soinside.com 2019 - 2024. All rights reserved.