我想为我的 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
Run Code Online (Sandbox Code Playgroud)
我知道这通常不是最“Ansible”的实现,但我只是想让一些东西发挥作用。
错误出现在“创建 Python 虚拟环境”中。我在该行中收到错误
在命令行中我只需运行: su -s /bin/bash - ckan
但我在这里如何实现这一目标呢?我以为become_user会做到这一点?
以下工作有效:
- name: Install setuptools into venv
pip:
name: Setuptools==36.1
virtualenv: '{{ path_to_virtualenv }}'
Run Code Online (Sandbox Code Playgroud)
不需要成为用户。
另一个例子:
- name: Install ckan python modules
pip: name="requirements-docs.txt" virtualenv={{ ckan_virtualenv }} state=present extra_args="--ignore-installed -r"
Run Code Online (Sandbox Code Playgroud)
如果您已经拥有用户文件夹的路径并设置了适当的权限,那么您可以直接使用 Ansiblepip模块在该文件夹中创建虚拟环境并安装软件包。因此,IIUC 您不需要执行以下任务
Create Python virtual env
virtualenv_command到pip模块中,以创建虚拟环境(如果尚不存在),而不是执行此任务Activate env(x2)
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
Run Code Online (Sandbox Code Playgroud)
如果你想安装许多包,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
Run Code Online (Sandbox Code Playgroud)
*执行此任务之前用户的主文件夹必须存在
| 归档时间: |
|
| 查看次数: |
10212 次 |
| 最近记录: |