Compare commits

..

7 Commits

Author SHA1 Message Date
c3cc24e064 Update README.md 2025-09-04 20:10:02 +03:00
8903eb7b58 WIP 2025-09-02 18:49:58 +03:00
5ed897365f WIP 2025-09-02 18:45:46 +03:00
20ece6c64a WIP 2025-09-02 18:41:04 +03:00
ccab96403b WIP 2025-09-02 18:36:46 +03:00
cbbb8b0d9a WIP 2025-09-02 18:36:06 +03:00
607e1ec577 WIP 2025-09-02 18:35:30 +03:00
5 changed files with 81 additions and 27 deletions

View File

@@ -16,7 +16,7 @@ pipx install --include-deps ansible
## Ansible struktūra (Vismaz šajā situācijā) ## Ansible struktūra (Vismaz šajā situācijā)
#### `/inventory.yml` ### /inventory.yml
Inventory failā pieraksta (Un sagrupē!) visus aktuālos serverus, to IP adreses, Inventory failā pieraksta (Un sagrupē!) visus aktuālos serverus, to IP adreses,
kā arī, dažreiz aktuālos variables. kā arī, dažreiz aktuālos variables.
@@ -25,16 +25,18 @@ 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 Skat. https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html
#### `/roles/` ### /roles/
Šajā mapē nosaka atsevišķas serveru "lomas". Šajā mapē nosaka atsevišķas serveru "lomas".
Parasti visu sadala atsevišķās lomās Parasti visu sadala atsevišķās lomās (piem. webservers, dnsservers....)
#### `/main.yml` Role sākās no `tasks/main.yml`. Piem., `/roles/common/tasks/main.yml`
Faktiski šajā failā nosaka kādi roles attiecās uz kādiem hostiem.
### /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, 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. ir tas ko šī uzdevuma veidotāji vēlējās...
#### Tasks/Modules (`/roles/common/tasks/*`) ### Tasks/Modules (`/roles/common/tasks/*`)
Ansible playbook faili ir sadalīti *task*os. Ansible playbook faili ir sadalīti *task*os.
Katrā *task*ā var izsaukt vienu, vai vairākus moduļus (izmantojot `block`), Katrā *task*ā var izsaukt vienu, vai vairākus moduļus (izmantojot `block`),
@@ -46,13 +48,12 @@ Piemēram `apt` modulis, lai ielādētu package, vai
Katram modulim ir kaut kādi savi iestatījumi, Katram modulim ir kaut kādi savi iestatījumi,
tāpēc ir svarīgi skatīties dokumentāciju moduļiem. tāpēc ir svarīgi skatīties dokumentāciju moduļiem.
#### Handlers and Notify ### Handlers and Notify
Situācijā, kad izmaina kādu failu, iespējams vajag restartēt kādu servisu. Situācijā, kad izmaina kādu failu, iespējams vajag restartēt kādu servisu.
Šim nolūkam izmanto *handlers* un *notify*. Šim nolūkam izmanto *handlers* un *notify*.
**Kas? Ko?**
##### Handlers
Handleri, šajā situācijā, atrodās iekš `/roles/common/handlers/main.yml` Handleri, šajā situācijā, atrodās iekš `/roles/common/handlers/main.yml`
Šis fails ir strukturēts tā pat kā parasti playbook *task* faili, Šis fails ir strukturēts tā pat kā parasti playbook *task* faili,
@@ -66,13 +67,13 @@ Pie kāda task var piesaistīt handler, tam pieliekot `notify: <handnler name>`
(Piemērs iekš `/roles/common/tasks/syslog.yml`) (Piemērs iekš `/roles/common/tasks/syslog.yml`)
**Kad handleri tiek laisti?** **Kad handleri tiek laisti?**
Vai handleris tikts laists, tiek noteikts pēc attiecīgā taska exit statusa! 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 Katram *task*am ir beigu statuss. Parasti - OK/CHANGED/SKIPPED
Ja task beidzās kā `CHANGED`, tad handleris tiks palaists, Ja task beidzās kā `CHANGED`, tad handleris tiks palaists,
bet ja ir `OK` vai `SKIPPED`, tad, nē. bet ja ir `OK` vai `SKIPPED`, tad, nē.
Visi handleri tiek palaisti pašā playbook beigās!
Ja ir vajadzība visus, līdz šim izsauktos, handlerus palaist ātrāk, Ja ir vajadzība visus, līdz šim izsauktos, handlerus palaist ātrāk,
tad jāizmanto ansible `flush_handlers` task. tad jāizmanto ansible `flush_handlers` task.
@@ -80,10 +81,47 @@ tad jāizmanto ansible `flush_handlers` task.
- name: Flush handlers - name: Flush handlers
meta: 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ā.
#### Vault 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
#### Tags
## Kā laizt ansible? ## Kā laizt ansible?
@@ -101,6 +139,11 @@ Pēc tam var karināt klāt dažādus "karogus":
- `-k` - prasīs kādu SSH login paroli izmantot (ja vajag) - `-k` - prasīs kādu SSH login paroli izmantot (ja vajag)
- `-K` - prasīs kādu SUDO paroli izmantot (ja vajadzīga) - `-K` - prasīs kādu SUDO paroli izmantot (ja vajadzīga)
- `--check`, `-C` - tā saucamais "dry-run", kur parāda tikai kas mainīsies, - `--check`, `-C` - tā saucamais "dry-run", kur parāda tikai kas mainīsies,
un vai būs kādas kļūdas, bet reāli neko nemainīs (nestrādās ar dažiem moduļiem) 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ā) - `--diff`, `-D` - visos taskos parāda kas ir mainījies (piemēram, failiem `diff` formātā)
- `-J` - prasīs ansible vault paroli
Viss kopā:
```sh
ansible-playbook -i inventory.yml main.yml -u madars -k -K -C -D -J
```

View File

@@ -1,10 +1,10 @@
- name: run common tasks - name: run common tasks
hosts: all hosts: all # uz kādu grupu/hostiem attiecās (all ir automātiski veidota grupa kas satur visus hostus)
become: true become: true # vai izmantos sudo lai visu laistu kā root
become_user: root become_user: root # uz kādu lietotāju pāriet ar sudo
gather_facts: true gather_facts: true # Faktiski nav vajadzīgs, vienkārši pirms playbook sākas, savāc daudz dažādus faktus par sistēmu, un saliek tos variabļos.
roles: roles:
- common - common # lomas mapes nosaukums, tā kā tas rakstīts /roles/ mapē
#- name: run host-specific tasks #- name: run host-specific tasks
# hosts: all # hosts: all

View File

@@ -1,5 +1,6 @@
- name: Install basic packages - name: Install basic packages
ansible.builtin.package: ansible.builtin.package: # Šis ir moduļa FQCN (Fully Qualified Collection Name), bet var arī rakstīt vienkārši "package"
name: name:
- vim - vim
- htop - htop
@@ -18,10 +19,19 @@
dest: /etc/hosts dest: /etc/hosts
owner: root owner: root
group: root group: root
mode: 0644 mode: 0644 # Mode nosaka piekļuves atļaujas `chmod` stilā. Vienīgi jāliek sākumā ekstra nulle lai ansible saprot, ka tas ir oktāls skaitlis. Vai arī neraksta nulli, bet liek pēdiņās.
- name: Import syslog.yml - name: Import syslog.yml
import_tasks: syslog.yml import_tasks: syslog.yml # import_tasks atļauj importēt taskus no cita faila
# - name: Import snmp.yml
# import_tasks: snmp.yml
#
# - name: Import ldap.yml
# import_tasks: ldap.yml
#
# - name: Import share.yml
# import_tasks: share.yml
- name: Import webserver.yml - name: Import webserver.yml
import_tasks: webserver.yml import_tasks: webserver.yml

View File

View File

@@ -7,9 +7,10 @@
state: present state: present
- name: Remove default website - name: Remove default website
ansible.builtin.file: ansible.builtin.file: # file moduli izmanto, lai veidotu failus un mapes.
path: /var/www/html path: /var/www/html
state: absent state: absent # Var arī dzēst :D
# Tur var arī likt "directory" vai "file" un kā tālāk redzams noteikt piekļuves atļaujas.
- name: Create default site directory - name: Create default site directory
ansible.builtin.file: ansible.builtin.file:
@@ -20,7 +21,7 @@
mode: 0755 mode: 0755
- name: Copy default index - name: Copy default index
ansible.builtin.template: ansible.builtin.template: # Template strādā līdzīgi kā nākošais copy task, izņemot tas ka šis uztveris failu kā jinja2 template failu.
src: var/www/default/index.html src: var/www/default/index.html
dest: /var/www/default/index.html dest: /var/www/default/index.html
owner: www-data owner: www-data
@@ -40,7 +41,7 @@
ansible.builtin.file: ansible.builtin.file:
path: /etc/nginx/sites-enabled/default path: /etc/nginx/sites-enabled/default
src: /etc/nginx/sites-available/default src: /etc/nginx/sites-available/default
state: link state: link # izmanto arī lai veidotu symlinks
owner: root owner: root
group: root group: root
mode: 0644 mode: 0644