Обычный подход к этому вопросу заключается в том, чтобы иметь специальный файл задачи семейства ОС, который условно включается путем проверки факта ansible_os_family
.
Таким образом, вы можете иметь файл main.yml
задачи в своей роли, которая выглядит примерно так:
# Arbitrary task here, not needed but the point is you can have any generic tasks directly in main.yml
- name: get the date
shell: `date`
register: date
- include: debian.yml
when: ansible_os_family == 'Debian'
- include: redhat.yml
when: ansible_os_family == 'RedHat'
, а затем в debian.yml
мы имеем:
- name: install requirements
apt: name={{item}} state=latest update_cache=true
with_items:
- gcc
- python-dev
- python-setuptools
- python-software-properties
и в redhat.yml
мы имеем:
- name: install requirements
yum: name={{item}} state=latest update_cache=true
with_items:
- gcc
- python-dev
- python-setuptools
- python-software-properties
Очевидно, это позволяет вам устанавливать разные депеды в зависимости от семейства ОС.
Если вы хотите, чтобы вы могли также условно включать семействуОС (или на самом деле все, что вы можете проверить факт для) конкретного ВАР так:
- name: Include OS-specific variables.
include_vars: "{{ item }}"
with_first_found:
- ../vars/{{ ansible_distribution | lower }}.yml
- ../vars/{{ ansible_os_family | lower }}.yml
А затем установить списки зависимостей, скажет vars/debian.yml
, как это:
python_dependencies:
- gcc
- python-dev
- python-setuptools
- python-software-properties
так что теперь ваш tasks/debian.yml
выглядит следующим образом:
- name: install requirements
apt: name={{item}} state=latest update_cache=true
with_items: python_dependencies
Вы можете увидеть список ОС и их семей путем проверки исходного кода here, который имеет этот Dict всех семейств ОС:
# A list with OS Family members
OS_FAMILY = dict(
RedHat = 'RedHat', Fedora = 'RedHat', CentOS = 'RedHat', Scientific = 'RedHat',
SLC = 'RedHat', Ascendos = 'RedHat', CloudLinux = 'RedHat', PSBM = 'RedHat',
OracleLinux = 'RedHat', OVS = 'RedHat', OEL = 'RedHat', Amazon = 'RedHat',
XenServer = 'RedHat', Ubuntu = 'Debian', Debian = 'Debian', Raspbian = 'Debian', Slackware = 'Slackware', SLES = 'Suse',
SLED = 'Suse', openSUSE = 'Suse', SuSE = 'Suse', SLES_SAP = 'Suse', Gentoo = 'Gentoo', Funtoo = 'Gentoo',
Archlinux = 'Archlinux', Manjaro = 'Archlinux', Mandriva = 'Mandrake', Mandrake = 'Mandrake',
Solaris = 'Solaris', Nexenta = 'Solaris', OmniOS = 'Solaris', OpenIndiana = 'Solaris',
SmartOS = 'Solaris', AIX = 'AIX', Alpine = 'Alpine', MacOSX = 'Darwin',
FreeBSD = 'FreeBSD', HPUX = 'HP-UX'
)
Как о 'OS x'? – cybertextron
У меня нет mac, поэтому я не могу его протестировать, но если вы запустите «ansible -i» mac-host, «all -m setup» (где «mac-host» - это имя вашего окна OS X), это даст все факты о вашей машине «mac-host», которая, надеюсь, даст вам некоторый факт, который вы можете использовать, чтобы различать его и другую ОС. – ydaetskcoR
На 'OS X'' ansible_os_family' есть 'Дарвин' – user