Hvernig á að búa til Ansible leikrit og leikrit - hluti 5
Í þessum hluta 5 af Ansible seríunni munum við útskýra hvernig á að búa til Ansible leikrit og leikbækur með því að nota Ansible einingar.
Ansible skip með sjálfstæðar forskriftir sem kallast einingar sem eru notaðar í leikbókum til að framkvæma sérhæfð verkefni á ytri hnútum.
Einingar koma sér vel til að gera sjálfvirk verkefni eins og pakkastjórnun, geymslu og afrita skrár svo aðeins sé nefnt. Þeir gera þér kleift að gera fínstillingar á stillingarskrám og stjórna tækjum eins og beinum, rofum, álagsjafnara, eldveggjum og fjölda annarra tækja.
Markmið þessa undirefnis er að gefa þér yfirsýn yfir ýmis verkefni sem hægt er að framkvæma með Ansible einingum:
Pakkastjórnun í Linux
Pakkastjórnun er eitt mikilvægasta og algengasta verkefnið sem kerfisstjórar bera með sér. Ansible er með einingar sem hjálpa þér að framkvæma pakkastjórnunarverkefni bæði í RedHat og Debian byggðum kerfum.
Þeir eru tiltölulega auðvelt að giska á. Það er viðeigandi eining fyrir YUM pakkastjórnun og dnf eining sem tengist nýrri RHEL dreifingu.
Hér að neðan eru nokkur dæmi um hvernig hægt er að nota einingarnar í leikbók:
--- - 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
Þjónustueining
Þjónustueiningin gerir kerfisstjórum kleift að ræsa, stöðva, uppfæra, uppfæra og endurhlaða þjónustu á kerfinu.
--- - 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
Afrita mát
Eins og nafnið gefur til kynna afritar afritareining skrár frá einum stað á ytri vélinni á annan stað á sömu vél.
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: '0644'
Leikbókin afritar stillingarskrána tecmint.conf úr /etc/files/ möppunni í /srv/ möppuna sem tecmint notanda með 0644 heimildum.
Einnig er hægt að tákna heimildir með táknrænni framsetningu eins og sýnt er í síðustu línu.
--- - 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
Heimildirnar í fyrra dæmi má tákna eins og sýnt er í síðustu línu, Notandanum er úthlutað les- og skrifheimildum, hópnum er úthlutað skrifheimildum og umheiminum er úthlutað lesheimildum.
Skráareining
Skráareiningin er notuð til að framkvæma margar skráaraðgerðir, þar á meðal að búa til skrár og möppur, úthluta skráarheimildum og setja tákntengla.
--- - name: Change file ownership, group, and permissions file: path: /etc/tecmint.conf owner: tecmint group: tecmint mode: '0644'
Ofangreind spilun býr til skrá sem heitir tecmint.conf í /etc möppunni sem stillir heimildir á 0644.
--- - name: Remove file (delete file) file: path: /etc/tecmint.conf state: absent
Þetta fjarlægir eða eyðir skránni tecmint.conf.
--- - name: create a directory if it doesn’t exist file: path: /etc/mydirectory State: directory mode: '0777'
Þetta mun búa til möppu í /etc möppunni sem stillir heimildir á 0777.
--- - name: Recursively deleting a directory file: path: /etc/tecmint.conf state: absent
Ofangreind spilun eyðir möppu endurtekið.
Lineinfile Module
Lineinfile einingin er gagnleg þegar þú vilt breyta einni línu í skrá. Það getur komið í stað núverandi línu.
--- - name: Ensure SELinux is set to enforcing mode lineinfile: path: /etc/selinux/config regexp: '^SELINUX=' line: SELINUX=disabled
Spilunin hér að ofan setur SELINUX gildi á óvirkt.
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
Þetta bætir færslunni 10.200.50.51 linux-console.net við /etc/hosts skrána.
Skjalasafnseining
Skjalasafnseining er notuð til að búa til þjappað skjalasafn með einni eða mörgum skrám. Það gerir ráð fyrir að samþjöppunargjafinn sé til staðar sé til staðar á áfangastaðnum. Eftir geymslu er hægt að eyða upprunaskránni síðar eða fjarlægja hana með setningunni 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
Í spiluninni hér að ofan er frumskránni /path/to/tecmint eytt eftir að geymslunni er lokið.
- name: Create a bz2 archive of /path/to/tecmint archive: path: /path/to/tecmint format: bz2
Þetta býr til þjappaða skrá á bz2 sniði úr /path/to/tecmint skránni.
Git Module
Einingin stjórnar git-úttektum á hugbúnaðargeymslum.
- git: repo: 'https://foosball.example.org/path/to/repo.git' dest: /srv/checkout version: release-0.22
Skipunareining
Ein af algengustu einingunum, skipanaeiningin tekur skipanafnið og síðar fylgt eftir með lista yfir rök. Skipunin er samþykkt á sama hátt og þú myndir slá inn í Linux skel.
- 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
Skipunareiningin sækir spennutíma ytri netþjóna.
Breytur til að sækja niðurstöður hlaupandi skipana
Venjulega eru Ansible leikbækur notaðar til að framkvæma verkefni á stýrðum gestgjöfum án þess að birta úttakið á skipanalínunni. Hins vegar eru dæmi um að þú gætir þurft að fanga úttakið eða niðurstöðurnar. Í þessum hluta göngum við í gegnum hvernig þú getur fanga úttak leikbókar í breytu og birt hana síðar.
Ansible skrá er notuð til að fanga úttak verkefnis og vista það breytu. Breytan mun síðan innihalda stdout verkefnisins.
Til dæmis, við skulum gera ráð fyrir að þú viljir athuga disknotkun á stýrðum hnútum í viðkomandi rótarskrám með df -Th /
skipuninni. Þú ætlar að nota ‘skipun’
eininguna til að skilgreina skipunina og ‘register’
til að vista std úttakið í breytu.
Til að birta skipunina muntu nota ‘debug’
eininguna ásamt stdout-skilagildinu.
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout
Nú skulum við keyra leikbókina. Í þessu tilviki höfum við nefnt leikbókina okkar check_disk_space.yml.
# ansible-playbook check_disk_space.yml
Eins og þú hefur séð er framleiðslan öll í rugli og gerir það erfitt að fylgjast með.
Til að samræma úttakið og gera það auðveldara að lesa skaltu skipta út stdout skilgildinu fyrir stdout_lines.
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout_lines
Notaðu skilyrði til að stjórna framkvæmd leiksins
Rétt eins og í forritunarmálum eru skilyrtar staðhæfingar notaðar þegar fleiri en ein niðurstaða er möguleg. Við skulum skoða nokkrar af algengum skilyrtum yfirlýsingum í Ansible leikbókum.
Stundum gætirðu viljað framkvæma verkefni á tilteknum hnútum en ekki öðrum. Skilyrt setningin when
er frekar auðveld í notkun og útfærsla í leikbók. Þegar þú notar when
setninguna skaltu einfaldlega lýsa yfir ástandinu sem liggur að setningunni eins og sýnt er:
when: condition
Þegar skilyrðinu er fullnægt er verkefnið framkvæmt á ytra kerfinu.
Við skulum skoða nokkur dæmi:
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian”
Leikritið hér að ofan setur upp Nginx vefþjón á vélum sem keyra Debian fjölskyldu dreifingar.
Þú getur líka notað OR
og AND
rekstraraðilana ásamt þegar skilyrtu yfirlýsingunni.
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” and ansible_distribution_version == “18.04”
Þegar AND
stjórnandinn er notaður verða báðar setningarnar að vera uppfylltar til að hægt sé að framkvæma verkefnið.
Leikritið hér að ofan setur upp Nginx á hnútum sem keyra Debian fjölskyldu OS sem er útgáfa 18.04. Augljóslega mun þetta vera Ubuntu 18.04.
Með OR
rekstraraðila er verkefnið framkvæmt ef annað hvort skilyrðanna er uppfyllt.
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” or Ansible_os_family == “SUSE”
Leikritið hér að ofan setur upp Nginx vefþjóna annað hvort á Debian eða SUSE stýrikerfisfjölskyldu eða þeim báðum.
ATHUGIÐ: Gættu þess alltaf að nota tvöfalda jafnréttismerkið ==
þegar ástand er prófað.
Skilyrði í lykkjum
Skilyrði er einnig hægt að nota í lykkju. Segjum til dæmis að þú sért með lista yfir marga pakka sem þarf að setja upp á ytri hnúta.
Í leikbókinni hér að neðan höfum við fylki sem kallast pakkar sem inniheldur lista yfir pakka sem þarf að setja upp. Þessi verkefni verða unnin hvert á eftir öðru ef nauðsynleg ákvæði er stillt á 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 }}”
Stilla villumeðferð
Stundum mistakast verkefni þegar spilabækur eru keyrðar. Gerum ráð fyrir að þú sért að keyra 5 verkefni á 3 netþjónum eins og sýnt er í leikbókinni hér að neðan. Ef villa kemur upp í verkefni 3 (ræsir MySQL) á þjóni 2 mun Ansible hætta að framkvæma þau verkefni sem eftir eru á þjóni 2 og reyna að klára þau verkefni sem eftir eru á hinum þjónunum.
--- - 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 >>
Ef þú vilt samkvæmni í framkvæmd leikbókarinnar, til dæmis, stöðvaðu framkvæmd leikbókar, ef einhver af þjónunum bilar, bættu við valkostinum.
--- - name: Install Software packages hosts: server1, server2, server3 any_errors_fatal: true tasks:
Á þennan hátt, ef eitt verkefni mistekst á einum netþjóni, mun Ansible stöðva framkvæmd allrar leikbókarinnar á öllum netþjónum og hætta.
Ef þú vilt að leikbókin hunsi villurnar og haldi áfram að framkvæma þau verk sem eftir eru, notaðu þá valkostinn ignore_errors: True.
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> ignore_errors: True
Búðu til Playbooks til að stilla kerfi í tilgreint ástand
Í þessum hluta skoðum við nokkra viðbótarvalkosti sem eru í boði þegar leikbók er keyrð.
Við skulum byrja á Athugaðu stillingu eða Dry run valkostinum. Valmöguleikinn fyrir þurrkeyrslu eða athugunarham er notaður þegar spilunarbók er keyrð til að athuga hvort einhverjar villur komi upp og hvort einhverjar breytingar séu gerðar á stýrðum vélum. Það gerir hins vegar engar breytingar á ytri hnútunum.
Til dæmis, til að þurrkeyra leikbók sem heitir httpd.yml
sem setur upp og ræsir Apache vefþjóninn:
# ansible-playbook httpd.yml --check
Hinn valmöguleikinn sem við þurfum að skoða er valmöguleikinn --byrja-við-verkefni
. Þetta er notað þegar tilgreint er heiti verkefnisins sem leikbókin á að byrja eða byrja á.
Tökum dæmi: Leikbókin hér að neðan lýsir 2 verkefnum: Fyrsta leikritið setur upp Apache vefþjón og annað setur upp htop tólið.
--- - name: Install httpd hosts: all tasks: yum: name: httpd state: Installed - name: Install htop yum: name: htop state: started
Ef þú vilt sleppa því að setja upp Apache vefþjón og setja í staðinn upp htop tól keyra:
# ansible-playbook playbook.yml --start-at-task “Install htop”
Að lokum geturðu merkt verkefnin þín eða leikrit með því að bæta merkisvalkostinum við leikbókina þína eins og sýnt er. Þetta kemur sér vel þegar þú ert með nokkuð stóra leikbók og þú vilt keyra ákveðin verkefni úr allri leikbókinni.
--- - 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"
Til að sleppa merkjunum skaltu nota --skip-tags
valkostina eins og sýnt er.
# ansible-playbook playbook.yml --skip-tags "Install"
Í þessu efni fórum við í gegnum algengu einingarnar í Ansible, hvernig á að sækja stdout úr framkvæmd leikbókar til greiningar, með því að nota skilyrði í leikbókinni og hvernig á að stjórna villum sem geta komið upp þegar verkefni eru keyrð. Að lokum rifjuðum við upp uppsetningu leikbóka og hvernig þú getur notað fleiri valkosti til að ákveða hvaða verkefni á að keyra ef þú ætlar ekki að keyra alla leikbókina.