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.