Kā izveidot anonimiskas atskaņošanas un atskaņošanas grāmatas - 5. daļa


Šajā Ansible Series 5. daļā mēs paskaidrosim, kā izveidot Ansible Play un Playbooks, izmantojot Ansible moduļus.

Iespējamie kuģi ar atsevišķiem skriptiem, kurus sauc par moduļiem un kurus atskaņošanas grāmatās izmanto specializētu uzdevumu veikšanai attālos mezglos.

Moduļi ir noderīgi tādu uzdevumu automatizēšanai kā paku pārvaldība, failu arhivēšana un kopēšana, pieminot tikai dažus. Tie ļauj jums pielāgot konfigurācijas failus un pārvaldīt tādas ierīces kā maršrutētājus, slēdžus, slodzes līdzsvarotājus, ugunsmūrus un daudzas citas ierīces.

Šīs apakštēmas mērķis ir sniegt jums pārskatu par dažādiem uzdevumiem, kurus var paveikt ar Ansible moduļiem:

Pakotņu pārvaldība Linux

Iepakojuma pārvaldība ir viens no būtiskākajiem un biežākajiem uzdevumiem, ko veic sistēmu administratori. Iespējamie kuģi ar moduļiem, kas palīdz izpildīt pakotņu pārvaldības uzdevumus gan RedHat, gan Debian sistēmās.

Tos ir salīdzinoši viegli uzminēt. Ir apt modulis YUM pakotņu pārvaldībai un dnf modulis, kas saistīts ar jaunākiem RHEL izplatījumiem.

Tālāk ir sniegti daži piemēri, kā moduļus var izmantot atskaņošanas grāmatā:

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

  tasks:
       - name: install httpd
         dnf:  
          name: httpd  
          State: latest
---
- name: install Apache webserver
  hosts: databases

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

Pakalpojuma modulis

Pakalpojuma modulis ļauj sistēmas administratoriem sākt, apturēt, atjaunināt, uzlabot un atkārtoti ielādēt pakalpojumus sistēmā.

---
- name: Start service httpd, if not started
  service:
    name: httpd
    state: started
---
- name: Stop service httpd
  service:
    name: httpd
    state: stopped
---
- name: Restart network service for interface eth0
  service:
    name: network
    state: restarted
    args: enp2s0

Kopēt moduli

Kā norāda nosaukums, kopēšanas modulis kopē failus no vienas vietas attālajā datorā uz citu vietu tajā pašā mašīnā.

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

Spēļu grāmata kopē konfigurācijas failu tecmint.conf no/etc/files/direktorija uz/srv/direktoriju kā tecmint lietotāju ar 0644 atļaujām.

Atļaujas var attēlot arī, izmantojot simbolisko attēlojumu, kā parādīts pēdējā rindā.

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

Atļaujas iepriekšējā piemērā var attēlot, kā parādīts pēdējā rindā. Lietotājam tiek piešķirtas lasīšanas un rakstīšanas atļaujas, grupai tiek piešķirtas rakstīšanas atļaujas un pārējai pasaulei tiek piešķirtas lasīšanas atļaujas.

Failu modulis

Failu moduli izmanto, lai veiktu daudzas failu darbības, tostarp failu un direktoriju izveidi, failu atļauju piešķiršanu un simlinku iestatīšanu.

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

Iepriekš atskaņošana izveido failu ar nosaukumu tecmint.conf direktorijā/etc, kurā iestatītas atļaujas uz 0644.

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

Tas noņem vai izdzēš failu tecmint.conf.

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

Tas izveidos direktoriju direktorijā/etc, kurā iestatītas atļaujas uz 0777.

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

Iepriekš atskaņotais rekursīvi izdzēš direktoriju.

Lineinfile modulis

Lineinfile modulis ir noderīgs, ja vēlaties mainīt vienu rindiņu failā. Tas var aizstāt esošo līniju.

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

Iepriekš atskaņotajā spēlē SELINUX vērtība tiek atspējota.

SELINUX=disabled
---
- 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ādējādi failam/etc/hosts tiek pievienots ieraksts 10.200.50.51 linux-console.net.

Arhīva modulis

Arhīva moduli izmanto, lai izveidotu saspiestu viena vai vairāku failu arhīvu. Tiek pieņemts, ka mērķa galamērķī ir saspiešanas avots. Pēc arhivēšanas avota failu vēlāk var izdzēst vai noņemt, izmantojot paziņojumu remove = True .

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

Iepriekš minētajā spēlē avota fails/path/to/tecmint tiek izdzēsts pēc arhīva pabeigšanas.

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

Tādējādi no faila/path/to/tecmint tiek izveidots saspiests fails bz2 formātā.

Git modulis

Modulis pārvalda programmatūras krātuvju kases.

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

Komandu modulis

Viens no visbiežāk izmantotajiem moduļiem komandu modulis uzņem komandas nosaukumu un vēlāk seko argumentu saraksts. Komanda tiek nodota tāpat kā jūs ievadāt Linux čaulā.

- name: Executing a command using the command module
  command: cat helloworld.txt
---
 - 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

Komandu modulis izgūst attālo serveru darbības laiku.

Mainīgie komandu darbības rezultātu izgūšanai

Parasti Ansible playbooks tiek izmantotas, lai izpildītu uzdevumus pārvaldītajos resursdatoros, neizrādot izvadi komandrindā. Tomēr ir gadījumi, kad jums var prasīt iegūt rezultātu vai rezultātus. Šajā sadaļā mēs iepazīstinām jūs ar to, kā jūs varat attēlot atskaņošanas grāmatas iznākumu mainīgajā un vēlāk to parādīt.

Uzdevuma izvades tveršanai un mainīgā saglabāšanai tiek izmantots reģistrs. Pēc tam mainīgais satur uzdevuma standartu.

Piemēram, pieņemsim, ka vēlaties pārbaudīt pārvaldīto mezglu diska lietojumu attiecīgajos saknes direktorijos, izmantojot komandu df -Th/. Jūs izmantosiet moduli ‘komanda’ , lai definētu komandu, un ‘register’ , lai standarta izvadi saglabātu mainīgajā.

Lai parādītu komandu, jūs izmantosiet moduli ‘atkļūdot’ blakus stdout atgriešanās vērtībai.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout

Tagad palaidīsim lugu grāmatu. Šajā gadījumā mēs esam nosaukuši mūsu spēļu grāmatu check_disk_space.yml.

# ansible-playbook check_disk_space.yml

Kā redzējāt, viss produkts ir sajaukts un apgrūtina sekošanu līdzi.

Lai izlīdzinātu izvadi un atvieglotu lasīšanu, nomainiet stdout atgriešanās vērtību ar stdout_lines.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout_lines

Izmantojiet nosacījumus, lai kontrolētu atskaņošanas izpildi

Tāpat kā programmēšanas valodās, nosacītie paziņojumi tiek izmantoti, ja ir iespējami vairāki rezultāti. Apskatīsim dažus no Ansible playbooks parasti izmantotajiem nosacītajiem izteikumiem.

Dažreiz, iespējams, vēlēsities veikt uzdevumus noteiktos mezglos, nevis citos. Nosacījuma when nosacījumu ir diezgan viegli izmantot un ieviest atskaņošanas grāmatā. Izmantojot klauzulu when , vienkārši paziņojiet nosacījumu blakus klauzulai, kā parādīts:

when: condition

Kad nosacījums ir izpildīts, uzdevums tiek veikts attālajā sistēmā.

Apskatīsim dažus piemērus:

---
- hosts: all

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

Iepriekš aprakstītā spēle Nginx tīmekļa serveri instalē saimniekdatoros, kas vada Debian distros saimi.

Varat arī izmantot operatoru OR un AND blakus nosacījuma priekšrakstam.

---
- hosts: all

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

Izmantojot UN operatoru, lai izpildītu uzdevumu, ir jāapmierina abi apgalvojumi.

Iepriekš atskaņotajā versijā Nginx tiek instalēts mezglos, kuros darbojas OS Debian saime, kuras versija ir 18.04. Acīmredzot tas būs Ubuntu 18.04.

Izmantojot operatoru OR , uzdevums tiek izpildīts, ja ir izpildīts kāds no nosacījumiem.

---
- hosts: all

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

Iepriekš atskaņotajā versijā Nginx tīmekļa serveri tiek instalēti vai nu Debian, vai SUSE OS saitē, vai abos.

PIEZĪME. Pārbaudot nosacījumu, vienmēr izmantojiet dubultās vienlīdzības zīmi == .

Nosacījumi cilpās

Nosacījumus var izmantot arī cilpā. Pieņemsim, ka jums ir vairāku pakotņu saraksts, kas jāinstalē attālajos mezglos.

Zemāk esošajā spēļu grāmatā mums ir masīvs, ko sauc par pakotnēm, kas satur instalējamo paku sarakstu. Šie uzdevumi tiks veikti viens pēc otra, ja prasītā klauzula ir iestatīta uz 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 }}”  

Konfigurējiet kļūdu apstrādi

Dažreiz uzdevumi neizdodas, palaižot playbooks. Pieņemsim, ka jūs veicat 5 uzdevumus 3 serveros, kā parādīts zemāk esošajā spēļu grāmatā. Ja 2. servera 3. uzdevumā (MySQL palaišana) rodas kļūda, Ansible pārtrauks izpildīt atlikušos uzdevumus 2. serverī un mēģinās izpildīt atlikušos uzdevumus pārējos serveros.

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

Piemēram, ja vēlaties, lai atskaņošanas grāmatas izpilde būtu konsekventa, pārtrauciet atskaņošanas grāmatas izpildi, ja kāds no serveriem neizdodas, pievienojiet opciju.

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

Tādā veidā, ja viens uzdevums neizdodas vienā serverī, Ansible pārtrauks visas atskaņošanas grāmatas izpildi visos serveros un izies.

Ja vēlaties, lai atskaņošanas grāmata ignorētu kļūdas un turpinātu izpildīt atlikušo uzdevumu kopu, izmantojiet opciju ignore_errors: True.

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

Izveidojiet Playbooks, lai konfigurētu sistēmas noteiktā stāvoklī

Šajā sadaļā mēs aplūkojam dažas papildu iespējas, kas ir pieejamas, palaižot atskaņošanas grāmatu.

Sāksim ar opciju Pārbaudes režīms vai Sausā palaišana. Sausās palaišanas vai pārbaudes režīma opcija tiek izmantota, palaižot atskaņošanas grāmatu, lai pārbaudītu, vai nav radušās kļūdas un vai pārvaldītajos resursdatoros tiks veiktas izmaiņas. Tomēr tas neveic nekādas izmaiņas attālajos mezglos.

Piemēram, lai sausā veidā palaistu atskaņošanas grāmatu ar nosaukumu httpd.yml , kas instalē un palaiž Apache tīmekļa servera palaišanu:

# ansible-playbook httpd.yml --check

Otra iespēja, kas mums jāaplūko, ir opcija --start-at-task . To lieto, norādot uzdevuma nosaukumu, ar kuru jāsāk vai jāsāk atskaņošanas grāmatai.

Ņemsim piemēru: Zemāk esošajā spēļu grāmatā ir izklāstīti 2 uzdevumi: Pirmajā spēlē tiek instalēts Apache tīmekļa serveris, bet otrajā - utilīta htop.

---
 - name: Install httpd

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

- name: Install htop

      yum:  
      name: htop
      state: started

Ja vēlaties izlaist Apache tīmekļa servera instalēšanu un tā vietā instalēt htop utilītu, palaidiet:

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

Visbeidzot, jūs varat atzīmēt savus uzdevumus vai atskaņojumus, pievienojot atskaņošanas grāmatai opciju tags, kā parādīts. Tas ir noderīgi, ja jums ir diezgan liela spēļu grāmata un vēlaties izpildīt konkrētus uzdevumus no visas spēles grāmatas.

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

Lai izlaistu tagus, izmantojiet opcijas --skip-tags , kā parādīts.

# ansible-playbook playbook.yml --skip-tags "Install"

Šajā tēmā mēs iepazīstinājām jūs ar Ansible bieži izmantotajiem moduļiem, kā izgūt stdout no playbook izpildes analīzei, izmantojot nosacījumus playbook un kā pārvaldīt kļūdas, kas var rasties, izpildot uzdevumus. Visbeidzot, mēs pārskatījām atskaņošanas grāmatu konfigurāciju un to, kā jūs varat izmantot papildu opcijas, lai izlemtu, kuri uzdevumi jāveic, ja jūs neplānojat palaist visu atskaņošanas grāmatu.