Я начинаю с ansible и буду использовать его, в частности, для установки пакетов в нескольких дистрибутивах Linux.
Я вижу в документации , что yum
и apt
команды разделены - то , что было бы самым простым способом , чтобы объединить их и использовать что - то вроде этого:
- name: install the latest version of Apache
unified_install: name=httpd state=latest
вместо
- name: install the latest version of Apache on CentOS
yum: name=httpd state=latest
when: ansible_os_family == "RedHat"
- name: install the latest version of Apache on Debian
apt: pkg=httpd state=latest
when: ansible_os_family == "Debian"
Я понимаю, что эти два менеджера пакетов различны, но у них все еще есть общий набор основных способов использования. Другие оркестаторы ( например, соль ) имеют одну команду установки.
Ответы:
Обновление: Начиная с Ansible 2.0, теперь есть универсальный и абстрагированный
package
модульПримеры использования:
Теперь, когда имя пакета одинаково для разных семейств ОС, это так просто:
Если имя пакета в разных семействах ОС различается, вы можете обработать его с помощью файлов vars для дистрибутива или семейства ОС:
Затем для каждой ОС, которую вы должны обрабатывать по-разному ... создайте файл vars:
РЕДАКТИРОВАТЬ:
поскольку Майкл ДеХан (создатель Ansible) решил не абстрагировать модули менеджера пакетов, как это делает Chef ,Если вы все еще используете более старую версию Ansible (Ansible <2.0) , к сожалению, вам придется справиться с этим во всех своих книгах и ролях. ИМХО, это толкает много ненужных повторяющихся работ на авторов книг и ролей ... но так оно и есть в настоящее время. Обратите внимание, что я не говорю, что мы должны пытаться абстрагировать менеджеров пакетов, все еще пытаясь поддерживать все их специфические опции и команды, а просто иметь простой способ установить пакет, который не зависит от менеджера пакетов. Я также не говорю, что мы все должны перейти на Smart Package Managerно это своего рода уровень абстракции установки пакетов в вашем инструменте управления конфигурацией очень полезен для упрощения кроссплатформенных сборников / поваренных книг. Проект Smart выглядит интересно, но довольно амбициозно объединить управление пакетами на всех дистрибутивах и платформах без особого принятия ... покажем, будет ли он успешным. Реальная проблема заключается в том, что имена пакетов иногда имеют тенденцию быть разными в разных дистрибутивах, поэтому нам по-прежнему приходится делать операторы case или
when:
операторы для обработки различий.Способ, которым я имел дело с этим, состоит в том, чтобы следовать этой
tasks
структуре каталогов в книге или роли:И тогда есть это в моем
main.yml
:Это в
foo.yml
(для пакета 'foo'):Тогда для разных менеджеров пакетов:
Апт:
Yum:
Homebrew:
Обратите внимание, что это ужасно повторяющееся и не СУХОЕ , и хотя некоторые вещи могут отличаться на разных платформах и должны быть обработаны, в общем, я думаю, что это многословно и громоздко по сравнению с шеф-поварами:
И да, есть аргумент, что некоторые имена пакетов различаются в разных дистрибутивах. И хотя в настоящее время не хватает легко доступных данных , я бы рискнул предположить, что наиболее популярные имена пакетов распространены в дистрибутивах и могут быть установлены через абстрагированный модуль менеджера пакетов. Особые случаи должны быть обработаны в любом случае, и уже потребуют дополнительной работы, чтобы сделать вещи менее сухими . В случае сомнений, проверьте pkgs.org .
источник
Вы можете абстрагировать менеджеров пакетов через факты
Все , что вам нужно , это какая - то логика , которая устанавливает
ansible_pkg_mgr
дляapt
илиyum
т.п.Ansible также работает над тем, что вы хотите в будущем модуле .
источник
ansible_pkg_mgr
себя для любого упаковщика, о котором он знает. Вам не нужно ничего делать. Я использую эту конкретную конструкцию везде.Из Ansible 2.0 есть новый
Package
-modul.http://docs.ansible.com/ansible/package_module.html
Затем вы можете использовать его как ваше предложение:
Вы все еще должны рассмотреть различия имен.
источник
Ознакомьтесь с документацией Ansible об условном импорте .
Одна задача - убедиться, что apache работает, даже если имена служб различны в разных ОС.
источник
Вы не хотите этого делать, потому что определенные имена пакетов различаются в разных дистрибутивах. Например, в дистрибутивах, связанных с RHEL, популярный пакет веб-сервера называется так
httpd
, как в дистрибутивах, связанных с Debian, он называетсяapache2
. Аналогично с огромным списком других системных и вспомогательных библиотек.Может быть набор общих базовых параметров, но есть также ряд более сложных параметров, которые различаются между менеджерами пакетов. И вы не хотите быть в неоднозначной ситуации, когда для некоторых команд вы используете один синтаксис, а для других команд вы используете другой синтаксис.
источник
salt
удается объединить оба менеджера пакетов. В любом случае, я прибегну к двойной конфигурации.