2015-09-21 27 views
5

Próbuję skonfigurować funkcję Ansible przy pomocy --limit, a do tego potrzebuję faktów na temat innych hostów, które przechowuje cache z fact_caching. Jakie polecenie powinienem uruchomić, aby po prostu zebrać wszystkie fakty na temat wszystkich hostów i je przechowywać, bez wykonywania żadnych zadań? Coś takiego, jak setup module byłoby idealne, gdyby buforowało zebrane fakty, ale wygląda na to, że tak nie jest.Najszybszy sposób na zbieranie faktów do pamięci podręcznej faktów

Odpowiedz

15

Oto jak bym rozwiązać problem:

1.- Włącz gromadzenie faktów na playbook (site.yml):

gather_facts: yes 

2.- Włącz facts caching na ansible.cfg:

2.1.- Wariant 1 - Użyj tego, jeśli masz czas, aby zainstalować Redis:

[defaults] 
gathering = smart 
fact_caching = redis 

# two hours timeout 
fact_caching_timeout = 7200 

2.2.- Wariant 2 - służy do testowania teraz jest prosty, ale wolniej niż REDiS:

[defaults] 
gathering = smart 
fact_caching = jsonfile 
fact_caching_connection = /tmp/facts_cache 

# two hours timeout 
fact_caching_timeout = 7200 

3.- Update lub utworzyć cache faktów. Aby to zrobić, utwórz nową rolę (aktualizacja pamięci podręcznej) za pomocą jednego zadania: wykonaj komendę ping. Używamy ping ponieważ jest najprostszym i najszybszym ansibl zadanie tak to pomoże nam aktualizować cache bardzo szybko:

- name: Pinging server to update facts cache 
    ping:    

pozdrowienia,

+0

Wykonałem już resztę, ale polecenie ping było tym, czego szukałem. Ponadto, domyślnie jest ono ustawione tak. –

+0

Jak utworzyć ping, który wysyła pingi do wszystkich serwerów w naszym ekwipunku? –

+0

Łatwy: 1) zestaw: "hosts: all" na swojej stronie.yml 2) zestaw: "role: aktualizacja pamięci podręcznej" na swojej stronie.yml Po uruchomieniu uruchomi zadanie ping swojej roli we wszystkich twoi gospodarze. – alfredocambera

0

Bezwzględnie najszybszym sposobem byłoby skorzystanie z fact caching Ansaly'a wprowadzonego w wersji 1.8. Wymaga użycia serwera redis do przechowywania faktów, ale pozwoli ci przechowywać fakty pomiędzy biegami z playbooka. W dokumentacji opisano:

Wyobraź sobie na przykład bardzo dużą infrastrukturę z tysiącami hostów. Cache'owanie faktów można skonfigurować tak, aby działało co noc, ale konfiguracja małego zestawu serwerów może działać ad-hoc lub okresowo w ciągu dnia. Po włączeniu buforowania faktów nie byłoby konieczne "trafienie" wszystkich serwerów w celu odnoszenia się do zmiennych i informacji o nich.

Problem z --limit jest, że ograniczy wszystkie hosty, które będą korzystać z ansibl, więc będzie co ogranicza nawet specjalna grupa gospodarza jak all wpłynie. Jeśli nie używać --limit ale zamiast stosować grupy hostów wtedy mógłby zrobić coś takiego:

--- 
- hosts: all 
    tasks: [] 

- hosts: my_host_group 
    tasks: 
    - name: task1 
    ... 
    - name: task2 
    ... 

W tym przykładzie, pierwsza gra zmusi gromadzenie faktów dla wszystkich hostów masz od ciebie określono hosts: all. Druga gra będzie następnie wykonywać pożądane zadania na hostach w grupie my_host_group.

+0

Mam już włączone buforowanie faktów (przez json zamiast redis), a my już korzystamy z grup hostów. Używamy też czasami --limit. Szukałem sposobu na zaktualizowanie pamięci podręcznej faktów bez uruchamiania całego zestawu. –

2

Tworzenie nowego playbook z tylko jedną linię:

- hosts: all 

i uruchomienie go zbiera wszystkie fakty, a jeśli fact_caching jest włączone, będzie je buforował do wykorzystania w przyszłych książeczkach z opcją --limit.