Po inštalácii balíka ansible začnem výpisom všetkých dostupných rolí:

ansible-galaxy list

Okamžite ma privítajú dve varovania:

# /home/peterbabic/.ansible/roles
[WARNING]: - the configured path /usr/share/ansible/roles does not exist.
[WARNING]: - the configured path /etc/ansible/roles does not exist.

Cesta k roliam #

Dôvodom je predvolené nastavenie roles_path v ansible. Je zakomentované v /etc/ansible/ansible.cfg, ale naznačuje predvolené hodnoty:

[defaults]
#roles_path = ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles

Najjednoduchším spôsobom, ako sa zbaviť chýb, by bolo buď odkomentovať a zmeniť hodnotu roles_path tak, aby obsahovala len ~/.ansible/roles, alebo vytvoriť chýbajúce adresáre, existuje však lepšie riešenie. Rád si dotfiles verzionujem pomocou yadm ako git repozitár. Ansible nasledujúce administrátorské konvencie je na toto dobre prispôsobené. Ansible hľadá konfiguračné súbory v tomto poradí a použije prvý, ktorý nájde:

  1. ansible.cfg v aktuálnom adresári
  2. .ansible.cfg v domovskom adresári
  3. /etc/ansible/ansible.cfg v súborovom systéme

Prirodzene, 2. možnosť je najvhodnejšia pre správu dotfiles. Pre odstránenie varovaní vytvorte súbor ~/.ansible.cfg:

[defaults]
roles_path = ~/.ansible/roles

Varovania o neexistujúcej ceste teraz zmiznú.

Predvolený súbor inventára #

Ďalšou vecou je prispôsobenie predvoleného súboru inventára. Pri nahliadnutí do /etc/ansible/ansible.cfg nájdeme nasledovné:

[defaults]
#inventory = /etc/ansible/hosts

Podobne, súbor /etc/ansible/hosts nie je príliš vhodný pre správu verzií. To sa dá zmeniť na lokálny súbor v nastavení ~/.ansible.cfg:

[defaults]
inventory  = ~/.ansible_hosts

V závislosti od preferencií je možné použiť ľubovolnú cestu pre súbor inventára v domovskom adresári, napríklad ~/.ansible/hosts. Rozhodol som sa neumiestniť súbor inventára do adresára ~/.ansible/ z týchto dôvodov:

  1. V adresári ~/.ansible/ sa momentálne nachádzajú iba automaticky generované súbory
  2. ansible.cfg a hosts štandardne sídlia vedľa seba v /etc/ansible/

Umiestniť ~/.ansible.cfg a ~/.ansible_hosts vedľa seba do domovského adresára sa mi momentálne zdá najprirodzenejšie.

Nastavenia Vim #

Na editovanie používam vim, ansible nie je výnimkou. Inštalácia pluginu ansible-vim ľubovoľnou preferovanou metódou umožňuje okrem iného zvýraznenie syntaxe. Zvýraznenie funguje aj pre súbory inventára ansible, ale považujú sa len súbory s názvom hosts. Náš súbor sa volá .ansible_hosts, nie hosts, takže správny filetype nebude rozpoznaný a zvýraznenie predvolene nebude fungovať.

Existujú aspoň dva spôsoby, ako to opraviť:

  1. Pridať nastavenie autocmd do súboru .vimrc
  2. Pridať modeline do súboru inventára

Prvá možnosť je zdokumentovaná inde, napríklad v README pluginu. Riešenie cez vimrc považujem za horšie, pretože pridáva zbytočné riadky do môjho vim konfiguráku len kvôli jedinému súboru. Tiež by som musel aktualizovať .vimrc pri zmene umiestnenia ~/.ansible_hosts, okrem aktualizácie ~/.ansible.cfg. Vidím v tom náchylnosť na chyby.

Lepší prístup podľa mňa je zahrnúť informáciu o filetype priamo do súboru inventára, aby ju vim zachytil. Táto informácia sa nazýva modeline. Zvyčajne sa používa na nastavenie správneho štýlu odsadenia súboru, ale tu pomôže rovnako dobre. Takto vyzerá modeline na konci súboru s nainštalovaným pluginom:

# vim: set ft=ansible_hosts:

Alebo takto, ak preferujete YAML, oboje funguje:

# vim: set ft=yaml.ansible:

Rovnako, aj bez nainštalovaného ansible-vim, táto modeline spustí zvýraznenie syntaxe ako pre .ini súbor:

# vim: set ft=dosini:

Pre zaujímavosť — som zvyknutý chápať hosts súbor ako /etc/hosts, čo je niečo úplne iné. Plugin je dosť inteligentný na to, aby tento súbor nezvýrazňoval, ale napriek tomu mi príde ansible spôsob pomenovania súborov inventára rovnakým názvom mätúci. Neuvádzanie prípony súboru, pretože sa snažili podporovať viacero formátov, tiež nie je pre mňa bežná vec.

Poznámka k správe dotfiles #

Nezabudnite pridať oba súbory do správcu dotfiles. Videl som, že kolegovia v poslednej dobe propagujú chezmoi, ale ja používam yadm a zatiaľ som s ním spokojný.

yadm add ~/.ansible.cfg
yadm add ~/.ansible_hosts
yadm commit
yadm push

Ako bezpečnostná poznámka: súbor inventára by nemal byť verejný vo verejnom repozitári dotfiles a treba zvážiť iný prístup, napríklad súbor hosts v súkromnom repozitári.

Zhrnutie #

Po vykonaní týchto krokov je možné používať ansible role bez zbytočných varovaní, so zapnutým zvýraznením syntaxe a bez straty prehľadu o zmenách v súboroch. Kroky v poradí:

  1. Nastaviť umiestnenie rolí ansible-galaxy
  2. Použiť súbor inventára uložený v domovskom adresári
  3. Nastaviť zvýraznenie syntaxe s ansible-vim
  4. Sledovať súbory v repozitári dotfiles

Pre úplnosť, príklad ~/.ansible_hosts s vim modeline:

[webserver]
example.com

# vim: set ft=ansible_hosts:

A lokálny konfiguračný súbor ansible ~/.ansible.cfg:

[defaults]
roles_path = ~/.ansible/roles
inventory  = ~/.ansible_hosts

Všimnite si, že roles_path reprezentuje adresár, kým inventory reprezentuje súbor.

Toto je 24. príspevok #100daystooffload.

Odkazy #