Sa Unsang Paagi Paghimo ug Mga Masaligan nga Dula ug Playbook - Bahin 5


Niining Bahin 5 sa Ansible Series, among ipasabot kung giunsa paghimo ang Ansible Plays ug Playbook gamit ang Ansible modules.

Ang mahimo nga mga barko nga adunay standalone nga mga script nga gitawag nga mga module nga gigamit sa mga playbook alang sa pagpatuman sa mga espesyal nga buluhaton sa hilit nga mga node.

Ang mga module magamit alang sa pag-automate sa mga buluhaton sama sa pagdumala sa pakete, pag-archive ug pagkopya sa mga file aron mahisgutan ang pipila lang. Gitugotan ka nila nga maghimo mga pag-tweak sa mga file sa pag-configure ug pagdumala sa mga aparato sama sa mga router, switch, load balancer, firewall ug daghang uban pang mga aparato.

Ang katuyoan niini nga subtopic mao ang paghatag kanimo ug usa ka kinatibuk-ang panan-aw sa lainlaing mga buluhaton nga mahimo sa Ansible modules:

Pagdumala sa Package sa Linux

Ang pagdumala sa package usa sa labing hinungdanon ug kanunay nga buluhaton nga gidala sa mga tagdumala sa sistema. Masaligan nga mga barko nga adunay mga module nga makatabang kanimo sa pagpatuman sa mga buluhaton sa pagdumala sa package sa RedHat ug Debian nga mga sistema nga nakabase.

Sila sayon nga matag-an. Adunay apt module alang sa YUM package management ug dnf module nga nalangkit sa mas bag-ong RHEL distributions.

Sa ubos mao ang pipila ka mga pananglitan kung giunsa ang mga module magamit sa usa ka playbook:

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

Module sa Serbisyo

Ang module sa serbisyo nagtugot sa mga tigdumala sa sistema sa pagsugod, paghunong, pag-update, pag-upgrade ug pag-reload sa mga serbisyo sa sistema.

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

Kopyaha ang Module

Sama sa gisugyot sa ngalan, kopyaha ang module sa pagkopya sa mga file gikan sa usa ka lokasyon sa hilit nga makina ngadto sa lain nga lokasyon sa parehas nga makina.

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

Ang playbook nagkopya sa config file tecmint.conf gikan sa /etc/files/ directory ngadto sa /srv/ directory isip tecmint user nga adunay 0644 permiso.

Ang mga pagtugot mahimo usab nga irepresentar gamit ang simbolikong representasyon sama sa gipakita sa katapusang linya.

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

Ang mga permiso sa miaging pananglitan mahimong irepresentar sama sa gipakita sa kataposang linya, Ang user gi-assign sa pagbasa ug pagsulat nga mga permiso, ang grupo gihatagan og mga permiso sa pagsulat, ug ang ubang bahin sa kalibutan gihatagan og mga permiso sa pagbasa.

Module sa File

Ang module sa file gigamit sa pagdala sa daghang mga operasyon sa file lakip na ang paghimo og mga file ug direktoryo, pag-assign sa mga permiso sa file, ug pag-set sa mga symlink.

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

Ang play sa ibabaw nagmugna og file nga gitawag og tecmint.conf sa /etc directory setting permissions ngadto sa 0644.

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

Kini nagtangtang o nagtangtang sa file tecmint.conf.

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

Maghimo kini og usa ka direktoryo sa/etc directory setting permissions ngadto sa 0777.

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

Ang dula sa ibabaw balikbalik nga nagtangtang sa usa ka direktoryo.

Lineinfile nga Module

Ang lineinfile module makatabang kung gusto nimo nga usbon ang usa ka linya sa usa ka file. Mahimo kining mopuli sa kasamtangan nga linya.

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

Ang dula sa ibabaw nagtakda sa SELINUX nga kantidad sa disabled.

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

Gidugang niini ang entry 10.200.50.51 linux-console.net sa /etc/hosts file.

Arkibo nga Module

Ang usa ka module sa Archive gigamit alang sa paghimo sa usa ka compressed archive sa usa o daghang mga file. Nagtuo kini nga ang gigikanan sa compression anaa sa target nga destinasyon. Human sa archival, ang tinubdan nga payl mahimong matangtang o matangtang sa ulahi gamit ang pahayag 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

Sa play sa ibabaw, ang source file /path/to/tecmint matangtang human makompleto ang archival.

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

Naghimo kini og compressed file sa bz2 format gikan sa /path/to/tecmint file.

Git Module

Ang module nagdumala sa git checkouts sa software repository.

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

Command Module

Usa sa labing kasagarang gigamit nga mga module, ang command module nagkuha sa command name ug sa ulahi gisundan sa usa ka lista sa mga argumento. Ang sugo gipasa sa samang paagi nga imong i-type sa usa ka Linux shell.

- 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

Gikuha sa command module ang uptime sa mga remote server.

Mga Variable aron Makuha ang Resulta sa Nagdagan nga mga Sugo

Kasagaran, ang Ansible nga playbook gigamit sa pagpatuman sa mga buluhaton sa gidumala nga mga host nga wala ipakita ang output sa command line. Adunay mga higayon, bisan pa, nga kinahanglan nimo nga makuha ang output o mga resulta. Sa kini nga seksyon, kami maggiya kanimo kung giunsa nimo makuha ang output sa usa ka playbook sa usa ka variable ug sa ulahi ipakita kini.

Ang usa ka ansible nga rehistro gigamit alang sa pagkuha sa output sa usa ka buluhaton ug i-save kini nga usa ka variable. Ang variable pagkahuman maglangkob sa stdout sa buluhaton.

Pananglitan, isipon nato nga gusto nimong susihon ang paggamit sa disk sa gidumala nga mga node sa tagsa-tagsa ka root directory gamit ang df -Th / command. Imong gamiton ang 'command' module aron ipasabot ang command ug 'register' aron i-save ang std output sa usa ka variable.

Para ipakita ang command, imong gamiton ang 'debug' module kauban ang stdout return value.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout

Karon, daganon nato ang playbook. Niini nga kaso, among gihinganlan ang among playbook nga check_disk_space.yml.

# ansible-playbook check_disk_space.yml

Sama sa imong nakita, ang output tanan gisagol ug nagpalisud sa pagsunod.

Para ipahiangay ang output ug mas sayon basahon, ilisan ang stdout return value sa stdout_lines.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout_lines

Gamita ang mga Kondisyon sa Pagkontrol sa Pagpatuman sa Dula

Sama sa mga programming language, ang mga conditional statement gigamit kung labaw sa usa ka resulta ang posible. Atong tan-awon ang pipila sa kasagarang gigamit nga conditional statement sa Ansible playbooks.

Usahay, mahimo nimong buhaton ang mga buluhaton sa piho nga mga node ug dili sa uban. Ang kanus conditional statement sayon ra gamiton ug ipatuman sa usa ka playbook. Kung gamiton ang kanus clause ipahayag lang ang kondisyon nga kasikbit sa clause sama sa gipakita:

when: condition

Kung natagbaw ang kondisyon, nan ang buluhaton gihimo sa hilit nga sistema.

Atong tan-awon ang pipila ka mga pananglitan:

---
- hosts: all

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

Ang dula sa ibabaw nag-install sa Nginx webserver sa mga host nga nagpadagan sa pamilyang Debian sa distros.

Mahimo usab nimong gamiton ang OR ug AND operator kauban sa kung kanus-a ang conditional statement.

---
- hosts: all

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

Kung gigamit ang UG operator, ang duha nga mga pahayag kinahanglan matagbaw alang sa buluhaton nga ipatuman.

Ang dula sa ibabaw nag-install sa Nginx sa Nodes nga nagpadagan sa usa ka pamilyang Debian sa OS nga bersyon 18.04. Dayag, kini mao ang Ubuntu 18.04.

Uban sa OR operator, ang buluhaton ipatuman kung ang bisan hain sa mga kondisyon matuman.

---
- hosts: all

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

Ang dula sa ibabaw nag-install sa Nginx webservers sa Debian o SUSE nga pamilya sa OS o pareho niini.

PAHINUMDOM: Siguruha kanunay nga gamiton ang double equality sign == sa pagsulay sa usa ka kondisyon.

Mga kondisyon sa mga loop

Ang mga kondisyon mahimo usab nga gamiton sa usa ka loop. Isulti pananglitan nga ikaw adunay usa ka lista sa daghang mga pakete nga kinahanglan i-install sa hilit nga mga node.

Sa playbook sa ubos, aduna kitay array nga gitawag og packages nga adunay listahan sa mga packages nga kinahanglang i-install. Kini nga mga buluhaton pagabuhaton sunodsunod kung ang gikinahanglan nga clause gibutang sa Tinuod.

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

I-configure ang Error Handling

Usahay, ang mga buluhaton mapakyas kung nagdagan sa mga playbook. Ibutang ta nga nagdagan ka ug 5 ka buluhaton sa 3 ka server sama sa gipakita sa playbook sa ubos. Kung adunay sayup nga mahitabo sa buluhaton 3 (Pagsugod sa MySQL) sa server 2, ang Ansible mohunong sa pagpatuman sa nahabilin nga mga buluhaton sa server 2 ug mosulay sa pagkompleto sa nahabilin nga mga buluhaton sa nahabilin nga mga server.

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

Kung gusto nimo ang pagkamakanunayon sa pagpatuman sa playbook, pananglitan, ihunong ang pagpatuman sa usa ka playbook, kung mapakyas ang usa sa mga server, idugang ang kapilian.

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

Niining paagiha, kung ang usa ka buluhaton mapakyas sa usa ka server, ang Ansible mohunong sa pagpatuman sa tibuuk nga playbook sa tanan nga mga server ug paggawas.

Kung gusto nimo nga ibaliwala sa playbook ang mga kasaypanan ug ipadayon ang pagpatuman sa nahabilin nga hugpong sa mga buluhaton, unya gamita ang ignore_errors: Tinuod nga kapilian.

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

Paghimo og mga Playbook aron I-configure ang mga Sistema ngadto sa Gipiho nga Estado

Niini nga seksyon, among gitan-aw ang pipila ka dugang nga mga kapilian nga magamit kung nagdagan sa usa ka playbook.

Magsugod ta sa Check mode o Dry run nga kapilian. Ang dry run o check mode nga opsyon gigamit sa pagdagan sa usa ka playbook aron masusi kung adunay mga sayup nga makit-an ug kung adunay bisan unsang mga pagbag-o nga himuon sa gidumala nga mga host. Kini, bisan pa, wala maghimo bisan unsang mga pagbag-o sa hilit nga mga node.

Pananglitan, aron ma-dry run ang usa ka playbook nga gitawag og httpd.yml nga nag-instalar ug nagsugod sa Apache webserver run:

# ansible-playbook httpd.yml --check

Ang laing kapilian nga kinahanglan natong tan-awon mao ang --start-at-task nga opsyon. Kini gigamit sa diha nga nagtino sa ngalan sa buluhaton nga ang playbook kinahanglan magsugod o magsugod sa.

Atong kuhaon ang usa ka pananglitan: Ang playbook sa ubos naglatid sa 2 nga mga buluhaton: Ang una nga dula nag-install sa Apache web server ug ang ikaduha nag-install sa htop utility.

---
 - name: Install httpd

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

- name: Install htop

      yum:  
      name: htop
      state: started

Kung gusto nimong laktawan ang pag-install sa Apache webserver ug i-install ang htop utility run:

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

Katapusan, mahimo nimong i-tag ang imong mga buluhaton o dula pinaagi sa pagdugang sa kapilian sa mga tag sa imong playbook sama sa gipakita. Kini magamit kung ikaw adunay usa ka dako nga playbook ug gusto nimo nga magpadagan sa piho nga mga buluhaton gikan sa tibuuk nga playbook.

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

Sa pagtangtang sa mga tag gamita ang --skip-tags nga mga opsyon sama sa gipakita.

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

Sa kini nga hilisgutan, kami nagdala kanimo pinaagi sa sagad nga gigamit nga mga module sa Ansible, kung giunsa pagkuha ang stdout gikan sa pagpatuman sa usa ka playbook alang sa pagtuki, gamit ang mga kondisyon sa playbook ug kung giunsa pagdumala ang mga sayup nga mahimong mahitabo kung nagdagan ang mga buluhaton. Katapusan, among gi-recap ang configuration sa mga playbook ug unsaon nimo paggamit ang dugang nga mga opsyon sa pagdesisyon kung unsa nga mga buluhaton ang daganan kung dili nimo tuyo nga ipadagan ang tibuok playbook.