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ā)
#### `/inventory.yml`
### /inventory.yml
Inventory failā pieraksta (Un sagrupē!) visus aktuālos serverus, to IP adreses,
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
#### `/roles/`
### /roles/
Š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`
Faktiski šajā failā nosaka kādi roles attiecās uz kādiem hostiem.
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.
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.
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,
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.
Šim nolūkam izmanto *handlers* un *notify*.
##### Handlers
**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,
@@ -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`)
**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
Ja task beidzās kā `CHANGED`, tad handleris tiks palaists,
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,
tad jāizmanto ansible `flush_handlers` task.
@@ -80,10 +81,47 @@ 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ā.
#### 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?
@@ -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 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 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ā)
- `-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
hosts: all
become: true
become_user: root
gather_facts: true
hosts: all # uz kādu grupu/hostiem attiecās (all ir automātiski veidota grupa kas satur visus hostus)
become: true # vai izmantos sudo lai visu laistu kā root
become_user: root # uz kādu lietotāju pāriet ar sudo
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:
- common
- common # lomas mapes nosaukums, tā kā tas rakstīts /roles/ mapē
#- name: run host-specific tasks
# hosts: all

View File

@@ -1,5 +1,6 @@
- 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:
- vim
- htop
@@ -18,10 +19,19 @@
dest: /etc/hosts
owner: 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
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
import_tasks: webserver.yml

View File

View File

@@ -7,9 +7,10 @@
state: present
- name: Remove default website
ansible.builtin.file:
ansible.builtin.file: # file moduli izmanto, lai veidotu failus un mapes.
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
ansible.builtin.file:
@@ -20,7 +21,7 @@
mode: 0755
- 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
dest: /var/www/default/index.html
owner: www-data
@@ -40,7 +41,7 @@
ansible.builtin.file:
path: /etc/nginx/sites-enabled/default
src: /etc/nginx/sites-available/default
state: link
state: link # izmanto arī lai veidotu symlinks
owner: root
group: root
mode: 0644