Úvod
Ansible je nástroj Infrastructure as Code, který umožňuje jedinému řídicímu uzlu monitorovat a spravovat velké množství vzdálených hostitelů (serverů).
Ansible používá playbooky k definování různých úkolů pro vzdálené hostitele, včetně kontroly, zda existují soubory a složky.
Tento výukový program popisuje, jak používat stat
modul v Ansible zkontrolovat, zda existují soubory a složky na vzdálených hostitelích.
Předpoklady
- Přístup do příkazového řádku / okna terminálu
- Ansible nainstalován a nakonfigurován (viz naše průvodce instalací Ansible na Windows a instalací Ansible na Ubuntu)
Kontrola, zda soubor existuje v Ansible
Nejjednodušší způsob, jak zkontrolovat, zda soubor existuje pomocí Ansible, je pomocí stat
modul.
Účel stat
Modul je vyhledávat fakta o souborech a složkách a zaznamenávat je do registru. Stat modul používá následující syntaxi:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
...
Kde:
stat:
Prohlašuje, že používáme modul stat.path:
Deklaruje cestu k souboru nebo složce, kterou chceme zkontrolovat.register:
Poskytuje název registru, kam modul statistik ukládá podrobnosti o souborech a složkách.
Jedna z hodnot zaznamenaných v registru je exists
. Sloučení této hodnoty s debug
modul umožňuje zobrazit zprávu s podrobnostmi o tom, zda soubor nebo složka existuje:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists
1. V ukázkové příručce je první úkol (Kontrola, zda soubor existuje ) používá stat
modul k načtení faktů o test.txt
soubor umístěný v /home/example_folder na vzdáleném hostiteli. Tyto skutečnosti zaznamenává do registru s názvem file_data
.
2. Druhý úkol (Nahlásit, zda soubor existuje ) používá debug
modul pro zobrazení zprávy. Zkontroluje file_data
zaregistrovat a používá exists
hodnotu jako podmínku pro zobrazení zprávy. Pokud exists
hodnota je pravda , modul zobrazí zprávu ‚Soubor nebo adresář existuje‘ .
3. Třetí úkol (Nahlásit chybějící soubor ) udělá totéž, pouze se zobrazí zpráva „Soubor nebo adresář neexistuje“ pokud exists
hodnota je false .
Spuštění playbooku poskytuje následující výstup:
Výstup nám říká, že soubor ve skutečnosti neexistuje.
Chcete-li také zkontrolovat, zda se jedná o běžný soubor a nikoli o složku, přidejte isreg
hodnotu do debug
stav modulu:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isreg
Kontrola, zda v Ansible existuje adresář
Použití Ansible ke kontrole, zda adresář existuje, je úplně stejné jako ke kontrole, zda existuje soubor. Jediný rozdíl je v tom, že používáte isdir
hodnotu pro potvrzení cesty k zadanému adresáři:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isdir
Spouštění Ansible Tasks v závislosti na tom, zda existují soubory a složky
Jsou chvíle, kdy chcete spustit nebo přeskočit úkoly v playbooku v závislosti na tom, zda existují určité soubory nebo složky.
Například, pokud máte playbook navržený tak, aby vytvořil soubor na každém vzdáleném hostiteli, chcete přeskočit ty hostitele, kde soubor již existuje, abyste se vyhnuli vytváření duplikátů.
Chcete-li to provést, použijte podrobnosti souboru načtené stat
modul s when
argument pro vytvoření podmínek pro spouštění úloh:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
- name: Task name 2
file:
path: [path to the file you want to create]
state: touch
when: not register_name.stat.exists
...
1. Ve výše uvedené příručce je první úkol (Kontrola, zda soubor existuje ) používá stat
modulu k načtení podrobností test.txt
soubor umístěný ve example_folder na vzdáleném hostiteli.
2. Druhý úkol (Vytvořte soubor, pokud ještě neexistuje ) začíná kontrolou exists
hodnotu v registru. Pokud je hodnota true , úkol se přeskočí a playbook skončí. Pokud je hodnota false , úloha se provede a vytvoří nový soubor s názvem test.txt
.