# 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): ```bash 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 *task*os. 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: ` (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 *task*am 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. ```yml - name: Flush handlers meta: flush_handlers ``` ### Templates ### Vault ### Tags ### Variable files ## Kā laizt ansible? Pamats kas vajadzīgs: ```sh ansible-playbook -i # 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, failiem `diff` formātā) - ~~`-J` - ~~ Viss kopā: ```sh ansible-playbook -i inventory.yml main.yml -u madars -k -K -C -D ```