Weboldal keresés

Hogyan készítsünk lehetséges színdarabokat és játékkönyveket – 5. rész


Az Ansible sorozat ezen 5. részében elmagyarázzuk, hogyan hozhat létre Ansible Plays és Playbooks-okat az Ansible modulok segítségével.

Az Ansible különálló szkriptekkel, úgynevezett modulokkal érkezik, amelyeket játékkönyvekben használnak speciális feladatok távoli csomópontokon való végrehajtására.

A modulok hasznosak olyan feladatok automatizálásához, mint a csomagkezelés, a fájlok archiválása és másolása, hogy csak néhányat említsünk. Lehetővé teszik a konfigurációs fájlok módosítását és az olyan eszközök kezelését, mint az útválasztók, kapcsolók, terheléselosztók, tűzfalak és számos egyéb eszköz.

Ennek az altémának az a célja, hogy áttekintést adjon azokról a különféle feladatokról, amelyek az Lehetséges modulok segítségével végezhetők el:

Csomagkezelés Linux alatt

A csomagkezelés a rendszergazdák egyik legfontosabb és leggyakrabban végzett feladata. Az Ansible olyan modulokkal érkezik, amelyek segítenek csomagkezelési feladatok végrehajtásában RedHat és Debian alapú rendszereken egyaránt.

Viszonylag könnyű kitalálni. Létezik az apt modul az APT csomagkezeléshez Debian alapúhoz, a régi yum modul a YUM csomagkezeléshez és a dnf modul az újabb RHEL disztribúciókhoz társítva. .

Az alábbiakban néhány példa látható arra, hogyan használhatók a modulok egy játékkönyvben:

1. példa: Az Apache webszerver telepítése RHEL 8-ra

---
- name: install Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         dnf:  
          name: httpd  
          State: latest

2. példa: Az Apache webszerver telepítése Debian 10 rendszeren

---
- name: install Apache webserver
  hosts: databases

  tasks:
       - name: install Apache webserver
         apt:  
          name: apache2  
          State: latest

Szerviz modul

A szervizmodul lehetővé teszi a rendszergazdák számára a szolgáltatások elindítását, leállítását, frissítését, frissítését és újratöltését a rendszeren.

1. példa: Az Apache webszerver indítása

---
- name: Start service httpd, if not started
  service:
    name: httpd
    state: started

2. példa: Az Apache webszerver leállítása

---
- name: Stop service httpd
  service:
    name: httpd
    state: stopped

3. példa: Az enp2s0 hálózati interfész újraindítása

---
- name: Restart network service for interface eth0
  service:
    name: network
    state: restarted
    args: enp2s0

Modul másolása

Ahogy a neve is sugallja, a másolómodul a fájlokat a távoli gép egyik helyéről egy másik helyre másolja ugyanazon a gépen.

1. példa: Fájlok másolása helyiről távoli Linuxra

---
- name: Copy file with owner and permissions
  copy:
    src: /etc/files/tecmint.conf
    dest: /srv/tecmint.conf
    owner: tecmint
    group: tecmint
    mode: '0644'

A játékkönyv a /etc/files/ könyvtárból a /srv/ könyvtárba másolja a tecmint.conf konfigurációs fájlt tecmint néven. > 0644 jogosultsággal rendelkező felhasználó.

Az engedélyek szimbolikus ábrázolással is ábrázolhatók, az utolsó sorban látható módon.

2. példa: Fájlok másolása helyiről távoli Linuxra

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

Az előző példában szereplő engedélyek az utolsó sorban látható módon ábrázolhatók. A felhasználóhoz olvasási és írási jogosultság, a csoporthoz írási engedélyek, a többi pedig a világhoz olvasási engedélyek vannak hozzárendelve.

Fájl modul

A fájlmodul számos fájlművelet végrehajtására szolgál, beleértve a fájlok és könyvtárak létrehozását, a fájlengedélyek hozzárendelését és a szimbolikus hivatkozások beállítását.

1. példa: Végezze el a Linux fájlengedélyeket

---
- name: Change file ownership, group, and permissions
  file:
    path: /etc/tecmint.conf
    owner: tecmint
    group: tecmint
    mode: '0644'

A fenti lejátszás létrehoz egy tecmint.conf nevű fájlt az /etc könyvtárban, amely a 0644 engedélyeket állítja be.

2. példa: Linux-fájl törlése

---
- name: Remove file (delete file)
  file:
    path: /etc/tecmint.conf
    state: absent

Ezzel eltávolítja vagy törli a tecmint.conf fájlt.

3. példa: Hozzon létre egy könyvtárat

---
- name: create a directory if it doesn’t exist
  file:
    path: /etc/mydirectory
    State: directory
    mode: '0777'

Ezzel létrehoz egy könyvtárat a /etc könyvtárban, amely a 0777 engedélyeket állítja be.

4. példa: Könyvtár rekurzív törlése

---
- name: Recursively deleting a  directory
  file:
    path: /etc/tecmint.conf
    state: absent

A fenti lejátszás rekurzív módon törli a könyvtárat.

Lineinfile modul

A lineinfile modul akkor hasznos, ha egy fájl egyetlen sorát szeretné módosítani. Egy meglévő vonalat helyettesíthet.

1. példa: Fájlok kezelése Linuxban

---
 - name: Ensure SELinux is set to enforcing mode
  lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=disabled

A fenti lejátszás a SELINUX értéket disabled-ra állítja.

SELINUX=disabled

2. példa: Fájlok módosítása Linuxban

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

Ezzel hozzáadja a 10.200.50.51 linux-console.net bejegyzést az /etc/hosts fájlhoz.

Archív modul

Az Archívum modul egyetlen vagy több fájl tömörített archívumának létrehozására szolgál. Azt feltételezi, hogy a tömörítési forrás létezik a célhelyen. Az archiválás után a forrásfájl később törölhető vagy eltávolítható a remove=True utasítással.

1. példa: Archív fájl létrehozása

- 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. példa: Hozzon létre egy archív fájlt és távolítsa el

- 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

A fenti lejátszásban az archiválás befejezése után a forrásfájl /path/to/tecmint törlődik.

3. példa: Archív fájl létrehozása

- name: Create a bz2 archive of /path/to/tecmint
  archive:
    path: /path/to/tecmint
    format: bz2

Ezzel létrehoz egy tömörített fájlt bz2 formátumban a /path/to/tecmint fájlból.

Git modul

A modul kezeli a szoftvertárak git-pénztárait.

1. példa: Ellenőrizze a Git Repositoires-t

- git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    version: release-0.22

Parancs modul

Az egyik leggyakrabban használt modul, a command modul a parancs nevét veszi fel, majd később argumentumok listáját követi. A parancsot ugyanúgy adjuk át, ahogyan egy Linux shellbe írjuk be.

1. példa: Futtasson egy parancsot

- name: Executing a command using the command module
  command: cat helloworld.txt

2. példa: Ellenőrizze a távoli Linux üzemidejét

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

A parancsmodul lekéri a távoli kiszolgálók üzemidejét.

Változók a futási parancsok eredményeinek lekéréséhez

Általában az Ansible játékkönyveket arra használják, hogy feladatokat hajtsanak végre a felügyelt gazdagépeken anélkül, hogy a kimenetet a parancssorban jelenítenék meg. Vannak azonban olyan esetek, amikor szükség lehet a kimenet vagy az eredmények rögzítésére. Ebben a részben végigvezetjük, hogyan rögzítheti a játékkönyv kimenetét egy változóban, és hogyan jelenítheti meg később.

Egy lehetséges regiszter egy feladat kimenetének rögzítésére és változó mentésére szolgál. A változó ezután a feladat stdoutját fogja tartalmazni.

Tegyük fel például, hogy a megfelelő gyökérkönyvtárak felügyelt csomópontjainak lemezhasználatát szeretné ellenőrizni a df -Th / paranccsal. A parancs meghatározásához a 'command' modult, a 'register' modult pedig az std kimenet változóba mentéséhez használja.

A parancs megjelenítéséhez használja a 'debug' modult az stdout visszatérési értéke mellett.

---

 - hosts: all
   become: yes

   tasks:
     - name: Execute /boot usage on Hosts
       command: 'df -Th /'
       register: df

     - debug: var=df.stdout

Most pedig futtassuk a játékkönyvet. Ebben az esetben a forgatókönyvünket a check_disk_space.yml elnevezéssel láttuk el.

ansible-playbook check_disk_space.yml

Amint láthatta, a kimenet összevissza van, és megnehezíti a követést.

A kimenet igazítása és az olvashatóság megkönnyítése érdekében cserélje ki az stdout visszatérési értéket az stdout_lines értékre.

---

 - hosts: all
   become: yes

   tasks:
     - name: Execute /boot usage on Hosts
       command: 'df -Th /'
       register: df

     - debug: var=df.stdout_lines

Használja a Feltételeket a játék végrehajtásának vezérléséhez

Csakúgy, mint a programozási nyelvekben, a feltételes utasítások akkor használatosak, ha egynél több eredmény lehetséges. Vessünk egy pillantást az Ansible játékkönyvekben gyakran használt feltételes kijelentésekre.

Amikor nyilatkozat

Néha előfordulhat, hogy bizonyos csomópontokon szeretne feladatokat végrehajtani, másokon nem. A 'when' feltételes utasítás meglehetősen könnyen használható és implementálható egy játékkönyvben. A 'when' záradék használatakor egyszerűen deklarálja a záradék melletti feltételt, amint az látható:

when: condition

Ha a feltétel teljesül, akkor a feladat a távoli rendszeren kerül végrehajtásra.

Nézzünk meg néhány példát:

1. példa: A When Operator használata

---
- hosts: all

  tasks:
  - name: Install Nginx on Debian
     apt: name=nginx state=present
     when: ansible_os_family == “Debian”

A fenti játék az Nginx webszervert telepíti a Debian disztribúciók családját futtató gazdagépekre.

Használhatja az OR és az AND operátort is az if feltételes utasítás mellett.

2. példa: Az ÉS operátor használata a When funkcióval

---
- hosts: all

  tasks:
  - name: Install Nginx on Debian
     apt: name=nginx state=present
     when: ansible_os_family == “Debian” and
           ansible_distribution_version == “18.04”

Az AND operátor használatakor mindkét utasításnak teljesülnie kell a feladat végrehajtásához.

A fenti játék telepíti az Nginx-et a 18.04-es verziójú Debian operációs rendszert futtató csomópontokra. Nyilvánvalóan ez az Ubuntu 18.04 lesz.

3. példa: A VAGY operátor használata a When funkcióval

Az OR operátorral a feladat végrehajtásra kerül, ha valamelyik feltétel teljesül.

---
- hosts: all

  tasks:
  - name: Install Nginx on Debian
     apt: name=nginx state=present
     when: ansible_os_family == “Debian” or
	      Ansible_os_family == “SUSE”

A fenti játék telepíti az Nginx webszervereket a Debian vagy a SUSE operációs rendszer családra, vagy mindkettőre.

MEGJEGYZÉS: Mindig ügyeljen arra, hogy a == kettős egyenlőségjelet használja egy feltétel tesztelésekor.

Feltételek hurokban

A feltételes feltételek ciklusban is használhatók. Tegyük fel például, hogy van egy listája több olyan csomagról, amelyeket telepíteni kell a távoli csomópontokra.

Az alábbi útmutatóban van egy csomagok nevű tömbünk, amely a telepítendő csomagok listáját tartalmazza. Ezeket a feladatokat egymás után hajtják végre, ha a szükséges záradék Igaz értékre van állítva.

---
 - 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 }}”  

Hibakezelés konfigurálása

Néha a feladatok meghiúsulnak a játékkönyvek futtatásakor. Tételezzük fel, hogy 5 feladatot futtat 3 szerveren, amint az az alábbi útmutatóban látható. Ha hiba történik a 3. feladatnál (MySQL indítása) a 2. kiszolgálón, az Ansible leállítja a 2. kiszolgálón lévő fennmaradó feladatok végrehajtását, és megpróbálja befejezni a többi kiszolgálón a fennmaradó feladatokat.

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

Ha konzisztenciát szeretne a játékkönyv végrehajtásában, például állítsa le a játékkönyv végrehajtását, ha valamelyik szerver meghibásodik, adja hozzá a lehetőséget.

---
 - name: Install Software packages
   hosts: server1, server2, server3
   any_errors_fatal:  true
   tasks:

Ily módon, ha egy feladat meghiúsul egy szerveren, az Ansible leállítja a teljes játékkönyv végrehajtását az összes szerveren, és kilép.

Ha azt szeretné, hogy a forgatókönyv figyelmen kívül hagyja a hibákat, és folytassa a többi feladatsor végrehajtását, akkor használja az ignore_errors: True beállítást.

---
 - name: Install Software packages
   hosts: server1, server2, server3
   tasks:
- name: Install dependencies
<< some code >>
     ignore_errors: True

Hozzon létre útmutatókat a rendszerek meghatározott állapotba való konfigurálásához

Ebben a részben megvizsgálunk néhány további lehetőséget, amelyek a játékkönyv futtatásakor elérhetők.

Kezdjük az Ellenőrzés vagy a Száraz futás opcióval. A száraz futás vagy az ellenőrzés mód opciót a játékkönyv futtatásakor használják annak ellenőrzésére, hogy nem találnak-e hibákat, és vannak-e változtatások a felügyelt gazdagépeken. Ez azonban nem módosít a távoli csomópontokon.

Például egy httpd.yml nevű játékkönyv száraz futtatásához, amely telepíti és elindítja az Apache webszerver futását:

ansible-playbook httpd.yml --check

A másik lehetőség, amit meg kell néznünk, a --start-at-task opció. Ez akkor használatos, ha megadja annak a feladatnak a nevét, amelynél a forgatókönyvnek el kell kezdődnie.

Vegyünk egy példát: Az alábbi útmutató 2 feladatot ír le: Az első játék az Apache webszervert, a második pedig a htop segédprogramot telepíti.

---
 - name: Install httpd

   hosts: all
   tasks:
    yum:	 
name: httpd
     state: Installed

- name: Install htop

      yum:  
      name: htop
      state: started

Ha ki szeretné hagyni az Apache webszerver telepítését, és helyette telepíteni szeretné a htop segédprogramot, futtassa:

ansible-playbook playbook.yml --start-at-task “Install htop”

Végül megcímkézheti feladatait vagy színdarabjait, ha hozzáadja a címkék opciót a játékkönyvhöz, ahogy az ábra mutatja. Ez akkor hasznos, ha elég nagy játékkönyve van, és konkrét feladatokat szeretne futtatni a teljes játékkönyvből.

---
 - 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"

A címkék elhagyásához használja a --skip-tags opciókat az ábrán látható módon.

ansible-playbook playbook.yml --skip-tags "Install"
Következtetés

Ebben a témában végigvezettük az Ansible leggyakrabban használt moduljain, hogyan lehet stdout-ot lekérni egy playbook végrehajtásából elemzés céljából, hogyan lehet feltételes feltételeket használni a játékfüzetben, és hogyan lehet kezelni a futás közben előforduló hibákat. feladatokat. Végül áttekintettük a forgatókönyvek konfigurációját, és azt, hogy hogyan használhat további opciókat annak eldöntésére, hogy mely feladatokat kell futtatni, ha nem kívánja futtatni a teljes játékkönyvet.