Kif Oħloq Plays u Playbooks Ansible - Parti 5


F'din il-Parti 5 tas-Serje Ansible, se nispjegaw kif noħolqu Plays u Playbooks Ansible billi tuża moduli Ansible.

Vapuri Ansible bi skripts waħedhom imsejħa moduli li jintużaw fil-playbooks għall-eżekuzzjoni ta 'kompiti speċjalizzati fuq nodi remoti.

Il-moduli huma utli għall-awtomatizzazzjoni tal-kompiti bħall-ġestjoni tal-pakketti, l-arkivjar u l-ikkupjar ta 'fajls biex insemmu biss ftit. Jippermettulek tagħmel tweaks fuq fajls ta 'konfigurazzjoni u timmaniġġja apparati bħal routers, swiċċijiet, load balancers, firewalls u għadd ta' apparati oħra.

L-għan ta’ dan is-subsuġġett huwa li jagħtik ħarsa ġenerali lejn diversi kompiti li jistgħu jitwettqu minn moduli Ansible:

Ġestjoni tal-Pakketti fil-Linux

Il-ġestjoni tal-pakketti hija waħda mill-aktar kompiti essenzjali u frekwenti mwettqa mill-amministraturi tas-sistemi. Ansible vapuri b'moduli li jgħinuk tesegwixxi kompiti ta' ġestjoni tal-pakketti kemm f'sistemi bbażati fuq RedHat kif ukoll fuq Debian.

Huma relattivament faċli biex wieħed isib. Hemm il-modulu apt għall-ġestjoni tal-pakketti YUM u l-modulu dnf assoċjati ma 'distribuzzjonijiet RHEL aktar ġodda.

Hawn taħt hawn ftit eżempji ta’ kif il-moduli jistgħu jintużaw fi 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

Modulu tas-Servizz

Il-modulu tas-servizz jippermetti lill-amministraturi tas-sistema biex jibdew, iwaqqfu, jaġġornaw, jaġġornaw u jerġgħu jtellgħu servizzi fuq is-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

Kopja Modulu

Kif jissuġġerixxi l-isem, il-modulu tal-kopja jikkopja fajls minn post wieħed fuq il-magna remota għal post differenti fuq l-istess magna.

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

Il-playbook tikkopja l-fajl tal-konfigurazzjoni tecmint.conf mid-direttorju /etc/files/ għad-direttorju /srv/ bħala utent tecmint b'permessi 0644.

Il-permessi jistgħu wkoll jiġu rappreżentati bl-użu ta' rappreżentazzjoni simbolika kif muri fl-aħħar linja.

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

Il-permessi fl-eżempju preċedenti jistgħu jiġu rappreżentati kif muri fl-aħħar linja, L-utent huwa assenjat permessi ta 'qari u kitba, il-grupp huwa assenjat permessi ta' kitba, u l-bqija tad-dinja hija assenjata permessi ta 'qari.

Modulu tal-Fajl

Il-modulu tal-fajls jintuża biex iwettaq ħafna operazzjonijiet tal-fajls inkluż il-ħolqien ta' fajls u direttorji, l-assenjazzjoni ta' permessi għall-fajls, u l-istabbiliment ta' symlinks.

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

Id-dramm t'hawn fuq joħloq fajl imsejjaħ tecmint.conf fid-direttorju /etc li jistabbilixxi permessi għal 0644.

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

Dan ineħħi jew iħassar il-fajl tecmint.conf.

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

Dan se joħloq direttorju fid-direttorju /etc li jistabbilixxi permessi għal 0777.

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

Il-play t'hawn fuq rikorsiv iħassar direttorju.

Lineinfile Modulu

Il-modulu lineinfile huwa utli meta trid tibdel linja waħda f'fajl. Jista 'jissostitwixxi linja eżistenti.

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

Il-logħob t'hawn fuq jistabbilixxi l-valur SELINUX għal diżattivat.

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

Dan iżid id-dħul 10.200.50.51 linux-console.net mal-fajl /etc/hosts.

Modulu Arkivju

Modulu ta' Arkivju jintuża għall-ħolqien ta' arkivju kompressat ta' fajls wieħed jew multipli. Jassumi li s-sors tal-kompressjoni jeżisti huwa preżenti fuq id-destinazzjoni fil-mira. Wara l-arkivjar, il-fajl tas-sors jista' aktar tard jitħassar jew jitneħħa bl-użu tad-dikjarazzjoni 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

Fil-play ta 'hawn fuq, il-fajl tas-sors /path/to/tecmint jitħassar wara li l-arkivju jkun komplut.

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

Dan joħloq fajl kompressat fil-format bz2 mill-fajl /path/to/tecmint.

Modulu Git

Il-modulu jamministra git checkouts tar-repożitorji tas-softwer.

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

Modulu tal-Kmand

Wieħed mill-moduli l-aktar użati komunement, il-modulu tal-kmand jieħu l-isem tal-kmand u wara segwit minn lista ta 'argumenti. Il-kmand huwa mgħoddi bl-istess mod kif ttajpja qoxra tal-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

Il-modulu tal-kmand jirkupra l-uptime tas-servers remoti.

Varjabbli biex Jirkupraw ir-Riżultati tal-Kmandi tat-Tmexxija

Normalment, Ansible playbooks jintużaw biex iwettqu kompiti fuq hosts ġestiti mingħajr ma jintwerew l-output fuq il-linja tal-kmand. Hemm każijiet, madankollu, li jista 'jkun meħtieġ li taqbad l-output jew ir-riżultati. F'din it-taqsima, aħna nimxu kif tista' taqbad l-output ta' playbook f'varjabbli u aktar tard turiha.

Reġistru ansible jintuża biex jinqabad l-output ta 'kompitu u ssalvah bħala varjabbli. Il-varjabbli minn hemm 'il quddiem se jkun fiha l-istdout tal-kompitu.

Per eżempju, ejjew nassumu li trid tiċċekkja l-użu tad-disk ta 'nodes ġestiti fid-direttorji ta' l-għeruq rispettivi billi tuża l-kmand df -Th /. Int ser tuża l-modulu 'kmand' biex tiddefinixxi l-kmand u 'reġistru' biex issalva l-output std f'varjabbli.

Biex turi l-kmand, se tuża l-modulu 'debug' flimkien mal-valur tar-ritorn stdout.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout

Issa, ejja nmexxi l-playbook. F'dan il-każ, semmejna l-playbook tagħna check_disk_space.yml.

# ansible-playbook check_disk_space.yml

Kif rajt, il-produzzjoni hija kollha jumbled up u jagħmilha diffiċli biex isegwu flimkien.

Biex tallinja l-output u tagħmilha aktar faċli biex tinqara, ibdel il-valur tar-ritorn stdout ma stdout_lines.

---

 - hosts: all
   become: yes

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

     - debug: var=df.stdout_lines

Uża Kundizzjonali biex tikkontrolla l-Eżekuzzjoni tal-Logħob

Eżatt bħal fil-lingwi ta 'programmar, dikjarazzjonijiet kundizzjonali huma użati meta aktar minn riżultat wieħed huwa possibbli. Ejja nagħtu ħarsa lejn uħud mid-dikjarazzjonijiet kundizzjonali użati b'mod komuni fil-playbooks Ansible.

Xi drabi, tista 'tkun trid twettaq kompiti fuq nodi speċifiċi u mhux oħrajn. Id-dikjarazzjoni kondizzjonali meta hija pjuttost faċli biex tużaha u timplimenta fi playbook. Meta tuża l-klawżola meta sempliċement iddikjara l-kundizzjoni ħdejn il-klawżola kif muri:

when: condition

Meta l-kundizzjoni tkun sodisfatta, allura l-kompitu jitwettaq fuq is-sistema remota.

Ejja naraw ftit eżempji:

---
- hosts: all

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

Id-dramm t'hawn fuq jinstalla Nginx webserver fuq hosts li jmexxu l-familja Debian ta 'distros.

Tista 'wkoll tuża l-operatur JEW u AND flimkien ma' meta l-istqarrija kondizzjonali.

---
- hosts: all

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

Meta tuża l-operatur AND, iż-żewġ dikjarazzjonijiet għandhom ikunu sodisfatti biex il-kompitu jiġi esegwit.

Id-dramm t'hawn fuq jinstalla Nginx fuq Nodes li jmexxu familja Debian ta 'OS li hija l-verżjoni 18.04. Ovvjament, dan se jkun Ubuntu 18.04.

Bl-operatur JEW, il-kompitu jiġi esegwit jekk tiġi sodisfatta xi waħda mill-kundizzjonijiet.

---
- hosts: all

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

Id-dramm t'hawn fuq jinstalla servers tal-web Nginx jew fuq il-familja ta 'OS Debian jew SUSE jew it-tnejn li huma.

NOTA: Dejjem kun żgur li tuża s-sinjal ta' ugwaljanza doppja == meta tittestja kundizzjoni.

Kondizzjonali f'linji

Il-kondizzjonali jistgħu jintużaw ukoll f'linja. Ngħidu pereżempju li għandek lista ta' pakketti multipli li jeħtieġ li jiġu installati fuq nodi remoti.

Fil-playbook hawn taħt, għandna firxa msejħa pakketti li fihom lista ta 'pakketti li jeħtieġ li jiġu installati. Dawn il-kompiti jitwettqu wieħed wara l-ieħor jekk il-klawżola meħtieġa hija ssettjata għal Veru.

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

Ikkonfigura l-Immaniġġjar ta' Żbalji

Xi drabi, il-kompiti jfallu meta jmexxu playbooks. Ejja nassumu li qed tmexxi 5 kompiti fuq 3 servers kif muri fil-playbook hawn taħt. Jekk iseħħ żball fuq il-kompitu 3 (Bidu tal-MySQL) fuq is-server 2, Ansible se jieqaf jeżegwixxi l-kompiti li fadal fuq is-server 2 u jipprova jlesti l-kompiti li fadal fuq il-bqija tas-servers.

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

Jekk trid konsistenza fl-eżekuzzjoni tal-playbook, pereżempju, waqqaf l-eżekuzzjoni ta 'playbook, jekk wieħed mis-servers ifalli, żid l-għażla.

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

Dan il-mod, jekk kompitu wieħed jonqos fuq server wieħed, Ansible se jwaqqaf l-eżekuzzjoni tal-playbook kollu fuq is-servers kollha u joħroġ.

Jekk tixtieq li l-playbook jinjora l-iżbalji u tipproċedi biex tesegwixxi s-sett ta' kompiti li jifdal, imbagħad uża l-għażla ignore_errors: True.

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

Oħloq Playbooks biex Ikkonfigura s-Sistemi għal Stat Speċifikat

F'din it-taqsima, inħarsu lejn xi għażliet addizzjonali li huma disponibbli meta tmexxi playbook.

Ejja nibdew bil-modalità Iċċekkja jew l-għażla ta 'Tmexxija Niexfa. L-għażla dry run jew check mode tintuża meta tmexxi playbook biex tiċċekkja jekk humiex se jiltaqgħu magħhom xi żbalji u jekk hemmx xi bidliet li se jsiru fuq l-hosts ġestiti. Madankollu, ma jagħmel l-ebda tibdil fin-nodi remoti.

Pereżempju, biex nixxef tħaddem playbook imsejjaħ httpd.yml li jinstalla u jibda t-tħaddim tal-webserver Apache:

# ansible-playbook httpd.yml --check

L-għażla l-oħra li għandna bżonn inħarsu lejha hija l-għażla --start-at-task. Dan jintuża meta jiġi speċifikat l-isem tal-kompitu li l-playbook għandu jibda jew jibda minnu.

Ejja nieħdu eżempju: Il-playbook hawn taħt jispjega 2 kompiti: L-ewwel play jinstalla s-server tal-web Apache u t-tieni jinstalla l-utilità htop.

---
 - name: Install httpd

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

- name: Install htop

      yum:  
      name: htop
      state: started

Jekk trid taqbeż l-installazzjoni tas-server tal-web Apache u minflok tinstalla l-utilità ta 'htop, run:

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

Fl-aħħar nett, tista 'ttikketta l-kompiti jew id-drammi tiegħek billi żżid l-għażla tat-tikketti mal-playbook tiegħek kif muri. Dan ikun utli meta jkollok playbook pjuttost kbir u trid tmexxi kompiti speċifiċi mill-playbook kollu.

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

Biex tħalli barra t-tikketti uża l-għażliet --skip-tags kif muri.

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

F'dan is-suġġett, ħadna permezz tal-moduli użati b'mod komuni f'Ansible, kif tirkupra stdout mill-eżekuzzjoni ta 'playbook għall-analiżi, billi tuża kondizzjonali fil-playbook u kif timmaniġġja l-iżbalji li jistgħu jseħħu meta tmexxi l-kompiti. Fl-aħħarnett, aħna qasmet il-konfigurazzjoni tal-playbooks u kif tista 'tuża għażliet addizzjonali biex tiddeċiedi liema kompiti tmexxi jekk m'għandekx il-ħsieb li tmexxi l-playbook kollu.