Kā izveidot anonimiskas atskaņošanas un atskaņošanas grāmatas - 5. daļa
Šajā Ansible Series 5. daļā mēs paskaidrosim, kā izveidot Ansible Play un Playbooks, izmantojot Ansible moduļus.
Iespējamie kuģi ar atsevišķiem skriptiem, kurus sauc par moduļiem un kurus atskaņošanas grāmatās izmanto specializētu uzdevumu veikšanai attālos mezglos.
Moduļi ir noderīgi tādu uzdevumu automatizēšanai kā paku pārvaldība, failu arhivēšana un kopēšana, pieminot tikai dažus. Tie ļauj jums pielāgot konfigurācijas failus un pārvaldīt tādas ierīces kā maršrutētājus, slēdžus, slodzes līdzsvarotājus, ugunsmūrus un daudzas citas ierīces.
Šīs apakštēmas mērķis ir sniegt jums pārskatu par dažādiem uzdevumiem, kurus var paveikt ar Ansible moduļiem:
Pakotņu pārvaldība Linux
Iepakojuma pārvaldība ir viens no būtiskākajiem un biežākajiem uzdevumiem, ko veic sistēmu administratori. Iespējamie kuģi ar moduļiem, kas palīdz izpildīt pakotņu pārvaldības uzdevumus gan RedHat, gan Debian sistēmās.
Tos ir salīdzinoši viegli uzminēt. Ir apt modulis YUM pakotņu pārvaldībai un dnf modulis, kas saistīts ar jaunākiem RHEL izplatījumiem.
Tālāk ir sniegti daži piemēri, kā moduļus var izmantot atskaņošanas grāmatā:
--- - 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
Pakalpojuma modulis
Pakalpojuma modulis ļauj sistēmas administratoriem sākt, apturēt, atjaunināt, uzlabot un atkārtoti ielādēt pakalpojumus sistēmā.
--- - 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
Kopēt moduli
Kā norāda nosaukums, kopēšanas modulis kopē failus no vienas vietas attālajā datorā uz citu vietu tajā pašā mašīnā.
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: '0644'
Spēļu grāmata kopē konfigurācijas failu tecmint.conf no/etc/files/direktorija uz/srv/direktoriju kā tecmint lietotāju ar 0644 atļaujām.
Atļaujas var attēlot arī, izmantojot simbolisko attēlojumu, kā parādīts pēdējā rindā.
--- - 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
Atļaujas iepriekšējā piemērā var attēlot, kā parādīts pēdējā rindā. Lietotājam tiek piešķirtas lasīšanas un rakstīšanas atļaujas, grupai tiek piešķirtas rakstīšanas atļaujas un pārējai pasaulei tiek piešķirtas lasīšanas atļaujas.
Failu modulis
Failu moduli izmanto, lai veiktu daudzas failu darbības, tostarp failu un direktoriju izveidi, failu atļauju piešķiršanu un simlinku iestatīšanu.
--- - name: Change file ownership, group, and permissions file: path: /etc/tecmint.conf owner: tecmint group: tecmint mode: '0644'
Iepriekš atskaņošana izveido failu ar nosaukumu tecmint.conf direktorijā/etc, kurā iestatītas atļaujas uz 0644.
--- - name: Remove file (delete file) file: path: /etc/tecmint.conf state: absent
Tas noņem vai izdzēš failu tecmint.conf.
--- - name: create a directory if it doesn’t exist file: path: /etc/mydirectory State: directory mode: '0777'
Tas izveidos direktoriju direktorijā/etc, kurā iestatītas atļaujas uz 0777.
--- - name: Recursively deleting a directory file: path: /etc/tecmint.conf state: absent
Iepriekš atskaņotais rekursīvi izdzēš direktoriju.
Lineinfile modulis
Lineinfile modulis ir noderīgs, ja vēlaties mainīt vienu rindiņu failā. Tas var aizstāt esošo līniju.
--- - name: Ensure SELinux is set to enforcing mode lineinfile: path: /etc/selinux/config regexp: '^SELINUX=' line: SELINUX=disabled
Iepriekš atskaņotajā spēlē SELINUX vērtība tiek atspējota.
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
Tādējādi failam/etc/hosts tiek pievienots ieraksts 10.200.50.51 linux-console.net.
Arhīva modulis
Arhīva moduli izmanto, lai izveidotu saspiestu viena vai vairāku failu arhīvu. Tiek pieņemts, ka mērķa galamērķī ir saspiešanas avots. Pēc arhivēšanas avota failu vēlāk var izdzēst vai noņemt, izmantojot paziņojumu 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
Iepriekš minētajā spēlē avota fails/path/to/tecmint tiek izdzēsts pēc arhīva pabeigšanas.
- name: Create a bz2 archive of /path/to/tecmint archive: path: /path/to/tecmint format: bz2
Tādējādi no faila/path/to/tecmint tiek izveidots saspiests fails bz2 formātā.
Git modulis
Modulis pārvalda programmatūras krātuvju kases.
- git: repo: 'https://foosball.example.org/path/to/repo.git' dest: /srv/checkout version: release-0.22
Komandu modulis
Viens no visbiežāk izmantotajiem moduļiem komandu modulis uzņem komandas nosaukumu un vēlāk seko argumentu saraksts. Komanda tiek nodota tāpat kā jūs ievadāt Linux čaulā.
- 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
Komandu modulis izgūst attālo serveru darbības laiku.
Mainīgie komandu darbības rezultātu izgūšanai
Parasti Ansible playbooks tiek izmantotas, lai izpildītu uzdevumus pārvaldītajos resursdatoros, neizrādot izvadi komandrindā. Tomēr ir gadījumi, kad jums var prasīt iegūt rezultātu vai rezultātus. Šajā sadaļā mēs iepazīstinām jūs ar to, kā jūs varat attēlot atskaņošanas grāmatas iznākumu mainīgajā un vēlāk to parādīt.
Uzdevuma izvades tveršanai un mainīgā saglabāšanai tiek izmantots reģistrs. Pēc tam mainīgais satur uzdevuma standartu.
Piemēram, pieņemsim, ka vēlaties pārbaudīt pārvaldīto mezglu diska lietojumu attiecīgajos saknes direktorijos, izmantojot komandu df -Th/
. Jūs izmantosiet moduli ‘komanda’
, lai definētu komandu, un ‘register’
, lai standarta izvadi saglabātu mainīgajā.
Lai parādītu komandu, jūs izmantosiet moduli ‘atkļūdot’
blakus stdout atgriešanās vērtībai.
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout
Tagad palaidīsim lugu grāmatu. Šajā gadījumā mēs esam nosaukuši mūsu spēļu grāmatu check_disk_space.yml.
# ansible-playbook check_disk_space.yml
Kā redzējāt, viss produkts ir sajaukts un apgrūtina sekošanu līdzi.
Lai izlīdzinātu izvadi un atvieglotu lasīšanu, nomainiet stdout atgriešanās vērtību ar stdout_lines.
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout_lines
Izmantojiet nosacījumus, lai kontrolētu atskaņošanas izpildi
Tāpat kā programmēšanas valodās, nosacītie paziņojumi tiek izmantoti, ja ir iespējami vairāki rezultāti. Apskatīsim dažus no Ansible playbooks parasti izmantotajiem nosacītajiem izteikumiem.
Dažreiz, iespējams, vēlēsities veikt uzdevumus noteiktos mezglos, nevis citos. Nosacījuma when
nosacījumu ir diezgan viegli izmantot un ieviest atskaņošanas grāmatā. Izmantojot klauzulu when
, vienkārši paziņojiet nosacījumu blakus klauzulai, kā parādīts:
when: condition
Kad nosacījums ir izpildīts, uzdevums tiek veikts attālajā sistēmā.
Apskatīsim dažus piemērus:
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian”
Iepriekš aprakstītā spēle Nginx tīmekļa serveri instalē saimniekdatoros, kas vada Debian distros saimi.
Varat arī izmantot operatoru OR
un AND
blakus nosacījuma priekšrakstam.
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” and ansible_distribution_version == “18.04”
Izmantojot UN
operatoru, lai izpildītu uzdevumu, ir jāapmierina abi apgalvojumi.
Iepriekš atskaņotajā versijā Nginx tiek instalēts mezglos, kuros darbojas OS Debian saime, kuras versija ir 18.04. Acīmredzot tas būs Ubuntu 18.04.
Izmantojot operatoru OR
, uzdevums tiek izpildīts, ja ir izpildīts kāds no nosacījumiem.
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” or Ansible_os_family == “SUSE”
Iepriekš atskaņotajā versijā Nginx tīmekļa serveri tiek instalēti vai nu Debian, vai SUSE OS saitē, vai abos.
PIEZĪME. Pārbaudot nosacījumu, vienmēr izmantojiet dubultās vienlīdzības zīmi ==
.
Nosacījumi cilpās
Nosacījumus var izmantot arī cilpā. Pieņemsim, ka jums ir vairāku pakotņu saraksts, kas jāinstalē attālajos mezglos.
Zemāk esošajā spēļu grāmatā mums ir masīvs, ko sauc par pakotnēm, kas satur instalējamo paku sarakstu. Šie uzdevumi tiks veikti viens pēc otra, ja prasītā klauzula ir iestatīta uz True.
--- - 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 }}”
Konfigurējiet kļūdu apstrādi
Dažreiz uzdevumi neizdodas, palaižot playbooks. Pieņemsim, ka jūs veicat 5 uzdevumus 3 serveros, kā parādīts zemāk esošajā spēļu grāmatā. Ja 2. servera 3. uzdevumā (MySQL palaišana) rodas kļūda, Ansible pārtrauks izpildīt atlikušos uzdevumus 2. serverī un mēģinās izpildīt atlikušos uzdevumus pārējos serveros.
--- - 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 >>
Piemēram, ja vēlaties, lai atskaņošanas grāmatas izpilde būtu konsekventa, pārtrauciet atskaņošanas grāmatas izpildi, ja kāds no serveriem neizdodas, pievienojiet opciju.
--- - name: Install Software packages hosts: server1, server2, server3 any_errors_fatal: true tasks:
Tādā veidā, ja viens uzdevums neizdodas vienā serverī, Ansible pārtrauks visas atskaņošanas grāmatas izpildi visos serveros un izies.
Ja vēlaties, lai atskaņošanas grāmata ignorētu kļūdas un turpinātu izpildīt atlikušo uzdevumu kopu, izmantojiet opciju ignore_errors: True.
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> ignore_errors: True
Izveidojiet Playbooks, lai konfigurētu sistēmas noteiktā stāvoklī
Šajā sadaļā mēs aplūkojam dažas papildu iespējas, kas ir pieejamas, palaižot atskaņošanas grāmatu.
Sāksim ar opciju Pārbaudes režīms vai Sausā palaišana. Sausās palaišanas vai pārbaudes režīma opcija tiek izmantota, palaižot atskaņošanas grāmatu, lai pārbaudītu, vai nav radušās kļūdas un vai pārvaldītajos resursdatoros tiks veiktas izmaiņas. Tomēr tas neveic nekādas izmaiņas attālajos mezglos.
Piemēram, lai sausā veidā palaistu atskaņošanas grāmatu ar nosaukumu httpd.yml
, kas instalē un palaiž Apache tīmekļa servera palaišanu:
# ansible-playbook httpd.yml --check
Otra iespēja, kas mums jāaplūko, ir opcija --start-at-task
. To lieto, norādot uzdevuma nosaukumu, ar kuru jāsāk vai jāsāk atskaņošanas grāmatai.
Ņemsim piemēru: Zemāk esošajā spēļu grāmatā ir izklāstīti 2 uzdevumi: Pirmajā spēlē tiek instalēts Apache tīmekļa serveris, bet otrajā - utilīta htop.
--- - name: Install httpd hosts: all tasks: yum: name: httpd state: Installed - name: Install htop yum: name: htop state: started
Ja vēlaties izlaist Apache tīmekļa servera instalēšanu un tā vietā instalēt htop utilītu, palaidiet:
# ansible-playbook playbook.yml --start-at-task “Install htop”
Visbeidzot, jūs varat atzīmēt savus uzdevumus vai atskaņojumus, pievienojot atskaņošanas grāmatai opciju tags, kā parādīts. Tas ir noderīgi, ja jums ir diezgan liela spēļu grāmata un vēlaties izpildīt konkrētus uzdevumus no visas spēles grāmatas.
--- - 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"
Lai izlaistu tagus, izmantojiet opcijas --skip-tags
, kā parādīts.
# ansible-playbook playbook.yml --skip-tags "Install"
Šajā tēmā mēs iepazīstinājām jūs ar Ansible bieži izmantotajiem moduļiem, kā izgūt stdout no playbook izpildes analīzei, izmantojot nosacījumus playbook un kā pārvaldīt kļūdas, kas var rasties, izpildot uzdevumus. Visbeidzot, mēs pārskatījām atskaņošanas grāmatu konfigurāciju un to, kā jūs varat izmantot papildu opcijas, lai izlemtu, kuri uzdevumi jāveic, ja jūs neplānojat palaist visu atskaņošanas grāmatu.