euro-ansible
Installing ansible
Ansible ir jālādē tikai uz ierīces kurā atrodas ansible playbooki. Uz gala iekārtas vajadzīgs arī python, bet tas parasti jau ir ielādēts.
Mana metode ansible instalēšanai (Ubuntu):
sudo apt update
sudo apt install pipx
pipx ensurepath
pipx install --include-deps ansible
(Source: https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html )
Ansible struktūra (Vismaz šajā situācijā)
/inventory.yml
Inventory failā pieraksta (Un sagrupē!) visus aktuālos serverus, to IP adreses, kā arī, dažreiz aktuālos variables.
Šajā piemērā inventory fails ir YAML formātā, kas ir daudz salasāmāks. Bet ir iespējams ka inventory fails var būt dots INI formātā.
Skat. https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html
/roles/
Šajā mapē nosaka atsevišķas serveru "lomas". Parasti visu sadala atsevišķās lomās (piem. webservers, dnsservers....)
Role sākās no tasks/main.yml
. Piem., /roles/common/tasks/main.yml
/main.yml
Faktiski šajā failā nosaka kādas lomas attiecās uz kādiem hostiem/grupām. Bet, ja nemaldos, var arī vienkārši pa taisno rakstīt taskus, kas, laikam, ir tas ko šī uzdevuma veidotāji vēlējās...
Tasks/Modules (/roles/common/tasks/*
)
Ansible playbook faili ir sadalīti taskos.
Katrā taskā var izsaukt vienu, vai vairākus moduļus (izmantojot block
),
lai izpildītu kādu uzdevumu.
Piemēram apt
modulis, lai ielādētu package, vai
copy
modulis, lai pārkopētu failu uz hostu, u.tml.
Katram modulim ir kaut kādi savi iestatījumi, tāpēc ir svarīgi skatīties dokumentāciju moduļiem.
Handlers and Notify
Situācijā, kad izmaina kādu failu, iespējams vajag restartēt kādu servisu. Šim nolūkam izmanto handlers un notify.
Kas? Ko?
Handleri, šajā situācijā, atrodās iekš /roles/common/handlers/main.yml
Šis fails ir strukturēts tā pat kā parasti playbook task faili, bet šajā situācijā katrs task darbojās kā "handler", kuru var izsaukt no jebkura taska, ja tajā kaut kas ir mainījies.
(Handleri netiek laisti, ja tos neizsauc UN ja nav izmaiņu!)
Kā izsauc handleri?
Pie kāda task var piesaistīt handler, tam pieliekot notify: <handnler name>
(Piemērs iekš /roles/common/tasks/syslog.yml
)
Kad handleri tiek laisti?
Visi handleri tiek palaisti pašā playbook beigās!
Un, vai handleris tikts laists, tiek noteikts pēc attiecīgā taska exit statusa!
Katram taskam ir beigu statuss. Parasti - OK/CHANGED/SKIPPED
Ja task beidzās kā CHANGED
, tad handleris tiks palaists,
bet ja ir OK
vai SKIPPED
, tad, nē.
Ja ir vajadzība visus, līdz šim izsauktos, handlerus palaist ātrāk,
tad jāizmanto ansible flush_handlers
task.
- name: Flush handlers
meta: flush_handlers
Templates
Dažreiz ir vajadzība kādu failu dinamiski aizpildīt ar kādu informāciju. Piemēram, šajā uzdevumā webserver gadījumā.
Tam var izmantot ansible templates: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_templating.html
Principā izmanto ansible template
moduli tā pat kā copy
moduli.
Template modulis vienkārši pirms kopēšanas uz sistēmu to failu interpretēs kā jinja 2 template failu. (Aipildīs viskautkādus variables utt.)
Templates arī parasti tur citā mapē atsevišķi no failiem
Vault
Dažreiz vajag kādu failu vai variable šifrēt, lai tas nav pieejams plain tekstā, piemēram, git repozitorijā.
Tam izmanto ansible-vault
.
Failus var aizšifrēt ar ansible-vault encrypt <filename>
un tad rediģēt tādā pašā veidā vainu atšiftrējot
Tags
Šis gan jau nebūs vajadzīgs
Drīzāk quality-of-life feature.
Noder lai ārtāk palaistu ansible lai atjauninātu tikai mazu daļu. (Piem. BIND zone failu)
Atļauj noteiktus taskus atzīmēt ar "tag", un
Pēc tam laižot ansible var noteikt ar --tags
kādus tagus laist.
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html
Variable files
Kā laizt ansible?
Pamats kas vajadzīgs:
ansible-playbook -i <inventory file> <playbook file>
# Example:
# ansible-playbook -i inventory.yml main.yml
Pēc tam var karināt klāt dažādus "karogus":
-u
- ar kādu lietotāju slēgsies klāt (ssh)-k
- prasīs kādu SSH login paroli izmantot (ja vajag)-K
- prasīs kādu SUDO paroli izmantot (ja vajadzīga)--check
,-C
- tā saucamais "dry-run", kur parāda tikai kas mainīsies, un vai būs kādas kļūdas, bet uz gala sistēmas neko nemainīs (nestrādās ar dažiem moduļiem)--diff
,-D
- visos taskos parāda kas ir mainījies (piemēram, failiemdiff
formātā)-J
- prasīs ansible vault paroli
Viss kopā:
ansible-playbook -i inventory.yml main.yml -u madars -k -K -C -D -J