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.