Załóżmy, że mam hosta, który jest między innymi serwerem sieci Web, na którym instaluje się powiązana rola Ansible nginx
, wykonuje niezbędną konfigurację /etc/nginx
i otwiera porty 80 i 443 w zaporze.
W pewnym momencie chcę, aby ten konkretny host nie był już serwerem WWW, ponieważ z jakiegoś powodu przeniosłem tę usługę w inne miejsce. Samo usunięcie serwera z [webservers]
ekwipunku pozostawiłoby śmieci na serwerze. Idealnie chciałbym odinstalować nginx
, usunąć /etc/nginx
katalog (i niektóre inne katalogi) oraz zamknąć porty 80 i 443 w zaporze.
W Puppet mogę to zrobić. Host będący serwerem WWW będzie miał w swojej konfiguracji coś takiego:
class { 'nginx':
ensure => present,
}
wszystko, co muszę zrobić, to zastąpić „obecny” na „nieobecny”. Jeśli nginx
klasa jest dobrze napisana, cofnie wprowadzone zmiany. (Zazwyczaj administrator zamienia „obecny” na „nieobecny”, a później, gdy jest pewien, że wszyscy dotknięci hostami cofnęli konfigurację, usunie element z manifestu).
Co więcej, myślę, że moduł zapory ogniowej Puppet automatycznie usuwa reguły zapory ogniowej, których nie można już znaleźć w manifeście; więc myślę, że w przypadku zapory nie musisz nawet robić powyższej „nieobecnej” rzeczy, zapora i tak automatycznie się zamknie.
Jak mogę osiągnąć te rzeczy za pomocą Ansible?
ensure => present
naensure => absent
który również… Jak zrobić to samo z ansible” itp. Idealnie z przykładem wszystkiego, co już próbowałeś.Odpowiedzi:
Dzięki Ansible nie zrobiłbyś tego inaczej niż w przypadku Puppet.
W twoim przykładzie, gdzie chcesz ustawić
polegasz na tym, że autor tego modułu marionetkowego napisał kod niezbędny do usunięcia wszystkiego. Nie każdy moduł lalek ma to.
Podobnie z Ansible możesz mieć role, które mają zarówno niezbędne kroki, aby zainstalować go, a także usunąć. Różnica polega tylko na tym, jak wywołać oba.
Jednym z podejść może być takie, w którym rola ujawnia zmienną do przełączania zachowania. Na przykład ta rola nginx może przyjmować zmienną,
nginx_state
która przyjmuje wartościinstalled
iabsent
.W
tasks/main.yml
rolach autor roli może mieć coś podobnego do .....z odpowiednią logiką instalacji / dezinstalacji podzieloną między te dwa warunkowo dołączone pliki.
Odpowiednie role można również zagnieżdżać. Jako inny sposób na zrobienie tego samego, autor roli może na przykład podać rolę
nginx
z inną rolą w środku, zwanąuninstalled
. Możesz wtedy zrobić:Prawdopodobnie, w porównaniu do Puppet, zapewne ma mniej zasad i wskazówek dotyczących tego, jak należy to robić, więc praktyki na wolności różnią się nieco bardziej, ale obowiązują te same koncepcje.
źródło
- { role: nginx, state: absent }
), ale wydaje mi się to bardzo szczegółowe. Jedyną wadą zagnieżdżonej roli, którą widziałem, było to, że musiałem połączyć domyślne zmienne od rodzica.roles: -nginx/uninstalled
praca? Szukałem wszędzie, ale nie mogę znaleźć żadnej dokumentacji dotyczącej zagnieżdżania ról w sposób, który pozwoliłby mi to zrobić.Ponieważ masz swoją konfigurację / obsługę w Ansible, możesz po prostu zdmuchnąć cały serwer, ponownie zainstalować / udostępnić nowy i mieć przyjemny, czysty stan do pracy.
Jeśli rzeczywiście chcesz go „ponownie skonfigurować” do innych celów, musisz utworzyć nowy podręcznik, który wykona niezbędne zadania czyszczenia.
O ile mi wiadomo, wszystkie moduły opakowania Ansible obsługują,
state=absent
aby dany pakiet nie został zainstalowany na twoim serwerze. Dodatkowoapt
moduł mapurge=yes
parametr, który wyczyści wszelkie pozostałe dostosowane pliki konfiguracyjne.Można również utworzyć zadania potwierdzające, że port 80 jest zaporą ogniową. Ponieważ jednak nie będziesz mieć żadnych procesów uruchomionych na tym porcie, zapora ogniowa nie wpłynie na bezpieczeństwo twojego serwera.
źródło
state=absent
dodana. Istnieje duża szansa, że usunie lub cofnie większość wprowadzonych zmian konfiguracji. W zależności od tego, jak duża jest ta rola, może to być prawdziwa PITA do przetestowania.