Kaip sukurti galimus vaidinimus ir žaidimų knygas – 5 dalis
Šioje serijos Ansible 5 dalyje paaiškinsime, kaip sukurti Ansible Plays ir Playbooks naudojant Ansible modulius.
Ansible pristatomas su atskirais scenarijais, vadinamais moduliais, kurie naudojami žaidimo knygelėse, kad būtų galima vykdyti specializuotas užduotis nuotoliniuose mazguose.
Moduliai yra naudingi automatizuojant užduotis, tokias kaip paketų valdymas, archyvavimas ir failų kopijavimas. Jie leidžia koreguoti konfigūracijos failus ir valdyti įrenginius, tokius kaip maršrutizatoriai, jungikliai, apkrovos balansavimo priemonės, ugniasienės ir daugybė kitų įrenginių.
Šios potemės tikslas – apžvelgti įvairias užduotis, kurias galima atlikti naudojant Galimus modulius:
Paketų valdymas Linux sistemoje
Paketų valdymas yra viena iš svarbiausių ir dažniausiai atliekamų sistemų administratorių užduočių. Ansible pristatomas su moduliais, kurie padeda vykdyti paketų valdymo užduotis tiek RedHat, tiek Debian pagrįstose sistemose.
Juos gana lengva atspėti. Yra apt modulis skirtas APT paketų valdymui Debian pagrindu, senasis yum modulis YUM paketų valdymui ir dnf modulis, susietas su naujesniais RHEL platinimais. .
Toliau pateikiami keli pavyzdžiai, kaip modulius galima naudoti žaidybinėje knygelėje:
1 pavyzdys: „Apache“ žiniatinklio serverio diegimas RHEL 8
---
- name: install Apache webserver
hosts: webservers
tasks:
- name: install httpd
dnf:
name: httpd
State: latest
2 pavyzdys: „Apache“ žiniatinklio serverio diegimas „Debian 10“.
---
- name: install Apache webserver
hosts: databases
tasks:
- name: install Apache webserver
apt:
name: apache2
State: latest
Aptarnavimo modulis
Aptarnavimo modulis leidžia sistemos administratoriams paleisti, sustabdyti, atnaujinti, atnaujinti ir iš naujo įkelti paslaugas sistemoje.
1 pavyzdys: „Apache“ žiniatinklio serverio paleidimas
---
- name: Start service httpd, if not started
service:
name: httpd
state: started
2 pavyzdys: „Apache“ žiniatinklio serverio sustabdymas
---
- name: Stop service httpd
service:
name: httpd
state: stopped
3 pavyzdys: tinklo sąsajos enp2s0 paleidimas iš naujo
---
- name: Restart network service for interface eth0
service:
name: network
state: restarted
args: enp2s0
Kopijuoti modulį
Kaip rodo pavadinimas, kopijavimo modulis kopijuoja failus iš vienos nuotolinio įrenginio vietos į kitą to paties įrenginio vietą.
1 pavyzdys: failų kopijavimas iš vietinio į nuotolinį Linux
---
- name: Copy file with owner and permissions
copy:
src: /etc/files/tecmint.conf
dest: /srv/tecmint.conf
owner: tecmint
group: tecmint
mode: '0644'
Žaidimo knyga nukopijuoja konfigūracijos failą tecmint.conf iš /etc/files/ katalogo į /srv/ katalogą kaip tecmint > naudotojas, turintis 0644 leidimus.
Leidimai taip pat gali būti pavaizduoti naudojant simbolinį vaizdavimą, kaip parodyta paskutinėje eilutėje.
2 pavyzdys: failų kopijavimas iš vietinio į nuotolinį Linux
---
- name: Copy file with owner and permissions
copy:
src: /etc/files/tecmint.conf
dest: /srv/tecmint.conf
owner: tecmint
group: tecmint
mode: u=rw, g=r, o=r
Ankstesniame pavyzdyje pateiktus leidimus galima pavaizduoti taip, kaip parodyta paskutinėje eilutėje, vartotojui priskiriami skaitymo ir rašymo leidimai, grupei priskiriami rašymo leidimai, o likusieji pasauliui yra priskirti skaitymo leidimai.
Failų modulis
Failų modulis naudojamas daugeliui failų operacijų, įskaitant failų ir katalogų kūrimą, failų leidimų priskyrimą ir simbolių nuorodų nustatymą.
1 pavyzdys: atlikite Linux failų leidimus
---
- name: Change file ownership, group, and permissions
file:
path: /etc/tecmint.conf
owner: tecmint
group: tecmint
mode: '0644'
Aukščiau paleidus, sukuriamas failas pavadinimu tecmint.conf kataloge /etc, nustatantis leidimus į 0644.
2 pavyzdys: ištrinkite Linux failą
---
- name: Remove file (delete file)
file:
path: /etc/tecmint.conf
state: absent
Tai pašalina arba ištrina failą tecmint.conf.
3 pavyzdys: Sukurkite katalogą
---
- name: create a directory if it doesn’t exist
file:
path: /etc/mydirectory
State: directory
mode: '0777'
Tai sukurs katalogą /etc katalogo nustatymo leidimuose į 0777.
4 pavyzdys: Rekursyvinis katalogo ištrynimas
---
- name: Recursively deleting a directory
file:
path: /etc/tecmint.conf
state: absent
Aukščiau pateiktas leidimas rekursyviai ištrina katalogą.
Lineinfile modulis
Modulis lineinfile yra naudingas, kai norite pakeisti vieną failo eilutę. Jis gali pakeisti esamą liniją.
1 pavyzdys: manipuliuokite failais Linux
---
- name: Ensure SELinux is set to enforcing mode
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=disabled
Aukščiau pateiktame paleidime SELINUX vertė nustatoma į išjungta.
SELINUX=disabled
2 pavyzdys: pakeiskite failus Linux
---
- name: Add a line to a file if the file does not exist, without passing regexp
lineinfile:
path: /etc/hosts
line: 10.200.50.51 linux-console.net
create: yes
Taip prie failo /etc/hosts pridedamas įrašas 10.200.50.51 linux-console.net.
Archyvo modulis
Modulis Archyvas naudojamas suglaudintam vieno ar kelių failų archyvui sukurti. Daroma prielaida, kad glaudinimo šaltinis yra tikslinėje paskirties vietoje. Suarchyvavus šaltinio failą vėliau galima ištrinti arba pašalinti naudojant teiginį remove=True
.
1 pavyzdys: sukurkite archyvo failą
- name: Compress directory /path/to/tecmint_dir/ into /path/to/tecmint.tgz
archive:
path: /path/to/tecmint_dir
dest: /path/to/tecmint.tgz
This compresses the /path/to/tecmint_dir directory to /path/to/tecmint.tgz
2 pavyzdys: sukurkite archyvo failą ir pašalinkite
- name: Compress regular file /path/to/tecmint into /path/to/foo.gz and remove it
archive:
path: /path/to/tecmint
dest: /path/to/tecmint.tgz
remove: yes
Aukščiau pateiktame leidime šaltinio failas /path/to/tecmint ištrinamas pasibaigus archyvavimui.
3 pavyzdys: sukurkite archyvo failą
- name: Create a bz2 archive of /path/to/tecmint
archive:
path: /path/to/tecmint
format: bz2
Tai sukuria suglaudintą failą bz2 formatu iš failo /path/to/tecmint.
Git modulis
Modulis valdo programinės įrangos saugyklų git patikras.
1 pavyzdys: patikrinkite „Git“ saugyklas
- git:
repo: 'https://foosball.example.org/path/to/repo.git'
dest: /srv/checkout
version: release-0.22
Komandų modulis
Vienas iš dažniausiai naudojamų modulių, komandos modulis įgauna komandos pavadinimą, o vėliau pateikiamas argumentų sąrašas. Komanda perduodama taip pat, kaip įvedėte „Linux“ apvalkale.
1 pavyzdys: paleiskite komandą
- name: Executing a command using the command module
command: cat helloworld.txt
2 pavyzdys: Patikrinkite nuotolinio Linux veikimo laiką
---
- name: Check the remote host uptime
hosts: servers
tasks:
- name: Execute the Uptime command over Command module
register: uptimeoutput
command: "uptime"
- debug:
var: uptimeoutput.stdout_lines
Komandų modulis nuskaito nuotolinių serverių veikimo laiką.
Kintamieji vykdymo komandų rezultatams gauti
Paprastai Galimos žaidimų knygelės naudojamos užduotims vykdyti valdomuose pagrindiniuose kompiuteriuose, nerodant išvesties komandinėje eilutėje. Tačiau yra atvejų, kai gali reikėti užfiksuoti išvestį arba rezultatus. Šiame skyriuje paaiškinsime, kaip galite užfiksuoti žaidimo knygos išvestį į kintamąjį ir vėliau ją parodyti.
Galimas registras naudojamas užduoties rezultatams užfiksuoti ir išsaugoti kintamąjį. Po to kintamajame bus užduoties stdout.
Pavyzdžiui, tarkime, kad norite patikrinti valdomų mazgų disko naudojimą atitinkamuose šakniniuose kataloguose naudodami komandą df -Th /
. Jūs ketinate naudoti modulį 'command'
komandai apibrėžti ir 'register'
, kad išsaugotumėte std išvestį kintamajame.
Norėdami parodyti komandą, kartu su stdout grąžinimo reikšme naudosite 'debug'
modulį.
---
- hosts: all
become: yes
tasks:
- name: Execute /boot usage on Hosts
command: 'df -Th /'
register: df
- debug: var=df.stdout
Dabar paleiskite žaidimų knygą. Šiuo atveju savo vadovo pavadinimą davėme check_disk_space.yml.
ansible-playbook check_disk_space.yml
Kaip matėte, visa produkcija yra sumaišyta, todėl sunku sekti.
Norėdami sulygiuoti išvestį ir lengviau skaityti, pakeiskite stdout grąžinimo vertę į stdout_lines.
---
- hosts: all
become: yes
tasks:
- name: Execute /boot usage on Hosts
command: 'df -Th /'
register: df
- debug: var=df.stdout_lines
Norėdami valdyti paleidimo vykdymą, naudokite sąlygas
Kaip ir programavimo kalbose, sąlyginiai teiginiai naudojami, kai galimas daugiau nei vienas rezultatas. Pažvelkime į kai kuriuos dažniausiai naudojamus sąlyginius teiginius Ansible žaidimų knygelėse.
Kai pareiškimas
Kartais galbūt norėsite atlikti užduotis konkrečiuose mazguose, o ne kituose. Sąlyginį teiginį 'when'
gana lengva naudoti ir įdiegti žaidimo knygoje. Kai naudojate sąlygą 'when'
, tiesiog deklaruokite sąlygą šalia sakinio, kaip parodyta:
when: condition
Kai sąlyga įvykdoma, užduotis atliekama nuotolinėje sistemoje.
Pažiūrėkime kelis pavyzdžius:
1 pavyzdys: „When Operator“ naudojimas
---
- hosts: all
tasks:
- name: Install Nginx on Debian
apt: name=nginx state=present
when: ansible_os_family == “Debian”
Aukščiau pateiktame žaidime įdiegiamas Nginx žiniatinklio serveris pagrindiniuose kompiuteriuose, kuriuose veikia „Debian“ paskirstymo šeima.
Taip pat galite naudoti operatorius OR
ir AND
kartu su sąlyginiu teiginiu.
2 pavyzdys: IR operatoriaus naudojimas su Kada
---
- hosts: all
tasks:
- name: Install Nginx on Debian
apt: name=nginx state=present
when: ansible_os_family == “Debian” and
ansible_distribution_version == “18.04”
Kai naudojate operatorių AND
, abu teiginiai turi būti patenkinti, kad užduotis būtų įvykdyta.
Aukščiau pateiktame žaidime „Nginx“ įdiegiamas mazguose, kuriuose veikia „Debian“ šeimos OS, kurios versija yra 18.04. Akivaizdu, kad tai bus Ubuntu 18.04.
3 pavyzdys: OR operatoriaus naudojimas su Kada
Naudojant operatorių OR
, užduotis vykdoma, jei įvykdoma kuri nors iš sąlygų.
---
- hosts: all
tasks:
- name: Install Nginx on Debian
apt: name=nginx state=present
when: ansible_os_family == “Debian” or
Ansible_os_family == “SUSE”
Aukščiau pateiktame žaidime įdiegiami „Nginx“ žiniatinklio serveriai „Debian“ arba „SUSE“ šeimos OS arba abiejose.
PASTABA: tikrindami sąlygą visada naudokite dvigubos lygybės ženklą ==
.
Sąlygos kilpose
Sąlyginės sąlygos taip pat gali būti naudojamos kilpoje. Tarkime, kad turite kelių paketų, kuriuos reikia įdiegti nuotoliniuose mazguose, sąrašą.
Toliau pateiktoje knygelėje yra masyvas, vadinamas paketais, kuriame yra paketų, kuriuos reikia įdiegti, sąrašas. Šios užduotys bus atliekamos viena po kitos, jei sąlyga būtina nustatyta į Tiesa.
---
- name: Install Software packages
hosts: all
vars:
packages:
• name: nginx
required: True
• name: mysql
required: True
• name: apache
required: False
tasks:
• name: Install “{{ item.name }}”on Debian
apt:
name: “{{ item.name }}”
state: present
When: item.required == True
loop: “{{ packages }}”
Konfigūruoti klaidų tvarkymą
Kartais užduotys nepavyksta vykdant žaidimų knygeles. Tarkime, kad vykdote 5 užduotis 3 serveriuose, kaip parodyta toliau pateiktoje knygelėje. Jei įvyksta klaida atliekant 3 užduotį (paleidžiant MySQL) 2 serveryje, Ansible nustos vykdyti likusias užduotis 2 serveryje ir bandys užbaigti likusias užduotis likusiuose serveriuose.
---
- name: Install Software packages
hosts: server1, server2, server3
tasks:
- name: Install dependencies
<< some code >>
- name: Install MySQL database
<< some code >>
- name: Start MySQL
<< some code >>
- name: Install Nginx
<< some code >>
- name: Start Nginx
<< some code >>
Jei norite nuoseklaus žaidimo knygos vykdymo, pavyzdžiui, sustabdykite jo vykdymą, jei vienas iš serverių sugestų, pridėkite parinktį.
---
- name: Install Software packages
hosts: server1, server2, server3
any_errors_fatal: true
tasks:
Tokiu būdu, jei viena užduotis nepavyksta viename serveryje, Ansible sustabdys visos žaidimo knygos vykdymą visuose serveriuose ir išeis.
Jei norite, kad žaidimų knygelė nepaisytų klaidų ir toliau vykdytų likusias užduotis, naudokite parinktį nepaisyti_klaidų: tiesa.
---
- name: Install Software packages
hosts: server1, server2, server3
tasks:
- name: Install dependencies
<< some code >>
ignore_errors: True
Sukurkite žaidimų knygeles, kad sukonfigūruotumėte sistemas į nurodytą būseną
Šiame skyriuje apžvelgiame keletą papildomų parinkčių, kurios galimos vykdant žaidimų knygą.
Pradėkime nuo Patikrinimo režimo arba Sausojo paleidimo parinkties. Sausojo paleidimo arba tikrinimo režimo parinktis naudojama paleidžiant žaidimų knygą, siekiant patikrinti, ar nebus klaidų ir ar bus kokių nors pakeitimų, kurie bus atlikti valdomose prieglobose. Tačiau jis neatlieka jokių nuotolinių mazgų pakeitimų.
Pavyzdžiui, norėdami sausai paleisti knygą pavadinimu httpd.yml
, kuri įdiegia ir paleidžia „Apache“ žiniatinklio serverio paleidimą:
ansible-playbook httpd.yml --check
Kita parinktis, kurią turime peržiūrėti, yra parinktis --start-at-task
. Tai naudojama nurodant užduoties, nuo kurios turėtų prasidėti arba prasidėti vadų knygelė, pavadinimą.
Paimkime pavyzdį: toliau pateiktoje knygelėje nurodytos 2 užduotys: Pirmajame paleidime įdiegiamas „Apache“ žiniatinklio serveris, o antrasis – „htop“ programa.
---
- name: Install httpd
hosts: all
tasks:
yum:
name: httpd
state: Installed
- name: Install htop
yum:
name: htop
state: started
Jei norite praleisti „Apache“ žiniatinklio serverio diegimą ir vietoj to įdiegti „htop“ paslaugų programą, paleiskite:
ansible-playbook playbook.yml --start-at-task “Install htop”
Galiausiai, galite pažymėti užduotis ar pjeses, pridėdami parinktį žymos prie savo žaidimų knygelės, kaip parodyta. Tai praverčia, kai turite gana didelę plano knygą ir norite vykdyti konkrečias užduotis iš visos knygos.
---
- name: Install httpd
tags: Install and start
hosts: all
tasks:
yum:
name: httpd
state: Installed
tags: Install
• service:
name: httpd
state: started
ansible-playbook playbook.yml -tags "Install"
Jei norite praleisti žymas, naudokite parinktis --skip-tags
, kaip parodyta.
ansible-playbook playbook.yml --skip-tags "Install"
Išvada
Šioje temoje apžvelgėme dažniausiai naudojamus Ansible modulius, kaip gauti stdout iš žaidimo knygos vykdymo analizei, naudoti sąlyginius žaidimo knygelėje ir kaip valdyti klaidas, kurios gali atsirasti vykdant. užduotys. Galiausiai apibendriname žaidimų knygelių konfigūraciją ir tai, kaip galite naudoti papildomas parinktis, kad nuspręstumėte, kurias užduotis vykdyti, jei neketinate paleisti visos žaidimo knygos.