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.