2015-11-17 3 views
2

Я новичок в Ansible, так что я написал небольшую утилиту анзибля установить некоторые зависимости пакетов для системы Я пишу:Определение ОС - анзибль

--- 

- hosts: all 
    user: root 
    tasks: 
     - name: install requirements 
     apt: name={{item}} state=latest update_cache=true 
     with_items: 
      - gcc 
      - python-dev 
      - python-setuptools 
      - python-software-properties 

текущие поддерживаемые среды являются Ubuntu, Red Hat и Mac OS X. Текущий способ написания этой пьесы будет работать только в Ubuntu (Debian). Как я могу выполнить эту часть кода в соответствии с ОС? Для Ubuntu это apt, для Red Hat это yum и для Mac OS Xbrew.

ответ

4

Обычный подход к этому вопросу заключается в том, чтобы иметь специальный файл задачи семейства ОС, который условно включается путем проверки факта 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' 
) 
+0

Как о 'OS x'? – cybertextron

+0

У меня нет mac, поэтому я не могу его протестировать, но если вы запустите «ansible -i» mac-host, «all -m setup» (где «mac-host» - это имя вашего окна OS X), это даст все факты о вашей машине «mac-host», которая, надеюсь, даст вам некоторый факт, который вы можете использовать, чтобы различать его и другую ОС. – ydaetskcoR

+1

На 'OS X'' ansible_os_family' есть 'Дарвин' – user

Смежные вопросы