Jogaply oýunlary we oýun kitaplaryny nädip döretmeli - 5-nji bölüm


“Ansible” seriýasynyň 5-nji bölüminde “Ansible” modullaryny ulanyp, “Ansible Plays” we “Playbooks” -lary nädip döretmelidigini düşündireris.

Uzakdaky düwünlerde ýöriteleşdirilen işleri ýerine ýetirmek üçin oýun kitaplarynda ulanylýan modullar diýlip atlandyrylýan özbaşdak ýazgyly gämiler.

Modullary bukjany dolandyrmak, arhiwlemek we faýllary göçürmek ýaly meseleleri awtomatlaşdyrmak üçin amatly bolýar. Sazlama faýllarynda düzedişler girizmäge we marşrutizatorlar, wyklýuçateller, ýük balanslary, diwar diwarlary we başga-da köp enjam ýaly enjamlary dolandyrmaga mümkinçilik berýär.

Bu subtopikiň maksady, “Ansible” modullary tarapyndan ýerine ýetirilip bilinjek dürli meseleler barada umumy maglumat bermekden ybarat:

Linux-da paket dolandyryşy

Paket dolandyryşy ulgam dolandyryjylary tarapyndan ýerine ýetirilýän iň möhüm we ýygy-ýygydan meseleleriň biridir. RedHat we Debian esasly ulgamlarda paket dolandyryş meselelerini ýerine ýetirmäge kömek edýän modully jogap gämileri.

Olary çaklamak aňsat. YUM paket dolandyryşy we has täze RHEL paýlamalary bilen baglanyşykly dnf moduly üçin amatly modul bar.

Aşakda modullary oýun depderinde ulanyp boljak birnäçe mysal bar:

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

Hyzmat moduly

Hyzmat moduly ulgam dolandyryjylaryna ulgamdaky hyzmatlary başlamaga, duruzmaga, täzelemäge, täzelemäge we täzeden ýüklemäge mümkinçilik berýär.

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

Moduly göçüriň

Adyndan görnüşi ýaly, modul faýllary uzakdaky maşynyň bir ýerinden şol bir enjamda başga ýere göçürýär.

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

Oýnawaç, konfigurasiýa faýly tecmint.conf/etc/faýllar/bukjadan/srv/katalogyna 0644 rugsady bilen tecmint ulanyjy hökmünde göçürýär.

Rugsatlar, soňky setirde görkezilişi ýaly simwoliki şekillendiriş arkaly hem görkezilip bilner.

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

Öňki mysaldaky rugsatlar soňky setirde görkezilişi ýaly görkezilip bilner, Ulanyja okamak we ýazmak üçin rugsat berilýär, topara ýazmaga rugsat berilýär we dünýäniň galan bölegine okamak üçin rugsat berilýär.

Faýl moduly

Faýl moduly, faýllary we kataloglary döretmek, faýl rugsatlaryny bellemek we baglanyşyk baglanyşyklaryny goşmak ýaly köp faýl amallaryny geçirmek üçin ulanylýar.

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

Aboveokardaky oýun 0644-e çenli/etc katalog sazlaýyş rugsatlarynda tecmint.conf atly bir faýl döredýär.

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

Bu, tecmint.conf faýlyny aýyrýar ýa-da pozýar.

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

Bu,/etc katalog sazlamalarynda 0777-e çenli bir katalog döreder.

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

Aboveokardaky oýun bir katalogy yzygiderli pozýar.

Lineinfile moduly

“Lineinfile” moduly bir faýlda bir setiri üýtgetjek bolanyňyzda peýdalydyr. Bar bolan setiri çalşyp biler.

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

Aboveokardaky oýun SELINUX bahasyny maýyplara düzýär.

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

Bu,/etc/host faýlyna 10.200.50.51 linux-console.net ýazgyny goşýar.

Arhiw moduly

Bir ýa-da birnäçe faýlyň gysylan arhiwini döretmek üçin Arhiw moduly ulanylýar. Gysyş çeşmesiniň barjak ýerinde bar diýip çaklaýar. Arhiwden soň, deslapky faýl remove=True jümlesini ulanyp öçürilip ýa-da aýrylyp bilner.

- 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

Aboveokardaky oýunda arhiw gutarandan soň çeşme faýly/ýol/to/tecmint pozulýar.

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

Bu,/path/to/tecmint faýlyndan bz2 formatda gysylan faýl döredýär.

Git moduly

Modul programma üpjünçiliginiň ammarlarynyň git barlagyny dolandyrýar.

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

Buýruk moduly

Iň köp ulanylýan modullaryň biri, buýruk moduly buýruk adyny alýar we soňra argumentleriň sanawyny alýar. Buýruk, Linux gabygynda ýazyşyňyz ýaly geçdi.

- 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

Buýruk moduly uzakdaky serwerleriň iş wagtyny alýar.

Işleýän buýruklaryň netijelerini almak üçin üýtgeýjiler

Adatça, Ansible playbooks buýruk setirinde çykyşy görkezmän dolandyrylýan öý eýelerinde işleri ýerine ýetirmek üçin ulanylýar. Şeýle-de bolsa, çykyş ýa-da netijeleri ele almak talap edilip bilner. Bu bölümde, oýnawaç kitabynyň çykyşyny üýtgeýjide nädip alyp boljakdygyny we soň görkezip boljakdygyny öwrenýäris.

Bir meseläniň netijesini almak we üýtgeýjini saklamak üçin jogap ýazgysy ulanylýar. Üýtgeýjiden soň meseläniň stdouty bolar.

Mysal üçin, df -Th/ buýrugyny ulanyp, degişli kök kataloglarynda dolandyrylýan düwünleriň disk ulanylyşyny barlamak isleýärsiňiz diýip pikir edeliň. Buýrugy kesgitlemek üçin 'buýruk' modulyny we std çykyşyny üýtgeýjide saklamak üçin 'registrasiýa' ulanjak bolýarsyňyz.

Buýrugy görkezmek üçin, stdout yzyna gaýtaryş bahasy bilen birlikde 'debug' modulyny ulanarsyňyz.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout

Indi, oýnawaç kitabyny işledeliň. Bu ýagdaýda, oýnawaç kitabymyzy check_disk_space.yml diýip atlandyrdyk.

# ansible-playbook check_disk_space.yml

Görşüňiz ýaly, çykyşlaryň hemmesi bir ýere jemlenýär we yzarlamagy kynlaşdyrýar.

Çykyşy deňleşdirmek we okamagy aňsatlaşdyrmak üçin stdout yzyna gaýtaryş bahasyny stdout_lines bilen çalyşyň.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout_lines

Oýun ýerine ýetirilişine gözegçilik etmek üçin şertleri ulanyň

Programma dillerinde bolşy ýaly, birden köp netije mümkin bolanda şertli jümleler ulanylýar. Geliň, “Ansible” oýun kitaplarynda köp ulanylýan şertli jümlelere seredeliň.

Käwagt, beýlekiler däl-de, belli düwünlerde işleri ýerine ýetirmek isläp bilersiňiz. şertli jümle, oýnamak kitabynda ulanmak we ýerine ýetirmek gaty aňsat. ulanylanda maddasy görkezilişi ýaly diňe ýanaşyk ýagdaýy yglan ediň:

when: condition

Complianceagdaý kanagatlandyrylanda, wezipe uzakdaky ulgamda ýerine ýetirilýär.

Geliň, birnäçe mysallary gözden geçireliň:

---
- hosts: all

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

Aboveokardaky oýun, Debian distros maşgalasyny dolandyrýan öý eýelerine Nginx web serwerini gurýar.

Şeýle hem şertli jümle bilen birlikde OR we AND operatoryny ulanyp bilersiňiz.

---
- hosts: all

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

WE operatory ulanylanda, ýerine ýetirilmegi üçin iki jümle hem kanagatlanmalydyr.

Aboveokardaky oýun 18.04 wersiýasy bolan Debian OS maşgalasyny dolandyrýan düwünlere Nginx gurýar. Elbetde, bu Ubuntu 18.04 bolar.

OR operatory bilen, şertleriň haýsydyr biri ýerine ýetirilen halatynda wezipe ýerine ýetirilýär.

---
- hosts: all

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

Aboveokardaky oýun, Debian ýa-da SUSE OS maşgalasyna ýa-da ikisine-de Nginx web serwerlerini gurýar.

ÜNS BERI .: Bir şert barlanylanda elmydama goşa deňlik belgisini == ulanmagy üpjün ediň.

Aýlawlarda şertler

Şertler aýlawda hem ulanylyp bilner. Mysal üçin, uzakdaky düwünlerde gurulmaly birnäçe paketiň sanawy bar diýiň.

Aşakdaky oýun kitabynda, gurulmaly paketleriň sanawyny öz içine alýan paketler atly bir massiw bar. Zerur maddalar “True” -e düzülen bolsa, bu meseleler birin-birin ýerine ýetiriler.

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

Roralňyşlyk bilen işlemegi sazlaň

Käwagt, oýun kitaplary işledilende meseleler şowsuz bolýar. Aşakdaky oýun kitabynda görkezilişi ýaly 3 serwerde 5 meseläni ýerine ýetirýärsiňiz öýdýän. 2-nji serwerde 3-nji meselede (MySQL başlamak) ýalňyşlyk ýüze çyksa, Ansible 2-nji serwerde galan meseleleri ýerine ýetirmegi bes eder we galan meseleleri serwerleriň galan böleginde ýerine ýetirmäge synanyşar.

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

Oýun kitabynyň ýerine ýetirilişinde yzygiderlilik isleseňiz, meselem, serwerleriň biri şowsuz bolsa, oýun kitabynyň ýerine ýetirilmegini togtatyň.

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

Şeýlelik bilen, bir serwerde bir mesele başa barmasa, Ansible ähli serwerlerde oýnawaç kitabynyň ýerine ýetirilmegini bes eder we çykar.

Oýun kitabynyň ýalňyşlyklary äsgermezlik edip, galan meseleleriň toplumyny ýerine ýetirmek isleseňiz, ignore_errors: Hakyky opsiýany ulanyň.

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

Ulgamlary belli bir ýagdaýa düzmek üçin oýun kitaplaryny dörediň

Bu bölümde, oýun depderçesini işledeniňizde elýeterli käbir goşmaça wariantlara seredýäris.

Barlamak re modeiminden ýa-da Gury işlemek opsiýasyndan başlalyň. Gurak işlemek ýa-da barlamak tertibi opsiýasy, ýalňyşlyklar ýüze çykjakdygyny ýa-da dolandyrylýan öý eýelerinde ediljek üýtgeşmeleriň bardygyny ýa-da ýokdugyny barlamak üçin oýun kitaby işledilende ulanylýar. Şeýle-de bolsa, uzakdaky düwünlere hiç hili üýtgeşme girizmeýär.

Mysal üçin, Apache web serwerini gurýan we başlaýan httpd.yml atly oýun kitabyny guratmak üçin:

# ansible-playbook httpd.yml --check

Seredilmeli beýleki wariant, --start-at-task opsiýasy. Bu, oýnawaç kitabynyň başlamaly ýa-da başlamaly meselesiniň adyny görkezeninde ulanylýar.

Mysal alalyň: Aşakdaky oýun kitabynda 2 mesele bar: Birinji oýun Apache web serwerini, ikinjisi htop kömekçi programmasyny gurýar.

---
 - name: Install httpd

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

- name: Install htop

      yum:  
      name: htop
      state: started

Apache web serwerini gurnamagy taşlap, ýerine htop kömekçi programmasyny gurmak isleseňiz:

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

Iň soňunda bolsa, görkezilişine görä bellikler opsiýasyny goşmak arkaly wezipeleriňizi ýa-da oýunlaryňyzy belläp bilersiňiz. Uly oýnawaç kitabyňyz bar bolsa we tutuş oýun kitabyndan belli bir işleri ýerine ýetirmek isleseňiz, bu amatly bolýar.

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

Bellikleri taşlamak üçin görkezilişi ýaly --skip-tags opsiýalaryny ulanyň.

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

Bu mowzukda, “Ansible” -de giňden ulanylýan modullary, oýun depderçesiniň ýerine ýetirilişinden stdouty nädip almalydygyny, oýun depderindäki şertleri ulanyp we meseleler ýerine ýetirilende ýüze çykyp biläýjek ýalňyşlyklary nädip dolandyrmalydygyny öwrenipdik. Ahyrynda, oýun kitaplarynyň konfigurasiýasyny we tutuş oýun kitabyny işletmek islemeýän bolsaňyz, haýsy meseleleri ýerine ýetirmelidigini kesgitlemek üçin goşmaça wariantlary nädip ulanyp boljakdygyny täzeden gözden geçirdik.