Ansible - Активация виртуальной среды с помощью становления - PullRequest
0 голосов
/ 19 июня 2019

Я хочу создать пользователя для своей установки 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

Но как мне добиться этого здесь?Я думал, что стал_пользователь это сделает?

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Если у вас уже есть путь к папке пользователя и установлены соответствующие разрешения, вы можете напрямую использовать модуль Ansible pip для создания виртуальной среды в этой папке и установки пакетов. Итак, IIUC вам не требуются следующие задачи

  • Create Python virtual env
    • вместо этой задачи вы можете просто добавить параметр virtualenv_command в модуль pip, чтобы создать виртуальную среду (если она еще не существует)
  • Activate env (х2)
    • если вы хотите установить пакеты в виртуальную среду с помощью модуля 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

* домашняя папка пользователя должна существовать до выполнения этой задачи

0 голосов
/ 29 июня 2019

Сработало следующее:

- 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"
...