Zaczynam od ansible i wykorzystam go między innymi do instalowania pakietów na kilku dystrybucjach Linuksa.
W dokumentach widzę, że polecenia yum
i apt
są rozdzielone - jaki byłby najłatwiejszy sposób na ich ujednolicenie i użycie czegoś takiego:
- name: install the latest version of Apache
unified_install: name=httpd state=latest
zamiast
- 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"
Rozumiem, że dwaj menedżerowie pakietów są różni, ale nadal mają zestaw wspólnych podstawowych zastosowań. Inni orkiestatorzy ( na przykład sól ) mają jedno polecenie instalacji.
Odpowiedzi:
Aktualizacja: Począwszy od Ansible 2.0, jest teraz ogólny i abstrakcyjny
package
modułPrzykłady użycia:
Teraz, gdy nazwa pakietu jest taka sama w różnych rodzinach systemów operacyjnych, jest tak prosta jak:
Gdy nazwa pakietu różni się w zależności od rodziny systemów operacyjnych, możesz obsługiwać ją za pomocą plików vars związanych z dystrybucją lub rodziną systemów operacyjnych:
Następnie dla każdego systemu operacyjnego, który musisz obsługiwać inaczej ... utwórz plik vars:
EDYCJA:
Ponieważ Michael DeHaan (twórca Ansible) postanowił nie wyodrębniać modułów menedżera pakietów, tak jak robi to Chef ,Jeśli nadal używasz starszej wersji Ansible (Ansible <2.0) , niestety musisz poradzić sobie z robieniem tego we wszystkich swoich podręcznikach i rolach. IMHO popycha to wiele niepotrzebnych powtarzających się prac do autorów podręczników i ról ... ale tak już jest. Zauważ, że nie mówię, że powinniśmy próbować oddzielić menedżerów pakietów od siebie, jednocześnie próbując wesprzeć wszystkie ich specyficzne opcje i polecenia, ale po prostu mieć łatwy sposób na zainstalowanie pakietu, który jest niezależny od menedżera pakietów. Nie mówię też, że wszyscy powinniśmy wskoczyć na Smart Package Managerabandwagon, ale ten rodzaj warstwy abstrakcji instalacji pakietu w narzędziu do zarządzania konfiguracją jest bardzo przydatny do uproszczenia wieloplatformowych podręczników / książek kucharskich. Projekt Smart wygląda interesująco, ale ambitne jest ujednolicenie zarządzania pakietami w różnych dystrybucjach i platformach bez większego wdrożenia, jednak ... Ciekawe będzie, czy odniesie sukces. Prawdziwy problem polega na tym, że nazwy pakietów czasami różnią się w zależności od dystrybucji, więc nadal musimy wykonywać instrukcje case lub
when:
instrukcje, aby poradzić sobie z różnicami.Sposób, w jaki sobie z tym poradziłem, polega na przestrzeganiu tej
tasks
struktury katalogów w podręczniku lub roli:A potem mam to w moim
main.yml
:To w
foo.yml
(dla pakietu „foo”):Następnie dla różnych menedżerów pakietów:
Trafny:
Mniam:
Homebrew:
Pamiętaj, że jest to strasznie powtarzalne, a nie SUCHE , i chociaż niektóre rzeczy mogą być różne na różnych platformach i będą musiały być obsługiwane, ogólnie myślę, że jest to pełne i niewygodne w porównaniu do szefa kuchni:
I tak, istnieje argument, że niektóre nazwy pakietów różnią się w zależności od dystrybucji. I choć nie jest obecnie brak łatwo dostępnych danych , to ośmielam się domyślać, że najbardziej popularne nazwy pakietów są powszechne w dystrybucji i mogą być instalowane za pomocą pobieranej modułu menedżera pakietów. W każdym razie należałoby poradzić sobie ze specjalnymi przypadkami, które wymagałyby dodatkowej pracy, zmniejszając SUSZENIE W razie wątpliwości sprawdź pkgs.org .
źródło
Za pomocą faktów można wyodrębnić menedżerów pakietów
Wszystko czego potrzebujesz to jakiś logiczny, który wyznacza
ansible_pkg_mgr
sięapt
lubyum
itd.Ansible pracuje także nad tym, co chcesz w przyszłym module .
źródło
ansible_pkg_mgr
się dla każdego programu pakującego, o którym wie. Nie musisz nic robić. Używam tego konkretnego konstruktu wszędzie.Od Ansible 2.0 jest nowy
Package
-modul.http://docs.ansible.com/ansible/package_module.html
Następnie możesz użyć go jak swojej propozycji:
Nadal musisz wziąć pod uwagę różnice w nazwach.
źródło
Sprawdź dokumentację Ansible na temat importów warunkowych .
Jedno zadanie, aby upewnić się, że apache działa, nawet jeśli nazwy usług są różne w poszczególnych systemach operacyjnych.
źródło
Nie chcesz tego robić, ponieważ niektóre nazwy pakietów różnią się między dystrybucjami. Na przykład w dystrybucjach związanych z RHEL nazywa się popularny pakiet serwerów WWW
httpd
, a podobnie jak w dystrybucjach związanych z Debianemapache2
. Podobnie z ogromną listą innych bibliotek systemowych i pomocniczych.Może istnieć zestaw wspólnych podstawowych parametrów, ale jest też wiele bardziej zaawansowanych parametrów, które różnią się między menedżerami pakietów. I nie chcesz być w dwuznacznej sytuacji, w której dla niektórych poleceń używasz jednej składni, a dla innych poleceń używasz innej składni.
źródło
salt
udało się ujednolicić oba menedżery pakietów. W każdym razie skorzystam z podwójnej konfiguracji.