task automation using ansible playbooks
Naučite automatizaciju zadataka pomoću Ansible playbookova i Ansible trezora za zaštitu osjetljivih podataka:
U našem prethodnom tutorialu za odgovor 1 , naučili smo o različitim komponentama Ansiblea i kako instalirati i konfigurirati ovaj alat s različitim modulima. Također smo vidjeli kako se moduli koriste za izvršavanje jedne funkcije ili zadatka.
U ovom ćemo dijelu razmotriti automatizaciju zadataka pomoću Ansible playbookova i Ansible trezora kako bismo osigurali osjetljive podatke.
Predloženo čitanje => Vodič za učenje o DevOpsu
Predložak plana ispitivanja automatizacije za selen
Što ćete naučiti:
Ansible Playbooks
Vidjeli smo kako pokretati pojedinačne zadatke ili jednokratne zadatke pomoću modula, ali što ako trebate izvršiti više zadataka? Playbooks pomažu u njihovom pokretanju na skriptiran način.
Playbooks definiraju varijable, konfiguracije, korake implementacije, dodjeljuju uloge, izvode više zadataka. Za Npr. KOPIRANJE / BRISANJE datoteka i mapa, instaliranje paketa, pokretanje usluga. Dakle, prvenstveno su knjige za igre definirane da orkestriraju korake na više računala ili poslužitelja i dovedu ih sve u određeno željeno stanje.
Playbook je napisan na YAML format s nastavkom datoteke .yml. Treba biti vrlo oprezan s formatom i poravnanjem što ga čini vrlo osjetljivim.
Sadrži sljedeće odjeljke:
- Svaka knjiga s igrama započinje s 3 crtice '-'
- Odjeljak domaćina - Definira ciljne strojeve na kojima bi knjiga trebala raditi. To se temelji na datoteci inventara Ansible.
- Promjenjivi odjeljak - Ovo nije obavezno i može deklarirati sve varijable potrebne u priručniku. Osvrnut ćemo se i na neke primjere.
- Odjeljak zadataka - Ovaj odjeljak navodi sve zadatke koje treba izvršiti na ciljnom stroju. Određuje upotrebu modula. Svaki zadatak ima naziv koji je mali opis onoga što će zadatak obaviti i koji će biti naveden dok se igraonica pokreće.
Na primjer,
Ako trebamo instalirati i konfigurirati Tomcat, on će se sastojati od sljedećih zadataka:
- Preuzmite i instalirajte Tomcat
- Konfigurirajte Tomcat
- Pokrenite Tomcat
Slično tome, još jedanPrimjerza upotrebu Tomcata koji se koristi u kontinuiranoj isporuci DevOps-a, zadaci mogu biti sljedeći:
- Zaustavi aplikaciju
- Deinstaliraj aplikaciju
- Instalirajte novu verziju WAR datoteke.
- Pokrenite aplikaciju
Uzorak formata Playbook
--- 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
U gornjoj skripti pogledajte poravnanje počevši od vrha i mora se održavati jer ćete dobiti sintaksne pogreške.
Da biste pokrenuli bilo koju knjigu za reprodukciju, koristite sljedeću naredbu
$ ansible-playbook
Da biste provjerili u playbook-u zbog sintaksnih pogrešaka
$ ansible-playbook --syntax-check
Za prikaz popisa domaćina
$ ansible-playbook --list-hosts
Stvaranje knjiga s primjerima
U ovom ćemo odjeljku vidjeti više primjera kako stvoriti knjige s igrama koje ćete možda trebati redovito pokretati. Ove knjige s igrama trebat će stvoriti i pokretati iz upravljačkog stroja.
Spremite sve dolje prikazane knjige u .yml datoteku i pokrenite kao što je prikazano dolje.
$ ansible-playbook filename.yml
Primjer 1: Stvorite datoteku na ciljanim strojevima ili poslužiteljima kao što je spomenuto u datoteci inventara i grupi web poslužitelja, spremite donji kôd s .yml nastavkom i pokrenite knjigu za reprodukciju.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
U gornjem primjeru koristili smo datoteka modul za stvaranje datoteke.
Primjer 2: Stvorite direktorij s načinom rada 775 i vlasnikom / grupom kao Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Primjer 3: Stvorite više direktorija. Za stvaranje više direktorija s jednim zadatkom možete koristiti petlju sa_postavkama izjava. Dakle, kad pokrenete donji priručnik, on se tumači kao 3 različita zadatka.
--- - 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'
Primjer 4: Stvorite korisnika. Pogledajmo korisnik modul za stvaranje i brisanje korisnika u playbooku.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Primjer 5: Ukloni korisnika. Uklanjanje korisnika vrlo je jednostavno i trebat će mu država biti postavljen na odsutan . To je ekvivalentno userdel naredba u Linuxu.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
U gornjoj priručniku, ukloniti = da uklonit će kućni direktorij i sila = da uklonit će datoteke iz direktorija.
Primjer 6: Kopirajte sadržaj u datoteku pomoću modula za kopiranje.
Ako trebate kopirati datoteku na ciljne strojeve ili poslužitelje, koristite src i dest u modulu za kopiranje.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Na primjer,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Primjer 7: Zamijenite sve instance niza.
Koristeći zamijeniti modul možemo riječ zamijeniti drugom riječju. Za zamjenski modul potrebna su 3 parametra, tj. „Path“, „regexp“ (za pronalaženje određene riječi) i „replace“ (pruža drugu riječ za zamjenu).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Primjer 8: Arhiva ili ZIP datoteke i mape
Koristeći Ansible arhiva modul možete komprimirati datoteke ili mape u 'zip', '.gz' ili 'bz2' format.
Bilješka : Datoteke ili mape koje će se komprimirati trebaju biti dostupne na ciljnim poslužiteljima i na njima trebaju biti instalirani paketi za tar, bzip2, gzip, zip datoteku. Za instaliranje ovih paketa možete imati zasebni zadatak iz knjige priručnika.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Gornja knjiga priručnika arhivirat će datoteku niranjan.txt u datoteku 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
Gornja knjiga priručnika arhivirat će više datoteka u datoteku niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Gornja knjiga priručnika arhivirat će sve datoteke u direktorij / home / ansible.
Primjer 9: Rad s datumom i vremenskom oznakom
Upotreba sistemskog datuma i vremenske oznake pomaže u određene svrhe statusa ili evidentiranja. Odgovorne činjenice omogućuju pristup udaljenim ili ciljnim poslužiteljima datum i vrijeme. Tako da možemo koristiti modul za otklanjanje pogrešaka za ispis rezultata zajedno s gdje atribut kao što je prikazano u nastavku.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Gornja knjiga priručnika prikazuje datum.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Gornja knjiga priručnika prikazuje vrijeme.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Gornja knjiga priručnika stvorit će dinamičku datoteku na temelju trenutnog datuma za Npr . niranjan2018-07-15.log
Primjer 10: Primjer varijabli
Varijable se koriste za pohranu vrijednosti. U donjem primjeru deklariram varijablu Ime s vrijednošću niranjan . Izlaz će biti niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Također možemo imati niz ili popis varijabli kao u nastavku Primjer .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indeksiranje niza započinje od NULE (0). Stoga će izlaz u gornjem primjeru biti Niranjan.
Primjer 11: Registriraj varijable
Također možemo bilježiti izlaz bilo kojeg zadatka u varijablu registra.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Napomena: Za prikaz - upotrijebite atribut msg i za hvatanje bilo koje vrijednosti upotrijebite atribut var u modulu za otklanjanje pogrešaka
Primjer 12: Playbook za instalaciju vim editor-a i GIT-a na ciljne poslužitelje ili strojeve.
U ovoj priručniku koristili smo njam modul za instaliranje najnovije verzije softverskih paketa.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Primjer 13: Instalirajte Apache poslužitelj. Spremite donji kod i pokrenite playbook kao što je prikazano dolje.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Osim njam modul, servis modul se također koristi za pokretanje usluge httpd. Zadaci se sinkrono izvode od vrha do dna.
Primjer 14: Instalirajte JDK
Sljedeća knjiga priručnika automatizirat će instalaciju JDK 8 na sve ciljne strojeve ili poslužitelje. JDK je preduvjet za većinu ostalih softverskih paketa kao što su Maven ili 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'
Primjer 15: Instalirajte Maven
Zadaci su preuzimanje datoteke maven s URL-a pomoću get_url modul, izvadite preuzetu datoteku, premjestite je u manji direktorij, ažurirajte i pokrenite profil gdje je maven dodan u stazu.
--- - 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
Primjer 16: Instalirajte Tomcat 8
Dolje priručnik pomaže instalirati i pokrenuti Tomcat 8 na ciljanim računalima ili poslužiteljima.
Možete kliknuti ovdje da biste kopirali mjesto veze najnovije verzije Tomcata 8. Kliknite ovdje za URL koji sadrži Tomcat 8 tar datoteku koju sam koristio u ovoj knjizi priručnika.
--- - 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
Primjer 17: pre_zadatke, post_zadatke i oznake
Možeš koristiti pre_zadatke i post_zadatke za pokretanje određenih zadataka prije ili nakon izvođenja glavnog zadatka.
Obično u knjizi za igru imate toliko izvršenih zadataka. Što ako trebate izvršiti samo određeni zadatak? Oznake su odgovor na to. Pogledajmo donju opciju koja ima sve 3 mogućnosti. Ima 2 zadatka, tj. Jedan s TAG-om i jedan bez TAG-a.
--- - 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
Pogledajmo što će se dogoditi tijekom pokretanja knjige s opcijom –list-tags
internet stvari koje tvrtke mogu gledati
$ ansible-playbook preposttagseg.yml --list-tags
Izlaz gore izgleda bolje i jasnije. Play # 1 ima oznaku niranjan, ali Play # 2 nema nijednu oznaku.
Ako trebate izvršiti zadatke s oznakom niranjan, tada bi naredba za pokretanje bila:
$ ansible-playbook preposttagseg.yml --tags niranjan
Druga reprodukcija nije izvršena i datoteka nije stvorena.
Primjer 18: Rukovatelji
Bilo koji softverski paket imat će konfiguracijske datoteke i sve promjene na njemu imat će učinak tek kad se usluga ponovno pokrene. Zato trebate postaviti uslugu za ponovno pokretanje. Za Npr. Ako ga pokrenete više puta, u nastavku knjige, usluga će se ionako ponovo pokrenuti, bez obzira na izvršene promjene ili ne, što nije točno.
--- - 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
Stoga moramo ponovno pokrenuti uslugu samo ako su promjene izvršene u konfiguracijskim datotekama. Rukovatelji pružiti tu značajku.
Tako bi pravilan protok kod rukovatelja bio imati obavijestiti opcija.
--- - 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
Tako će se po prvi puta instalirati i pokrenuti Apache poslužitelj. Čak i ako ponovno pokrenete playbook bez ikakvih izvršenih promjena, usluga httpd neće se ponovo pokrenuti jer je već pokrenuta.
Ako postoje promjene u konfiguracijskim datotekama ili ako se HTML datoteke promijene, nakon pokretanja playbooka voditelj je obaviješten da ponovno pokrene uslugu. Ime u odjeljku za obavijesti i obrađivači trebali bi biti isti. Rukovatelj je napisan kao i bilo koji drugi zadatak, ali poziva se samo ako postoje promjene.
Ansible Vault
Većinu slučajeva kada osjetljive ili povjerljive podatke treba zaštititi u priručniku, oni se mogu šifrirati, a ne samo čuvati u tekstualnoj datoteci koja je svima čitljiva. Ansible Vault omogućuje vam šifriranje knjige za zaštitu radi zaštite povjerljivih podataka.
Na primjer, razmotrite sljedeći zadatak kada se kopira povjerljivi ugovor o poslu.
U takvim slučajevima trebat će vam Ansible trezor.
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txt
Slijede koraci koje trebate slijediti za šifriranje gore navedenih datoteka playbook-a.
# 1) Stvaranje novih šifriranih datoteka
Za stvaranje novih šifriranih datoteka sa trezorom koristite ansible-vault stvoriti naredba.
$ ansible-vault create jobagreement.yml
Nakon potvrde lozinke otvorit će se prozor za uređivanje za dodavanje sadržaja u datoteku.
Ansible će šifrirati sadržaj kada zatvorite datoteku. Umjesto da vidite stvarni sadržaj, vidjet ćete šifrirane blokove.
# 2) Za šifriranje postojeće yml datoteke upotrijebite sljedeće
$ ansible-vault encrypt existingfile.yml
Za šifriranje će se ponovo zatražiti lozinka.
# 3) Pregled šifrirane datoteke
Koristite naredbu prikaz ansible-svod kako bi pogledali stvarni sadržaj datoteke.
$ ansible-vault view jobagreement.yml
Od vas će se ponovo zatražiti lozinka za pregled sadržaja datoteke.
# 4) Uređivanje šifriranih datoteka
Ako trebate urediti datoteku, upotrijebite naredbu ansible-vault uredi
$ ansible-vault edit users.yml
Unesite lozinku za uređivanje datoteke.
# 5) Promjena lozinke šifriranih datoteka
Koristite naredbu ansible-vault rekey za promjenu lozinke datoteke.
$ ansible-vault rekey jobagreement.yml
# 6) Pokrenite šifriranu datoteku knjige za reprodukciju Ansible
Upotrijebite opciju –ask-vault-pass s naredbom ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Ručno dešifriranje šifriranih datoteka
Upotrijebite naredbu za dešifriranje ansible-vault.
$ ansible-vault decrypt jobagreement.yml
Sažetak
U ovom uputstvu vidjeli smo dva najvažnija aspekta upravljanja konfiguracijom Ansible Playbooks i zaštita osjetljivih podataka pomoću Ansible trezora.
Gornji primjeri knjige priručnika dali bi vam ideju kako automatizirati različite zadatke u različitim scenarijima tijekom isporuke softvera.
U našem nadolazećem uputstvu vidjet ćemo kako modulirati Playbook pomoću uloga Ansible, integrirati se s Jenkinsom i najvažniji aspekt za rad s modulima Ansible S3 i EC2 za upravljanje AWS instancama (Stvaranje i ukidanje instanci EC2).
testirajte web stranicu za ranjivost sql ubrizgavanja
Preporučena literatura
- Vodič za Ansible: Instalacija i upotreba s Ansible modulima
- SeeTest naredbe za automatizaciju: detaljno objašnjenje s primjerima
- Odgovorne uloge, integracija s Jenkinsom u DevOps i EC2 moduli
- Kako razviti test skripte pomoću top 5 najpopularnijih okvira za automatizaciju testa (primjeri)
- Okvir za automatizaciju ispitivanja bez skripti: alati i primjeri
- Python DateTime Vodič s primjerima
- Izreži naredbu u Unixu s primjerima
- Test automatizacija - radi li se o specijaliziranoj karijeri? Mogu li normalni testeri raditi i automatizaciju?