Ansible - 使用 become_user 激活虚拟环境
Ansible - Activating virtual env with become_user
我想为我的 CKAN 安装创建一个用户,然后以该用户身份激活虚拟环境并安装一些东西。
- name: Add a CKAN user
user:
name: ckan
comment: "CKAN User"
shell: /sbin/nologin
create_home: yes
home: /usr/lib/ckan
state: present
- name: chmod 755 /usr/lib/ckan
file:
path: /usr/lib/ckan
mode: u=rwX,g=rX,o=rX
recurse: yes
- name: Create Python virtual env
command: virtualenv --no-site-packages default
become: yes
become_user: ckan
- name: Activate env
command: . default/bin/activate
- name: Activate env
command: pip install setuptools==36.1
我知道这通常不是最 'Ansible' 的实现,但我只是想让一些东西起作用。
错误在 'Create Python virtual env'。我在
的该行中收到错误
在命令行中我会 运行:
su -s /bin/bash - ckan
但是我该如何实现呢?我以为 become_user 会做?
以下有效:
- name: Install setuptools into venv
pip:
name: Setuptools==36.1
virtualenv: '{{ path_to_virtualenv }}'
不需要成为用户。
另一个例子:
- name: Install ckan python modules
pip: name="requirements-docs.txt" virtualenv={{ ckan_virtualenv }} state=present extra_args="--ignore-installed -r"
如果您已经有了用户文件夹的路径并设置了适当的权限,那么您可以直接使用Ansible pip
模块在该文件夹中创建一个虚拟环境并安装包。所以,IIUC 你不需要以下任务
Create Python virtual env
- 您可以将参数
virtualenv_command
添加到 pip
模块来代替此任务以创建虚拟环境(如果它尚不存在)
Activate env
(x2)
- 如果您想使用 Ansible
pip
模块将软件包安装到虚拟环境中,则不需要执行这 2 个任务
此外,您可以使用参数 virtualenv_site_packages
来排除虚拟环境中的全局包。您不需要使用参数 extra_args
来执行此操作。
如果您想将单个包安装到虚拟环境中,那么您可以用以下任务替换您的最后 3 个任务
tasks:
- name: Create Python virtual env and install one package inside the virtual env
pip:
name: setuptools==36.1
virtualenv: /path/to/ckan/user/home/folder # <--- path to user's home folder*
virtualenv_command: virtualenv
virtualenv_site_packages: no # <---- added this parameter to exclude site packages
virtualenv_python: python3.7
如果您想从 requirements-docs.txt
安装 多个软件包 ,那么您可以使用这种方法
tasks:
- name: Create Python virtual env and install multiple packages inside the virtual env
pip:
requirements: /path/to/ckan/user/home/folder/requirements-docs.txt
virtualenv: /path/to/ckan/user/home/folder # <--- path to user's home folder*
virtualenv_command: virtualenv
virtualenv_site_packages: no # <---- added this parameter to exclude site packages
virtualenv_python: python3.7
*
执行此任务之前用户的主文件夹必须存在
我想为我的 CKAN 安装创建一个用户,然后以该用户身份激活虚拟环境并安装一些东西。
- name: Add a CKAN user
user:
name: ckan
comment: "CKAN User"
shell: /sbin/nologin
create_home: yes
home: /usr/lib/ckan
state: present
- name: chmod 755 /usr/lib/ckan
file:
path: /usr/lib/ckan
mode: u=rwX,g=rX,o=rX
recurse: yes
- name: Create Python virtual env
command: virtualenv --no-site-packages default
become: yes
become_user: ckan
- name: Activate env
command: . default/bin/activate
- name: Activate env
command: pip install setuptools==36.1
我知道这通常不是最 'Ansible' 的实现,但我只是想让一些东西起作用。
错误在 'Create Python virtual env'。我在
的该行中收到错误在命令行中我会 运行: su -s /bin/bash - ckan
但是我该如何实现呢?我以为 become_user 会做?
以下有效:
- name: Install setuptools into venv
pip:
name: Setuptools==36.1
virtualenv: '{{ path_to_virtualenv }}'
不需要成为用户。
另一个例子:
- name: Install ckan python modules
pip: name="requirements-docs.txt" virtualenv={{ ckan_virtualenv }} state=present extra_args="--ignore-installed -r"
如果您已经有了用户文件夹的路径并设置了适当的权限,那么您可以直接使用Ansible pip
模块在该文件夹中创建一个虚拟环境并安装包。所以,IIUC 你不需要以下任务
Create Python virtual env
- 您可以将参数
virtualenv_command
添加到pip
模块来代替此任务以创建虚拟环境(如果它尚不存在)
- 您可以将参数
Activate env
(x2)- 如果您想使用 Ansible
pip
模块将软件包安装到虚拟环境中,则不需要执行这 2 个任务
- 如果您想使用 Ansible
此外,您可以使用参数 virtualenv_site_packages
来排除虚拟环境中的全局包。您不需要使用参数 extra_args
来执行此操作。
如果您想将单个包安装到虚拟环境中,那么您可以用以下任务替换您的最后 3 个任务
tasks:
- name: Create Python virtual env and install one package inside the virtual env
pip:
name: setuptools==36.1
virtualenv: /path/to/ckan/user/home/folder # <--- path to user's home folder*
virtualenv_command: virtualenv
virtualenv_site_packages: no # <---- added this parameter to exclude site packages
virtualenv_python: python3.7
如果您想从 requirements-docs.txt
安装 多个软件包 ,那么您可以使用这种方法
tasks:
- name: Create Python virtual env and install multiple packages inside the virtual env
pip:
requirements: /path/to/ckan/user/home/folder/requirements-docs.txt
virtualenv: /path/to/ckan/user/home/folder # <--- path to user's home folder*
virtualenv_command: virtualenv
virtualenv_site_packages: no # <---- added this parameter to exclude site packages
virtualenv_python: python3.7
*
执行此任务之前用户的主文件夹必须存在