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/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.