Ansible 手册:
cat sitecode_refresh.yml
---
- name: Run sitecode_refresh.py
hosts: localhost
tasks:
- name: Set pip pat for normal user
command: scl enable python27 bash
- name: Install virtualenv
pip:
name: virtualenv
version: "16.7.10"
- name: Create virtual environment
command: virtualenv -p /usr/bin/python2 sitecoderefresh
- name: Activate virtual environment
command: source sitecoderefresh/bin/activate
- name: Install Python requirements
command: pip install -r requirements.txt
- name: Run sitecode_refresh.py script
command: python sitecode_refresh.py --spreadsheet_id="abcxyz" --worksheet_name="Testing"
- name: Deactivate virtual environment
command: deactivate
...
运行它会产生如下错误。
ansible-playbook -v -k -K sitecode_refresh.yml
Using /etc/ansible/ansible.cfg as config file
SSH password:
BECOME password[defaults to SSH password]:
PLAY [Run sitecode_refresh.py] *************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Set pip pat for normal user] *********************************************************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": ["scl", "enable", "python27", "bash"], "delta": "0:00:00.007686", "end": "2023-08-18 19:38:17.946408", "rc": 0, "start": "2023-08-18 19:38:17.938722", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
TASK [Install virtualenv] ******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Unable to find any of pip2, pip to use. pip needs to be installed."}
PLAY RECAP *********************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
当我在 shell 上手动运行时,它工作正常。
如何保留环境设置?
您在尝试安装 virtualenv 软件包时似乎遇到了 Ansible playbook 问题。该错误消息表明 Ansible 无法找到用于安装的 pip2 或 pip。
要解决此问题,您可以尝试以下步骤:
指定 Pip 可执行文件:您可以显式指定要在 Playbook 的 pip 模块中使用的 pip 可执行文件。这是一个例子:
- name: Install virtualenv
pip:
name: virtualenv
version: "16.7.10"
executable: pip2
在本例中,我们使用 pip2 作为可执行文件。调整此项以匹配您系统上适当的可执行文件。
检查 Pip 安装:确保目标计算机上安装了所需版本的 pip。如果未安装,您可能需要手动安装。
环境变量:Ansible 模块在自己的环境中运行,任务内环境变量的更改不会在任务之间持续存在。要为整个剧本设置环境变量,请在剧本级别使用环境关键字。例如:
- name: Run sitecode_refresh.py
hosts: localhost
environment:
PATH: "/path/to/python2/bin:/path/to/pip2/bin:{{ ansible_env.PATH }}"
tasks:
# Your tasks here
将 /path/to/python2/bin 和 /path/to/pip2/bin 替换为 Python 2 和 pip 2 安装的实际路径。
用户权限:确保运行 Ansible playbook 的用户拥有执行 playbook 中操作(包括软件包安装)所需的权限。
使用 Ansible 模块:不要使用命令模块来激活虚拟环境和运行命令,而是考虑使用相关的 Ansible 模块来执行这些任务,例如 activate_virtualenv 和 pip 模块。这可以带来更好的集成和环境处理。