我想为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”的实现,但是我只是想使某些事情起作用。
该错误是在“创建Python虚拟环境”中。
在该行中出现错误在命令行中,我将运行: su -s / bin / bash-ckan
但是我如何在这里实现呢?我以为begin_user会这样做吗?
答案 0 :(得分:1)
如果您已经具有用户文件夹的路径并设置了适当的权限,则可以直接使用Ansible pip
模块在该文件夹中创建虚拟环境并安装软件包。因此,IIUC您不需要执行以下任务
Create Python virtual env
virtualenv_command
添加到pip
模块即可创建虚拟环境(如果尚不存在)Activate env
(x2)
pip
模块将软件包安装到虚拟环境中,则不需要这两个任务此外,您可以使用参数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
*
用户的主文件夹必须存在,然后才能执行此任务
答案 1 :(得分:0)
以下工作有效:
- 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"