Wyjaśnianie faktów Ansible na przykładach
Wprowadzenie do faktów Ansible
W tym samouczku wyjaśniono, czym są fakty dotyczące Ansible i jak gromadzić informacje o systemie, tj. fakty w podręcznikach Ansible.
Krótkie wprowadzenie do faktów dotyczących Ansible
Fakty to informacje o zarządzanych hostach.
Po uruchomieniu podręcznika ansible spróbuje zebrać informacje związane z systemem o zarządzanym hoście i zapisać je w pamięci do czasu ukończenia podręcznika.
Informacje mogą obejmować adres IP, system operacyjny, system plików i inne. Gromadzeniem informacji zajmuje się moduł „konfiguracja”.
Nie ma potrzeby definiowania modułu instalacyjnego. Zamiast tego ansible automatycznie użyje modułu instalacyjnego i zbierze fakty.
Spójrz na następujący przykład.
Utwórz podręcznik i dodaj następującą definicję zabawy. Definicja gry zawiera tylko nazwę gry i hosty docelowe. Dla tej zabawy nie utworzono żadnego zadania.
- name: Stats collection
hosts: allJak widać z poniższych wyników, kiedy uruchamiam podręcznik, zbieranie faktów jest przesyłane jako pierwsze zadanie, mimo że w podręczniku nie zdefiniowaliśmy żadnego zadania.
PLAY [Stats collection] *******************************************************************************************
TASK [Gathering Facts] ********************************************************************************************
ok: [rocky.anslab.com]
ok: [master.anslab.com]
ok: [ubuntu.anslab.com]
PLAY RECAP ********************************************************************************************************
master.anslab.com : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rocky.anslab.com : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ubuntu.anslab.com : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Fakty nazywane są także zmiennymi podręcznika.
Jak używać zmiennych w podręcznikach Ansible
Wyłączanie gromadzenia faktów
Nie każdy podręcznik wymaga gromadzenia faktów. Możesz pominąć zbieranie faktów, dodając „gather_facts: false” do definicji gry.
- name: Stats collection
hosts: all
gather_facts: falseJak korzystać z modułu konfiguracji
Jak powiedziałem w poprzedniej sekcji, ansible używa modułu instalacyjnego do zbierania faktów. Zobaczmy kilka sposobów użycia modułu instalacyjnego jako polecenia adhoc, a następnie zobaczymy, jak jawnie używać modułu instalacyjnego w podręczniku.
Dane wyjściowe polecenia setup będą w formacie JSON. Uruchom następującą komendę na hoście docelowym, aby uzyskać dane wyjściowe.
ansible m1 -m setup | less
Zbieranie faktów za pomocą Ansible
Jak widać na powyższym obrazku, gromadzonych jest mnóstwo informacji związanych z systemem. Niektóre informacje mogą być przydatne, inne nie.
Typ danych Fakty
Informacje przechowywane w faktach są podzielone na trzy różne typy danych.
- AnsibleUnsafeText
- Słownik
- Lista
Poniższy podręcznik służy do demonstrowania typów danych na podstawie danych wyjściowych. Używam type_debug, aby znaleźć typ danych.
- name: Facts Data type
hosts: m2
gather_facts: true
tags: datatype
tasks:
- name: AnsibleUnsafeText
debug:
var: ansible_facts['distribution'] | type_debug
- name: dict
debug:
var: ansible_facts['eth0']['ipv4'] | type_debug
- name: List
debug:
var: ansible_facts['eth0']['ipv6'] | type_debugPrzykładowy wynik:
ansible-playbook facts_data_type.yml
TASK [AnsibleUnsafeText] ****************************************************************************************************************************************************************************************
ok: [rocky.anslab.com] => {
"ansible_facts['distribution'] | type_debug": "AnsibleUnsafeText"
}
TASK [dict] *****************************************************************************************************************************************************************************************************
ok: [rocky.anslab.com] => {
"ansible_facts['eth0']['ipv4'] | type_debug": "dict"
}
TASK [List] *****************************************************************************************************************************************************************************************************
ok: [rocky.anslab.com] => {
"ansible_facts['eth0']['ipv6'] | type_debug": "list"
}Filtrowanie faktów i Gather_subset
Możesz zastosować filtry, aby pobrać sekcję danych z danych wyjściowych. Powiedzmy, że jeśli chcę pobrać architekturę maszyny, polecenie będzie wyglądało następująco.
ansible m2 -m setup -a "filter=ansible_architecture"
rocky.anslab.com | SUCCESS => {
"ansible_facts": {
"ansible_architecture": "x86_64",
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false
}Dane można także filtrować za pomocą wzorców.
ansible m2 -m setup -a "filter=*architecture"
rocky.anslab.com | SUCCESS => {
"ansible_facts": {
"ansible_architecture": "x86_64",
"ansible_userspace_architecture": "x86_64",
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false
}Możesz także użyć gather_subset, aby uzyskać określony podzbiór faktów. Na przykład, jeśli potrzebujesz tylko informacji związanych z siecią, możesz użyć "gather_subset=network".
ansible m2 -m setup -a "gather_subset=network"Podobnie istnieją inne podzbiory, takie jak all, min, hardware, sieć i wirtualny itd. Domyślnie ustawione jest "all".
Możesz poprzedzić symbol ! dowolnym podzbiorem, który nie będzie zbierał określonego podzbioru. Na przykład poniższe polecenie zbierze wszystkie fakty z wyjątkiem informacji związanych z siecią.
ansible m2 -m setup -a "gather_subset=!network"Zapisywanie faktów do pliku
Możesz zapisać fakty do pliku używając flagi --tree. Ścieżkę katalogu należy przekazać jako argument do flagi --tree.
ansible all -m setup --tree /home/vagrant/factsW tym przypadku ansible zbierze fakty dla wszystkich grup i zapisze dane wyjściowe z nazwą serwera w katalogu /home/vagrant/facts.
ls -l ~/facts
total 68
-rw-rw-r-- 1 vagrant vagrant 21092 Apr 27 05:36 master.anslab.com
-rw-rw-r-- 1 vagrant vagrant 18336 Apr 27 05:36 rocky.anslab.com
-rw-rw-r-- 1 vagrant vagrant 21093 Apr 27 05:36 ubuntu.anslab.comKorzystanie z modułu konfiguracji w podręczniku
Nie wszystkie dane zebrane w faktach zostaną wykorzystane w Twoich podręcznikach. Możesz więc jawnie skorzystać z modułu instalacyjnego i zebrać interesujące Cię dane.
Jeśli spojrzysz na poniższy podręcznik, jedyne dane, które mnie interesują, to informacje o dystrybucji węzłów zarządzanych. Korzystając z tych informacji, napisałem oświadczenie warunkowe.
- name: Explicitly using setup module
hosts: all
gather_facts: false
tasks:
- name: Setup Module
setup:
filter: ansible_distribution
- name: Doing something
debug:
msg: "Spotted RHEL based distro. Proceeding with activity..."
when: ansible_distribution | lower in ["rocky","redhat","centos"]W wynikach poniżej możesz zobaczyć zadania uruchamiane tylko w systemie Rocky Linux i pomijane w przypadku dystrybucji opartych na Ubuntu.
TASK [Setup Module] ***********************************************************************************
ok: [rocky.anslab.com]
ok: [master.anslab.com]
ok: [ubuntu.anslab.com]
TASK [Doing something] ********************************************************************************
skipping: [master.anslab.com]
skipping: [ubuntu.anslab.com]
ok: [rocky.anslab.com] => {
"msg": "Spotted RHEL based distro. Proceeding with activity..."
}W podręczniku możesz także użyć filtrów i gather_subset.
- name: Applying filter
setup:
filter:
- 'ansible_distribution'
- 'ansible_eth[0-3]'
- name: Using subsets
setup:
gather_subset:
- '!all'
- 'network'Zmienność czasu działania z gromadzeniem faktów i bez nich
Gdy uruchomisz podręcznik dla dużego zestawu zarządzanych hostów, zbieranie faktów może spowolnić grę. Za pomocą polecenia time możesz sprawdzić czas działania podręcznika z faktami i bez nich.
Poniższe dane wyjściowe pokazują różnicę czasu z faktami i bez nich. Mój podręcznik ma mniejszą liczbę zadań i tylko 3 zarządzane hosty, więc nie będzie dużej różnicy w czasie wykonywania.
# With facts
time ansible-playbook facts.yml
real0m3.096s
user0m1.264s
sys 0m0.340sWithout facts
time ansible-playbook facts.yml
real0m2.112s
user0m0.887s
sys 0m0.265sWniosek
W tym artykule omówiliśmy fakty i sposób uruchamiania poleceń adhoc przy użyciu modułu instalacyjnego oraz sposób jawnego korzystania z modułu instalacyjnego w podręczniku.
Gromadzenie faktów jest procesem czasochłonnym, gdy walczysz z ogromną liczbą celów.
