Kuinka luoda mahdollisia näytelmiä ja leikkikirjoja - Osa 5


Tässä Ansible-sarjan osassa 5 selitämme, kuinka luodaan Ansible Plays ja Playbooks Ansible-moduuleilla.

Ansible toimitetaan erillisillä skripteillä, joita kutsutaan moduuleiksi ja joita käytetään pelikirjoissa erikoistehtävien suorittamiseen etäsolmuissa.

Moduulit ovat hyödyllisiä automatisoitaessa tehtäviä, kuten pakettien hallintaa, tiedostojen arkistointia ja kopiointia. Niiden avulla voit muokata asetustiedostoja ja hallita laitteita, kuten reitittimiä, kytkimiä, kuormituksen tasaajia, palomuureja ja monia muita laitteita.

Tämän ala-aiheen tavoitteena on antaa sinulle yleiskatsaus erilaisiin tehtäviin, jotka voidaan suorittaa Aiheellisilla moduuleilla:

Paketinhallinta Linuxissa

Paketinhallinta on yksi tärkeimmistä ja yleisimmistä järjestelmänvalvojien tehtävistä. Ansible toimitetaan moduulien kanssa, jotka auttavat sinua suorittamaan paketinhallintatehtäviä sekä RedHat- että Debian-pohjaisissa järjestelmissä.

Ne on suhteellisen helppo arvata. Siellä on apt-moduuli APT-pakettien hallintaan Debian-pohjaiselle, vanha yum-moduuli YUM-pakettien hallintaan ja dnf-moduuli liitetty uudempiin RHEL-jakeluihin. .

Alla on muutamia esimerkkejä siitä, kuinka moduuleja voidaan käyttää pelikirjassa:

Esimerkki 1: Apache-verkkopalvelimen asentaminen RHEL 8:aan

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

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

Esimerkki 2: Apache-verkkopalvelimen asentaminen Debian 10:een

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

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

Palvelumoduuli

Palvelumoduulin avulla järjestelmänvalvojat voivat käynnistää, pysäyttää, päivittää, päivittää ja ladata järjestelmän palveluita.

Esimerkki 1: Apache-verkkopalvelimen käynnistäminen

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

Esimerkki 2: Apache-verkkopalvelimen pysäyttäminen

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

Esimerkki 3: Verkkoliitännän enp2s0 uudelleenkäynnistys

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

Kopioi moduuli

Kuten nimestä voi päätellä, kopiointimoduuli kopioi tiedostot yhdestä paikasta etäkoneella eri paikkaan samalla koneella.

Esimerkki 1: Tiedostojen kopioiminen paikallisesta Linuxiin

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

Pelikirja kopioi määritystiedoston tecmint.conf hakemistosta /etc/files/ hakemistoon /srv/ nimellä tecmint > käyttäjä, jolla on 0644-oikeudet.

Käyttöoikeudet voidaan esittää myös käyttämällä symbolista esitystä, kuten viimeisellä rivillä näkyy.

Esimerkki 2: Tiedostojen kopioiminen paikallisesta Linuxiin

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

Edellisen esimerkin käyttöoikeudet voidaan esittää viimeisellä rivillä esitetyllä tavalla. Käyttäjälle on annettu luku- ja kirjoitusoikeudet, ryhmälle on määritetty kirjoitusoikeudet ja loput maailmalle on annettu lukuoikeudet.

Tiedosto moduuli

Tiedostomoduulia käytetään moniin tiedostotoimintoihin, kuten tiedostojen ja hakemistojen luomiseen, tiedostojen käyttöoikeuksien määrittämiseen ja symbolilinkkien asettamiseen.

Esimerkki 1: Suorita Linux-tiedostojen käyttöoikeudet

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

Yllä oleva toisto luo tiedoston nimeltä tecmint.conf /etc-hakemistoon, jossa käyttöoikeudet asetetaan arvoon 0644.

Esimerkki 2: Poista Linux-tiedosto

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

Tämä poistaa tai poistaa tiedoston tecmint.conf.

Esimerkki 3: Luo hakemisto

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

Tämä luo hakemiston /etc-hakemistoon, jossa käyttöoikeudet ovat 0777.

Esimerkki 4: Poista hakemisto rekursiivisesti

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

Yllä oleva toisto poistaa rekursiivisesti hakemiston.

Lineinfile-moduuli

Lineinfile-moduuli on hyödyllinen, kun haluat muuttaa tiedoston yhtä riviä. Se voi korvata olemassa olevan linjan.

Esimerkki 1: Käsittele tiedostoja Linuxissa

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

Yllä oleva toisto asettaa SELINUX-arvon pois käytöstä.

SELINUX=disabled

Esimerkki 2: Muuta tiedostoja Linuxissa

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

Tämä lisää merkinnän 10.200.50.51 linux-console.net /etc/hosts-tiedostoon.

Arkistomoduuli

Arkisto-moduulia käytetään pakatun arkiston luomiseen yhdestä tai useista tiedostoista. Se olettaa, että pakkauslähde on olemassa kohdekohteessa. Arkistoinnin jälkeen lähdetiedosto voidaan myöhemmin poistaa tai poistaa käskyllä remove=True.

Esimerkki 1: Luo arkistotiedosto

- 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

Esimerkki 2: Luo arkistotiedosto ja poista

- 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

Yllä olevassa toistossa lähdetiedosto /path/to/tecmint poistetaan, kun arkistointi on valmis.

Esimerkki 3: Luo arkistotiedosto

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

Tämä luo pakatun tiedoston bz2-muodossa /path/to/tecmint-tiedostosta.

Git-moduuli

Moduuli hallitsee ohjelmistovarastojen git-maksuja.

Esimerkki 1: Tarkista Git-varastot

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

Komentomoduuli

Yksi yleisimmin käytetyistä moduuleista, komento-moduuli ottaa komennon nimen ja myöhemmin luettelon argumenteista. Komento välitetään samalla tavalla kuin kirjoitat Linux-kuoreen.

Esimerkki 1: Suorita komento

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

Esimerkki 2: Tarkista Remote Linuxin käyttöaika

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

Komentomoduuli noutaa etäpalvelimien käyttöajan.

Muuttujat suoritettavien komentojen tulosten hakemiseen

Yleensä Mahdollisia pelikirjoja käytetään tehtävien suorittamiseen hallituilla isännillä näyttämättä tulostetta komentorivillä. Joissakin tapauksissa saatat kuitenkin joutua kaappaamaan tulosteen tai tulokset. Tässä osiossa opastamme sinut läpi, kuinka voit tallentaa pelikirjan tulosteen muuttujaan ja näyttää sen myöhemmin.

Mahdollista rekisteriä käytetään tehtävän tulosteen sieppaamiseen ja muuttujan tallentamiseen. Tämän jälkeen muuttuja sisältää tehtävän stdout-arvon.

Oletetaan esimerkiksi, että haluat tarkistaa vastaavien juurihakemistojen hallittujen solmujen käytön df -Th /-komennolla. Aiot käyttää 'command'-moduulia komennon määrittämiseen ja 'register'-moduulia tallentaaksesi std-tulosteen muuttujaksi.

Voit näyttää komennon käyttämällä 'debug'-moduulia stdout-palautusarvon rinnalla.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout

Ajellaan nyt pelikirjaa. Tässä tapauksessa olemme antaneet ohjekirjallemme nimen check_disk_space.yml.

ansible-playbook check_disk_space.yml

Kuten olet nähnyt, tulos on kaikki sekaisin ja vaikeuttaa seuraamista.

Tasaa tulosteen ja helpottaa lukemista korvaamalla stdout-palautusarvo arvolla stdout_lines.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout_lines

Käytä Ehtoja ohjataksesi toiston suorittamista

Aivan kuten ohjelmointikielissä, ehdollisia lauseita käytetään, kun useampi kuin yksi tulos on mahdollinen. Katsotaanpa joitain Ansible playbookeissa yleisesti käytettyjä ehdollisia lauseita.

Kun lausunto

Joskus saatat haluta suorittaa tehtäviä tietyille solmuille, etkä muille. 'when'-ehtolauseketta on melko helppo käyttää ja toteuttaa pelikirjassa. Käytettäessä 'when'-lausetta yksinkertaisesti ilmoittaa lauseen vieressä oleva ehto kuvan mukaisesti:

when: condition

Kun ehto täyttyy, tehtävä suoritetaan etäjärjestelmässä.

Katsotaanpa muutama esimerkki:

Esimerkki 1: When Operatorin käyttö

---
- hosts: all

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

Yllä oleva toisto asentaa Nginx-verkkopalvelimen isännille, jotka käyttävät Debian-jakeluperhettä.

Voit myös käyttää OR- ja AND-operaattoria ehtolausekkeen kun rinnalla.

Esimerkki 2: AND-operaattorin käyttö Milloin

---
- hosts: all

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

Kun käytetään AND-operaattoria, molempien lauseiden on täytettävä tehtävän suorittaminen.

Yllä oleva toisto asentaa Nginxin solmuihin, joissa on Debian-perheen käyttöjärjestelmä, jonka versio on 18.04. Ilmeisesti tämä on Ubuntu 18.04.

Esimerkki 3: OR-operaattorin käyttäminen Kun kanssa

OR-operaattorilla tehtävä suoritetaan, jos jompikumpi ehdoista täyttyy.

---
- hosts: all

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

Yllä oleva toisto asentaa Nginx-verkkopalvelimet joko Debian- tai SUSE-perheen käyttöjärjestelmiin tai molempiin.

HUOMAA: Varmista aina, että käytät kaksoisyhtälömerkkiä ==, kun testaat ehtoa.

Ehdot silmukoissa

Ehdollisia voidaan käyttää myös silmukassa. Oletetaan esimerkiksi, että sinulla on luettelo useista paketeista, jotka on asennettava etäsolmuihin.

Alla olevassa ohjekirjassa on joukko nimeltä paketit, joka sisältää luettelon asennettavista paketeista. Nämä tehtävät suoritetaan peräkkäin, jos pakollinen-lauseke on True.

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

Määritä virheiden käsittely

Joskus tehtävät epäonnistuvat leikkikirjoja ajettaessa. Oletetaan, että suoritat 5 tehtävää kolmella palvelimella alla olevan ohjekirjan mukaisesti. Jos tehtävässä 3 (käynnistetään MySQL) palvelimella 2 tapahtuu virhe, Ansible lopettaa jäljellä olevien tehtävien suorittamisen palvelimella 2 ja yrittää suorittaa loput tehtävät muilla palvelimilla.

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

Jos haluat johdonmukaista pelikirjan suorittamista, esimerkiksi lopeta pelikirjan suorittaminen, jos jokin palvelimista epäonnistuu, lisää vaihtoehto.

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

Tällä tavalla, jos yksi tehtävä epäonnistuu yhdellä palvelimella, Ansible lopettaa koko pelikirjan suorittamisen kaikilla palvelimilla ja poistuu.

Jos haluat ohjekirjan ohittavan virheet ja jatkavan jäljellä olevien tehtävien suorittamista, käytä ignore_errors: True -vaihtoehtoa.

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

Luo pelikirjoja järjestelmien määrittämiseksi tiettyyn tilaan

Tässä osiossa tarkastellaan joitain lisävaihtoehtoja, jotka ovat käytettävissä pelikirjaa käytettäessä.

Aloitetaan Tarkistus- tai Kuivakäynti-vaihtoehdolla. Kuivakäynnistys- tai tarkistustila-vaihtoehtoa käytetään pelikirjaa suoritettaessa tarkistamaan, havaitaanko virheitä ja tehdäänkö hallittuihin isänteihin muutoksia. Se ei kuitenkaan tee mitään muutoksia etäsolmuihin.

Jos haluat esimerkiksi ajaa kuivaa pelikirjaa nimeltä httpd.yml, joka asentaa ja käynnistää Apache-verkkopalvelinajon:

ansible-playbook httpd.yml --check

Toinen vaihtoehto, jota meidän on tarkasteltava, on vaihtoehto --start-at-task. Tätä käytetään määritettäessä tehtävän nimi, josta pelikirjan tulee alkaa tai alkaa.

Otetaan esimerkki: Alla oleva ohjekirja sisältää 2 tehtävää: Ensimmäinen toisto asentaa Apache-verkkopalvelimen ja toinen asentaa htop-apuohjelman.

---
 - name: Install httpd

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

- name: Install htop

      yum:  
      name: htop
      state: started

Jos haluat ohittaa Apache-verkkopalvelimen asennuksen ja asentaa sen sijaan htop-apuohjelman, suorita:

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

Lopuksi voit merkitä tehtäväsi tai näytelmäsi lisäämällä tunnisteet-vaihtoehdon pelikirjaasi kuvan osoittamalla tavalla. Tämä on kätevää, kun sinulla on melko suuri pelikirja ja haluat suorittaa tiettyjä tehtäviä koko pelikirjasta.

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

Voit jättää tunnisteet pois käyttämällä --skip-tags-vaihtoehtoja kuvan mukaisesti.

ansible-playbook playbook.yml --skip-tags "Install"
Johtopäätös

Tässä aiheessa otamme sinut läpi Ansiblen yleisesti käytetyt moduulit, kuinka noutaa stdout pelikirjan suorituksesta analysointia varten, käytämme ehtoja pelikirjassa ja kuinka hallita virheitä, joita voi esiintyä suorituksen aikana. tehtäviä. Lopuksi esitimme uudelleen pelikirjojen määritykset ja kuinka voit käyttää lisäasetuksia päättääksesi, mitkä tehtävät suoritetaan, jos et aio suorittaa koko pelikirjaa.