Jinsi ya Kuunda Michezo Inayofaa na Vitabu vya kucheza - Sehemu ya 5
Katika Sehemu hii ya 5 ya Mfululizo Unaostahiki, tutaeleza jinsi ya kuunda Michezo Inayostahiki na Vitabu vya kucheza kwa kutumia moduli Zinazoweza Kufaa.
Meli zinazowezekana zilizo na hati za kujitegemea zinazoitwa moduli ambazo hutumika katika vitabu vya kucheza kwa utekelezaji wa kazi maalum kwenye nodi za mbali.
Moduli zinafaa kwa kazi za kiotomatiki kama vile usimamizi wa kifurushi, kuhifadhi kwenye kumbukumbu na kunakili faili ili kutaja chache tu. Hukuruhusu kufanya mabadiliko kwenye faili za usanidi na kudhibiti vifaa kama vile vipanga njia, swichi, visawazisha mizigo, ngome na vifaa vingine vingi.
Madhumuni ya mada hii ndogo ni kukupa muhtasari wa kazi mbalimbali ambazo zinaweza kukamilishwa na moduli zinazofaa:
Usimamizi wa Kifurushi katika Linux
Usimamizi wa kifurushi ni mojawapo ya kazi muhimu na za mara kwa mara zinazobebwa na wasimamizi wa mifumo. Meli zinazowezekana zilizo na moduli zinazokusaidia kutekeleza majukumu ya usimamizi wa kifurushi katika mifumo ya RedHat na Debian.
Wao ni rahisi kukisia. Kuna moduli inayofaa ya usimamizi wa kifurushi cha YUM na moduli ya dnf inayohusishwa na usambazaji mpya zaidi wa RHEL.
Ifuatayo ni mifano michache ya jinsi moduli zinavyoweza kutumika katika kitabu cha kucheza:
--- - 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
Moduli ya Huduma
Moduli ya huduma inaruhusu wasimamizi wa mfumo kuanza, kuacha, kusasisha, kuboresha na kupakia upya huduma kwenye mfumo.
--- - 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
Nakili Moduli
Kama jina linavyopendekeza, moduli ya kunakili faili kutoka eneo moja kwenye mashine ya mbali hadi eneo tofauti kwenye mashine moja.
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: '0644'
Kitabu cha kucheza kinakili faili ya usanidi tecmint.conf kutoka /etc/files/ saraka hadi /srv/ saraka kama mtumiaji wa tecmint kwa ruhusa 0644.
Ruhusa zinaweza pia kuwakilishwa kwa kutumia uwakilishi wa ishara kama inavyoonyeshwa kwenye mstari wa mwisho.
--- - 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
Ruhusa katika mfano uliopita zinaweza kuwakilishwa kama inavyoonyeshwa kwenye mstari wa mwisho, Mtumiaji amepewa ruhusa za kusoma na kuandika, kikundi kimepewa ruhusa za kuandika, na ulimwengu wote umepewa ruhusa za kusoma.
Moduli ya Faili
Moduli ya faili hutumika kubeba shughuli nyingi za faili ikiwa ni pamoja na kuunda faili na saraka, kugawa vibali vya faili, na kuweka ulinganifu.
--- - name: Change file ownership, group, and permissions file: path: /etc/tecmint.conf owner: tecmint group: tecmint mode: '0644'
Uchezaji ulio hapo juu huunda faili inayoitwa tecmint.conf katika ruhusa ya mpangilio wa saraka hadi 0644.
--- - name: Remove file (delete file) file: path: /etc/tecmint.conf state: absent
Hii inaondoa au kufuta faili tecmint.conf.
--- - name: create a directory if it doesn’t exist file: path: /etc/mydirectory State: directory mode: '0777'
Hii itaunda saraka katika /etc ruhusa ya kuweka saraka kwa 0777.
--- - name: Recursively deleting a directory file: path: /etc/tecmint.conf state: absent
Uchezaji ulio hapo juu hufuta saraka kwa kujirudia.
Moduli ya faili ya mstari
Moduli ya lineinfile inasaidia unapotaka kubadilisha laini moja kwenye faili. Inaweza kuchukua nafasi ya mstari uliopo.
--- - name: Ensure SELinux is set to enforcing mode lineinfile: path: /etc/selinux/config regexp: '^SELINUX=' line: SELINUX=disabled
Mchezo ulio hapo juu unaweka thamani ya SELINUX kulemazwa.
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
Hii inaongeza ingizo 10.200.50.51 linux-console.net kwenye /etc/hosts faili.
Jalada Moduli
Moduli ya Kumbukumbu hutumiwa kuunda kumbukumbu iliyobanwa ya faili moja au nyingi. Inadhania kuwa chanzo cha mbano kipo kipo kwenye lengwa lengwa. Baada ya kuhifadhiwa, faili chanzo inaweza baadaye kufutwa au kuondolewa kwa kutumia taarifa 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
Katika uchezaji ulio hapo juu, faili chanzo /path/to/tecmint inafutwa baada ya uhifadhi kukamilika.
- name: Create a bz2 archive of /path/to/tecmint archive: path: /path/to/tecmint format: bz2
Hii huunda faili iliyobanwa katika umbizo la bz2 kutoka kwa faili ya /path/to/tecmint.
Moduli ya Git
Moduli inasimamia ukaguzi wa git wa hazina za programu.
- git: repo: 'https://foosball.example.org/path/to/repo.git' dest: /srv/checkout version: release-0.22
Moduli ya Amri
Moja ya moduli zinazotumiwa sana, moduli ya amri inachukua jina la amri na baadaye ikifuatiwa na orodha ya hoja. Amri imepitishwa kwa njia ile ile ambayo ungeandika kwenye ganda la Linux.
- 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
Moduli ya amri hupata muda wa ziada wa seva za mbali.
Vigezo vya Kurejesha Matokeo ya Amri za Uendeshaji
Kwa kawaida, vitabu vya kucheza vinavyoweza kutumika hutumika kutekeleza kazi kwa wapangishi wanaosimamiwa bila kuonyesha towe kwenye safu ya amri. Kuna matukio, hata hivyo, ambayo unaweza kuhitajika kunasa matokeo au matokeo. Katika sehemu hii, tunakuelekeza jinsi unavyoweza kunasa matokeo ya kitabu cha kucheza katika kigezo na kukionyesha baadaye.
Rejista inayotumika hutumika kunasa matokeo ya kazi na kuihifadhi tofauti. Tofauti hiyo baadaye itakuwa na stdout ya kazi.
Kwa mfano, hebu tuchukulie kuwa unataka kuangalia matumizi ya diski ya nodi zinazodhibitiwa katika saraka za mizizi husika kwa kutumia df -Th /
amri. Utatumia ‘command’
moduli kufafanua amri na ‘register’
ili kuhifadhi matokeo ya std katika kigezo.
Ili kuonyesha amri, utatumia ‘debug’
moduli pamoja na stdout return value.
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout
Sasa, wacha tuendeshe kitabu cha kucheza. Katika hali hii, tumekipa kitabu chetu cha kucheza check_disk_space.yml.
# ansible-playbook check_disk_space.yml
Kama umeona, matokeo yote yamechanganyika na hufanya iwe vigumu kufuata.
Ili kupangilia pato na kurahisisha kusoma, badilisha thamani ya stdout na stdout_lines.
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout_lines
Tumia Masharti Kudhibiti Utekelezaji wa Google Play
Kama tu katika lugha za programu, taarifa za masharti hutumiwa wakati matokeo zaidi ya moja yanawezekana. Hebu tuangalie baadhi ya kauli za masharti zinazotumiwa sana katika vitabu vya kucheza vya Ansible.
Wakati mwingine, unaweza kutaka kufanya kazi kwenye nodi maalum na sio zingine. wakati
taarifa ya masharti ni rahisi sana kutumia na kutekeleza katika kitabu cha kucheza. Unapotumia kifungu cha wakati
tangaza tu hali iliyo karibu na kifungu kama inavyoonyeshwa:
when: condition
Wakati hali imeridhika, basi kazi inafanywa kwenye mfumo wa mbali.
Wacha tuangalie mifano michache:
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian”
Uchezaji ulio hapo juu husakinisha seva ya wavuti ya Nginx kwenye wapangishaji wanaoendesha familia ya Debian ya distros.
Unaweza pia kutumia OR
na AND
opereta pamoja na wakati taarifa ya masharti.
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” and ansible_distribution_version == “18.04”
Unapotumia opereta NA
, taarifa zote mbili lazima ziwe zimeridhika ili kazi itekelezwe.
Mchezo ulio hapo juu unasakinisha Nginx kwenye Nodi zinazoendesha familia ya Debian ya OS ambayo ni toleo la 18.04. Ni wazi, hii itakuwa Ubuntu 18.04.
Kwa OR
opereta, kazi itatekelezwa ikiwa mojawapo ya masharti yatatimizwa.
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” or Ansible_os_family == “SUSE”
Uchezaji ulio hapo juu husakinisha seva za wavuti za Nginx kwenye Debian au SUSE familia ya OS au zote mbili.
KUMBUKA: Daima hakikisha kuwa unatumia alama ya usawa maradufu ==
unapojaribu hali.
Masharti katika vitanzi
Masharti pia yanaweza kutumika katika kitanzi. Sema kwa mfano unayo orodha ya vifurushi vingi ambavyo vinahitaji kusanikishwa kwenye nodi za mbali.
Katika kitabu cha kucheza kilicho hapa chini, tuna safu inayoitwa vifurushi vilivyo na orodha ya vifurushi vinavyohitaji kusakinishwa. Majukumu haya yatatekelezwa moja baada ya jingine ikiwa kifungu kinachohitajika kimewekwa kuwa Kweli.
--- - 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 }}”
Sanidi Ushughulikiaji wa Hitilafu
Wakati mwingine, kazi hushindwa wakati wa kuendesha vitabu vya kucheza. Hebu tuchukulie kuwa unaendesha kazi 5 kwenye seva 3 kama inavyoonyeshwa kwenye kitabu cha kucheza hapa chini. Ikiwa hitilafu itatokea kwenye kazi ya 3 (Kuanzia MySQL) kwenye seva 2, Ansible itaacha kutekeleza kazi zilizobaki kwenye seva 2 na kujaribu kukamilisha kazi zilizobaki kwenye seva zingine.
--- - 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 >>
Ikiwa unataka uthabiti katika utekelezaji wa kitabu cha kucheza, kwa mfano, simamisha utekelezaji wa kitabu cha kucheza, ikiwa moja ya seva itashindwa, ongeza chaguo.
--- - name: Install Software packages hosts: server1, server2, server3 any_errors_fatal: true tasks:
Kwa njia hii, ikiwa kazi moja itashindwa kwenye seva moja, Ansible itasimamisha utekelezaji wa kitabu kizima cha kucheza kwenye seva zote na kuondoka.
Ikiwa ungependa kitabu cha kucheza kupuuza makosa na kuendelea kutekeleza seti iliyobaki ya kazi, kisha utumie kupuuza_makosa: Chaguo la Kweli.
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> ignore_errors: True
Unda Vitabu vya Google Play ili Kuweka Mifumo kwa Hali Iliyoainishwa
Katika sehemu hii, tunaangalia chaguzi za ziada zinazopatikana wakati wa kuendesha kitabu cha kucheza.
Wacha tuanze na hali ya Angalia au chaguo la Kuendesha Kavu. Chaguo la hali ya kukausha au kuangalia hutumiwa wakati wa kuendesha kitabu cha kucheza ili kuangalia kama hitilafu zozote zitapatikana na ikiwa kuna mabadiliko yoyote ambayo yatafanywa kwenye wapangishi wanaodhibitiwa. Walakini, haifanyi mabadiliko yoyote kwa nodi za mbali.
Kwa mfano, kukausha endesha kitabu cha kucheza kiitwacho httpd.yml
ambacho husakinisha na kuanzisha Apache webserver kukimbia:
# ansible-playbook httpd.yml --check
Chaguo jingine tunalohitaji kuangalia ni chaguo la --start-at-task
. Hii inatumika wakati wa kubainisha jina la kazi ambayo kitabu cha kucheza kinapaswa kuanza au kuanza.
Hebu tuchukue mfano: Kitabu cha kucheza hapa chini kinataja kazi 2: Mchezo wa kwanza unasakinisha seva ya wavuti ya Apache na ya pili husakinisha matumizi ya htop.
--- - name: Install httpd hosts: all tasks: yum: name: httpd state: Installed - name: Install htop yum: name: htop state: started
Ikiwa unataka kuruka kusakinisha Apache webserver na badala yake usakinishe htop utility run:
# ansible-playbook playbook.yml --start-at-task “Install htop”
Hatimaye, unaweza kuweka lebo kwenye kazi au michezo yako kwa kuongeza chaguo la lebo kwenye kitabu chako cha kucheza kama inavyoonyeshwa. Hii itakusaidia wakati una kitabu kikubwa cha kucheza na ungependa kutekeleza majukumu mahususi kutoka kwa kitabu kizima cha kucheza.
--- - 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"
Kuacha vitambulisho tumia chaguo za --ruka-tags
kama inavyoonyeshwa.
# ansible-playbook playbook.yml --skip-tags "Install"
Katika mada hii, tulikupitisha kwenye moduli zinazotumika sana katika Ansible, jinsi ya kupata stdout kutoka kwa utekelezaji wa kitabu cha kucheza kwa uchanganuzi, kwa kutumia masharti kwenye kitabu cha kucheza na jinsi ya kudhibiti makosa ambayo yanaweza kutokea wakati wa kutekeleza majukumu. Hatimaye, tulirejelea usanidi wa vitabu vya kucheza na jinsi unavyoweza kutumia chaguo za ziada ili kuamua ni kazi gani utakayofanya ikiwa huna nia ya kuendesha kitabu kizima.