task automation using ansible playbooks
Naučte sa automatizáciu úloh pomocou hracích knižiek Ansible a trezorov Ansible na zabezpečenie citlivých údajov:
V našom predchádzajúcom tutoriáli Ansible # 1 , dozvedeli sme sa o rôznych komponentoch Ansible a o tom, ako nainštalovať a nakonfigurovať tento nástroj s rôznymi modulmi. Pozreli sme sa tiež na to, ako sa moduly používajú na vykonávanie jednej funkcie alebo úlohy.
V tejto časti sa pozrieme na automatizáciu úloh pomocou hracích knižiek Ansible a trezorov Ansible na zabezpečenie citlivých údajov.
Navrhované čítanie => Sprievodca učením na DevOps
falošný generátor účtu Gmail a heslo
Čo sa dozviete:
Prípadné príručky
Videli sme, ako spustiť jednotlivé úlohy alebo jednorazové úlohy pomocou modulov, ale čo ak potrebujete vykonať viac úloh? Príručky Playbooks pomáhajú pri ich spúšťaní skriptovaným spôsobom.
Príručky definujú premenné, konfigurácie, kroky nasadenia, priraďujú roly, vykonávajú viac úloh. Pre Napr. KOPÍROVAŤ / ODSTRÁNIŤ súbory a priečinky, inštalovať balíčky, spúšťať služby. Primárne sú teda definované hracie knižky, ktoré organizujú kroky na viac počítačov alebo serverov a všetky ich dostanú do určitého požadovaného stavu.
Príručka je napísaná v jazyku Formát YAML s príponou súboru .yml. Je potrebné byť veľmi opatrný pri formáte a zarovnaní, vďaka čomu je veľmi citlivý.
Obsahuje nasledujúce časti:
- Každá príručka začína tromi pomlčkami „-“
- Hostiteľská časť - Definuje cieľové počítače, na ktorých by sa hracia kniha mala spustiť. Toto je založené na súbore zásob Ansible.
- Variabilná sekcia - Toto je voliteľné a môžu deklarovať všetky premenné potrebné v príručke. Pozrime sa tiež na niektoré príklady.
- Časť Úlohy - Táto časť obsahuje zoznam všetkých úloh, ktoré by sa mali vykonať na cieľovom počítači. Špecifikuje použitie modulov. Každá úloha má názov, ktorý predstavuje malý popis toho, čo úloha urobí, a bude uvedená v zozname, keď je hracia kniha spustená.
Napríklad,
Ak potrebujeme nainštalovať a nakonfigurovať Tomcat, bude pozostávať z nasledujúcich úloh:
- Stiahnite si a nainštalujte Tomcat
- Nakonfigurujte Tomcat
- Spustite Tomcat
Podobne aj ďalšíPríkladpre použitie Tomcatu používaného na nepretržité doručovanie DevOps môžu byť tieto úlohy:
- Zastaviť aplikáciu
- Odinštalujte aplikáciu
- Nainštalujte novú verziu súboru WAR.
- Spustiť aplikáciu
Ukážkový formát príručky
--- Playbook start - hosts: webservers Specify the group or servers as per inventory to execute tasks become: true tasks: - name: Copy Tomcat ZIP file to install location Short description of the task copy: src=/home/ansible/niranjan/apache-tomcat-8.5.31.tar.gz dest=/opt/niranjan/tomcat
Vo vyššie uvedenom skripte sa pozrite na zarovnanie začínajúce zhora a musí sa zachovať, inak získate syntaktické chyby.
Na spustenie ľubovoľnej príručky použite nasledujúci príkaz
$ ansible-playbook
Na kontrolu playbooku chyby syntaxe
$ ansible-playbook --syntax-check
Ak chcete zobraziť zoznam hostiteľov
$ ansible-playbook --list-hosts
Tvorba príručiek s príkladmi
V tejto časti uvidíme niekoľko príkladov, ako vytvárať príručky, ktoré by ste mohli pravidelne potrebovať. Tieto hracie knižky bude potrebné vytvoriť a spustiť z ovládacieho zariadenia.
Uložte všetky nižšie uvedené príručky do súboru .yml a spustite ich podľa obrázka nižšie.
$ ansible-playbook filename.yml
Príklad 1: Vytvorte súbor na cieľových počítačoch alebo serveroch, ako je uvedené v súbore inventára a skupine webového servera, uložte nasledujúci kód s príponou .yml a spustite príručku.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
Vo vyššie uvedenom príklade sme použili spis modul na vytvorenie súboru.
Príklad 2: Vytvorte adresár s režimom 775 a vlastníkom / skupinou ako možným.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Príklad 3: Vytvorte viac adresárov. Na vytvorenie viacerých adresárov s jednou úlohou môžete použiť slučku s_položkami vyhlásenie. Takže keď spustíte nižšie uvedenú príručku, bude sa interpretovať ako 3 rôzne úlohy.
--- - hosts: webservers become: true tasks: - name: Create multiple directories file: path={{item}} state=directory with_items: - '/home/ansible/vn1' - '/home/ansible/vn2' - '/home/ansible/vn3'
Príklad 4: Vytvorte používateľa. Pozrime sa na používateľ modul na vytváranie a mazanie používateľov v príručke.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Príklad 5: Odstrániť používateľa. Odstránenie používateľa je veľmi jednoduché a bude potrebovať štát byť nastavený na neprítomný . Toto je ekvivalentné s userdel príkaz v Linuxe.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
Vo vyššie uvedenej príručke odobrať = áno odstráni domovský adresár a sila = áno odstráni súbory v adresári.
Príklad 6: Pomocou modulu kopírovania skopírujte obsah do súboru.
Ak potrebujete skopírovať súbor na cieľové počítače alebo servery, použite src a cieľ v module kopírovania.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Napríklad,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Príklad 7: Nahraďte všetky inštancie reťazca.
Použitím vymeniť modul môžeme nahradiť slovo iným slovom. Nahradzovací modul bude vyžadovať 3 parametre, tj. „Cesta“, „regexp“ (na vyhľadanie konkrétneho slova) a „nahradiť“ (poskytnutie iného slova na nahradenie).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Príklad 8: Archivujte alebo ZIP súbory a priečinky
Používanie možností archív modul môžete komprimovať súbory alebo priečinky do formátu „zip“, „.gz“ alebo „bz2“.
b strom vs b + strom
Poznámka : Súbory alebo priečinky, ktoré sa majú komprimovať, by mali byť k dispozícii na cieľových serveroch a mali by mať nainštalované balíčky pre súbory tar, bzip2, gzip a zip. Pre inštaláciu týchto balíkov môžete mať samostatnú úlohu v príručke.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Vyššie uvedená príručka komprimuje súbor niranjan.txt na súbor niranjan.zip
--- - hosts: all tasks: - name: Ansible zip multiple files example archive: path: - /home/ansible/niranjan1.txt - /home/ansible/niranjan2.txt dest: /home/ansible/niranjan.zip format: zip
Vyššie uvedená príručka komprimuje viac súborov do súboru niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Vyššie uvedená príručka komprimuje všetky súbory v adresári / home / ansible.
Príklad 9: Práca s dátumom a časovou pečiatkou
Používanie systémového dátumu a časovej pečiatky pomáha pri určitých stavoch alebo prihlasovacích účtoch. Možné fakty poskytujú prístup na vzdialený alebo cieľový server s dátumom a časom. Môžeme teda použiť ladiaci modul vytlačiť výstup spolu s kde atribút, ako je uvedené nižšie.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Hore uvedená príručka zobrazuje dátum.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Vyššie uvedená príručka zobrazuje čas.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Vyššie uvedená príručka vytvorí dynamický súbor na základe aktuálneho dátumu pre Napr . niranjan2018-07-15.log
Príklad 10: Príklad premenných
Premenné sa používajú na ukladanie hodnôt. V nasledujúcom príklade deklarujem premennú názov s hodnotou niranjan . Výstup bude niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Môžeme tiež mať pole alebo zoznam premenných, ako je uvedené nižšie Príklad .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indexovanie poľa začína od nuly (0). Preto bude výstupom vo vyššie uvedenom príklade Niranjan.
Príklad 11: Registrovať premenné
Môžeme tiež zachytiť výstup ľubovoľnej úlohy do premennej registra.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Poznámka: Na zobrazenie - použitie atribútu msg a na zachytenie akejkoľvek hodnoty použite atribút var v module - debug
Príklad 12: Príručka na inštaláciu editora vim a GIT na cieľové servery alebo počítače.
V tejto príručke sme použili mňam na inštaláciu najnovšej verzie softvérových balíkov.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Príklad 13: Nainštalujte server Apache. Uložte si nižšie uvedený kód a spustite playbook, ako je uvedené nižšie.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Okrem mňam modul, služba modul sa tiež používa na spustenie služby httpd. Úlohy prebiehajú zhora nadol synchrónne.
Príklad 14: Nainštalujte JDK
Nasledujúca príručka sa bude automatizovať a nainštaluje JDK 8 na všetky cieľové počítače alebo servery. JDK je predpokladom pre väčšinu ostatných softvérových balíkov ako Maven alebo Tomcat.
--- - hosts: webservers become: true vars: download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm tasks: - name: Download JDK 8 RPM file command: 'wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' {{download_url}} ' - name: Install JDK 8 command: 'rpm -ivh jdk-8u171-linux-x64.rpm'
Príklad 15: Nainštalujte si Maven
Vykonávanými úlohami je stiahnutie súboru maven z adresy URL pomocou súboru get_url modul, extrahujte stiahnutý súbor, presuňte ho do menšieho adresára, aktualizujte a spustite profil, kde je maven pridaný k ceste.
--- - hosts: webservers become: true tasks: - name: Download Maven get_url: url=http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest=/opt/niranjan/apache-maven-3.5.3-bin.tar.gz - name: Extract Maven command: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C /opt/niranjan - name: Move to a smaller directory command: mv /opt/niranjan/apache-maven-3.5.3 /opt/niranjan/maven - name: Update Profile copy: content='export M2_HOME=/opt/niranjan/maven
' dest=/etc/profile.d/maven.sh # lineinfile is used to add additional or append lines to existing files. - lineinfile: path: /etc/profile.d/maven.sh line: 'export PATH=${M2_HOME}/bin:${PATH}' - name: Source profile shell: source /etc/profile.d/maven.sh
Príklad 16: Nainštalujte si Tomcat 8
Nasledujúca príručka pomáha nainštalovať a spustiť Tomcat 8 na cieľových počítačoch alebo serveroch.
Môžete kliknúť tu skopírujte umiestnenie odkazu na najnovšiu verziu Tomcat 8. Kliknite na tu pre adresu URL obsahujúcu súbor tar Tomcat 8, ktorú som použil v tejto príručke.
--- - hosts: webservers become: true gather_facts: no tasks: - name: Download Tomcat get_url: url=http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz dest=/home/ansible - name: Extract the file downloaded tomcat file command: tar xvf apache-tomcat-8.5.32.tar.gz - name: Move the Tomcat directory to a smaller one command: mv apache-tomcat-8.5.32 tomcat - name: Change Ownership and group of the Tomcat directory file: path=/home/ansible/tomcat owner=ansible group=ansible mode=775 state=directory recurse=yes - name: Start Tomcat command: nohup /home/ansible/tomcat/bin/startup.sh # Execute command even after you have exited from the shell prompt become: true become_user: ansible
Príklad 17: pre_tasks, post_tasks a tagy
Môžeš použiť pre_tasks a post_tasks na vykonanie určitých úloh pred alebo po vykonaní hlavnej úlohy.
Za normálnych okolností v príručke máte toľko úloh, ktoré sú vykonané. Čo ak potrebujete vykonať iba určitú úlohu? Odpovede na ňu sú značky. Pozrime sa na nižšie uvedenú možnosť, ktorá má všetky 3 možnosti. Má 2 úlohy, tj. Jednu s TAG a jednu bez TAG.
--- - name: Pre , Post tasks and Tags example hosts: localhost become: true tags: - niranjan pre_tasks: - debug: msg='Started task with tag - niranjan. tasks: - name: Going to execute the main task debug: msg='Currently in the target server' post_tasks: - debug: msg='Completed task with tag - niranjan. - name: Play without tags hosts: localhost become: true tasks: - name: Command to list files shell: ls -lrt > niranjan.txt
Pozrime sa, čo sa stane pri spustení príručky s možnosťou –list-tagy
$ ansible-playbook preposttagseg.yml --list-tags
Výstup vyššie vyzerá lepšie a jasnejšie. Hra # 1 má značku niranjan, ale hra # 2 nemá žiadne značky.
Ak potrebujete vykonať úlohy pomocou značky niranjan, príkaz na spustenie bude:
$ ansible-playbook preposttagseg.yml --tags niranjan
Druhé prehrávanie sa nevykoná a súbor sa nevytvorí.
Príklad 18: Manipulanti
Akýkoľvek softvérový balík bude mať konfiguračné súbory a všetky jeho zmeny sa prejavia až po reštarte služby. Musíte teda mať službu nastavenú na reštart. Pre Napr. Ak v nižšie uvedenej príručke na spustenie spustíte službu niekoľkokrát, služba sa aj tak reštartuje bez ohľadu na vykonané alebo vykonané zmeny, čo nie je správne.
--- - hosts: webservers tasks: - name: Install the apache Package yum: name=httpd state=latest - name: Copy httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html
# This service below is executed irrespective of changes done or not to any config files - name: Start and Enable httpd service service: name=httpd state= restarted enabled=yes
Službu teda musíme reštartovať, iba ak sa vykonajú zmeny v konfiguračných súboroch. Manipulanti poskytujú túto funkciu.
Správny tok so spracovateľmi by teda bol mať a oznámiť možnosť.
--- - hosts: webservers become: true tasks: - name: Install httpd package yum: name=httpd state=latest - name: Copy the httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html notify: - restart httpd - name: Start httpd service service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd state=restarted
Prvýkrát teda bude nainštalovaný a spustený server Apache. Aj keď playbook znovu spustíte bez vykonania akýchkoľvek zmien, služba httpd sa nereštartuje, pretože je už spustená.
Ak dôjde k zmenám v konfiguračných súboroch alebo v prípade zmeny súborov HTML, je obslužný program po spustení príručky upozornený na reštartovanie služby. Meno v sekcii upozornenia a obslužné nástroje by mali byť rovnaké. Obsluha sa píše ako každá iná úloha, ale volá sa, iba ak dôjde k zmenám.
Ansible Vault
Väčšinou je v playbooku potrebné chrániť citlivé alebo dôverné údaje, ktoré je potom možné šifrovať, a nielen uchovávať v textovom súbore, ktorý je čitateľný pre všetkých. Ansible Vault vám umožňuje zašifrovať príručku na ochranu dôverných údajov.
Napríklad, zvážte nasledujúcu úlohu, pri ktorej sa kopíruje dôverná pracovná dohoda.
V takýchto prípadoch by ste potrebovali Ansible Vault.
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txt
Nasledujú kroky, ktoré musíte vykonať na šifrovanie vyššie uvedených súborov príručky.
# 1) Vytváranie nových šifrovaných súborov
Ak chcete vytvoriť nové šifrované súbory s trezorom, použite ansible-vault vytvoriť príkaz.
$ ansible-vault create jobagreement.yml
Po potvrdení hesla sa otvorí editačné okno na pridanie obsahu do súboru.
Keď zavriete súbor, program Ansible zašifruje obsah. Namiesto zobrazenia skutočného obsahu uvidíte šifrované bloky.
# 2) Na zašifrovanie existujúceho súboru yml použite nasledujúci postup
$ ansible-vault encrypt existingfile.yml
Heslo bude opäť požiadané o šifrovanie.
# 3) Prezeranie šifrovaného súboru
Použite príkaz pohľad zodpovednej klenby pozrieť sa na skutočný obsah súboru.
$ ansible-vault view jobagreement.yml
Znova budete požiadaní o heslo, aby ste si mohli pozrieť obsah súboru.
# 4) Úpravy šifrovaných súborov
Ak potrebujete súbor upraviť, použite príkaz úprava zodpovednej klenby
$ ansible-vault edit users.yml
Ak chcete súbor upraviť, zadajte heslo.
# 5) Zmena hesla k šifrovaným súborom
Použite príkaz ansible-vault rekey zmeniť heslo súboru.
$ ansible-vault rekey jobagreement.yml
# 6) Spustite zašifrovaný súbor príručky Ansible
Použite voľbu –ask-vault-pass s príkazom ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Ručné dešifrovanie zašifrovaných súborov
Použite príkaz dešifrovať príkaz ansible-vault.
$ ansible-vault decrypt jobagreement.yml
Zhrnutie
V tomto výučbe sme videli dva najdôležitejšie aspekty správy konfigurácie, ktoré sú Ansible Playbooks a ochrana citlivých údajov pomocou Ansible Vaults.
Vyššie uvedené príklady príručky by vám poskytli predstavu o tom, ako automatizovať rôzne úlohy v rôznych scenároch počas dodávania softvéru.
V našom pripravovanom návode uvidíme, ako modulovať Playbook pomocou rolí Ansible, integrovať sa s Jenkinsom a najdôležitejším aspektom práce s modulmi Ansible S3 a EC2 na správu inštancií AWS (vytváranie a ukončovanie inštancií EC2).
ako vytvoriť počítačový program pre začiatočníkov
Výukový program PREV | NEXT Tutorial
Odporúčané čítanie
- Výukový program Ansible: Inštalácia a použitie s modulmi Ansible
- Príkazy automatizácie SeeTest: Podrobné vysvetlenie s príkladmi
- Možné úlohy, integrácia s Jenkinsom v moduloch DevOps a EC2
- Ako vyvíjať testovacie skripty pomocou najobľúbenejších 5 najobľúbenejších rámcov automatizácie testov (príklady)
- Bezskriptový rámec automatizácie testov: nástroje a príklady
- Výukový program pre Python DateTime s príkladmi
- Vystrihnite príkaz v systéme Unix s príkladmi
- Automatizácia testov - je to špecializovaná kariéra? Môžu normálni testeri robiť aj automatizáciu?