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.