Я использую пару серверов для приложения Python, некоторые из которых являются CentOS, другие - debian.
Есть ли удобный способ найти программу, которую можно было бы установить в разных местах, не прибегая к приведенному ниже примеру и не повторяя одну и ту же команду несколько раз (с разными when:
статей)?
Например, в CentOS это /sbin/nologin
, в Debian это /usr/sbin/nologin
. Я пытался найти и зарегистрировать путь в переменной, но это кажется глупым:
- name: Find nologin
command: ls -1 /usr/sbin/nologin
ignore_errors: yes
register: nologin_command
- name: Find nologin
command: ls -1 /sbin/nologin
register: nologin_command
when: nologin_command.stdout == ""
# nologin_command.stdout will be the path to one or the other
В моем конкретном случае я на самом деле пытаюсь найти правильный virtualenv_command
для пип модуль. Я должен быть конкретным, иначе я ошибаюсь (например, для Python 2) или путь, которого не существует.
В моих системах будет один из pyvenv, pyvenv-3.4, virtualenv или virtualenv-3.4. По крайней мере, один будет присутствовать, но, в зависимости от операционной системы и того, как был установлен python, они находятся в разных местах или не существуют вообще.
Если бы вы знали правила, которые вы можете использовать для определения местоположения, было бы лучше использовать их (CentOS с python2.7 должен иметь это ...)
Вы, наверное, могли бы сделать что-то вроде
- name: Find nologin
command: ls -1 /usr/sbin/nologin /sbin/nologin /usr/local/sbin/nologin
ignore_errors: yes
register: nologin_command
ИМХО цикл с использованием with_items
хотя более читабельный сделает результат более трудным для использования. Или, может быть, использовать find
в возможных каталогах:
- name: Find venv
command: find /usr/bin /usr/local/bin /opt -executable -type f -name pyvenv -o -name pyvenv-3.4 -o -name virtualenv -o name virtualenv-3.4
ignore_errors: yes
register: nologin_command
Как только вы найдете его вместо регистрации переменной, не помешает сохранить его как пользовательский факт, чтобы он был доступен в следующий раз: http://serverascode.com/2015/01/27/ansible-custom-facts.html