task automation using ansible playbooks
Naučite se avtomatizacije opravil z uporabo Ansible playbooks in Ansible trezorjev za zaščito občutljivih podatkov:
V naši prejšnji vaji Ansible št. 1 smo spoznali različne komponente programa Ansible in kako namestiti in konfigurirati to orodje z različnimi moduli. Prav tako smo videli, kako se moduli uporabljajo za izvajanje ene funkcije ali naloge.
V tem delu si bomo ogledali avtomatizacijo nalog z uporabo Ansible playbooks in Ansible trezorjev za zaščito občutljivih podatkov.
Predlagano branje => Učni priročnik za DevOps
kako uporabljati sort v javi
Kaj se boste naučili:
Ansible Playbooks
Videli smo, kako zagnati posamezna ali enkratna opravila z uporabo modulov, kaj pa, če morate izvesti več nalog? Playbooks pomagajo, da jih zaženete po scenariju.
Playbooks definirajo spremenljivke, konfiguracije, korake uvajanja, dodeljujejo vloge in izvajajo več nalog. Za Npr. KOPIRANJE / BRISANJE datotek in map, namestitev paketov, zagon storitev. Torej so v prvi vrsti opredeljene igralne knjige, ki korake orkestrirajo na več strojev ali strežnikov in jih vse pripeljejo v določeno želeno stanje.
Playbook je napisan v jeziku YAML format s pripono datoteke .yml. Pri oblikovanju in poravnavi je treba biti zelo previden, zaradi česar je zelo občutljiv.
Vsebuje naslednje razdelke:
- Vsaka knjiga z igrami se začne s 3 vezaji '-'
- Gostiteljski odsek - Določa ciljne stroje, na katerih naj igra te knjige. To temelji na datoteki inventarja Ansible.
- Spremenljiv odsek - To ni obvezno in lahko navede vse spremenljivke, ki so potrebne v knjigi iger. Ogledali si bomo tudi nekaj primerov.
- Razdelek Opravila - V tem razdelku so navedene vse naloge, ki jih je treba izvesti na ciljnem računalniku. Določa uporabo modulov. Vsaka naloga ima ime, ki je majhen opis tega, kar bo opravilo in bo navedeno med izvajanjem knjige z igrami.
Na primer,
Če moramo namestiti in konfigurirati Tomcat, bo sestavljen iz naslednjih nalog:
- Prenesite in namestite Tomcat
- Konfigurirajte Tomcat
- Zaženite Tomcat
Podobno še enaPrimerza uporabo Tomcata, ki se uporablja pri neprekinjeni dostavi DevOps, so lahko naloge naslednje:
- Ustavite aplikacijo
- Odstrani aplikacijo
- Namestite novo različico datoteke WAR.
- Zaženite aplikacijo
Vzorčna oblika 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
V zgornjem skriptu si oglejte poravnavo, ki se začne od zgoraj in jo je treba ohraniti, sicer boste dobili sintaksne napake.
Če želite zagnati katero koli knjigo iger, uporabite naslednji ukaz
$ ansible-playbook
Če želite preveriti v knjižici predvajanja sintaksne napake
$ ansible-playbook --syntax-check
Za ogled seznama gostiteljev
$ ansible-playbook --list-hosts
Ustvarjanje Playbooks s primeri
V tem poglavju bomo videli več primerov, kako ustvariti knjige z igrami, ki jih boste morda morali redno izvajati. Te knjige z igrami bo treba ustvariti in zagnati iz krmilnega stroja.
Shranite vse spodnje knjižice v datoteko .yml in zaženite, kot je prikazano spodaj.
$ ansible-playbook filename.yml
Primer 1: Ustvarite datoteko na ciljnih računalnikih ali strežnikih, kot je omenjeno v inventarni datoteki in skupini spletnega strežnika, shranite spodnjo kodo s pripono .yml in zaženite igro.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
V zgornjem primeru smo uporabili mapa modul za ustvarjanje datoteke.
2. primer: Ustvarite imenik z načinom 775 in lastnikom / skupino kot Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
3. primer: Ustvarite več imenikov. Če želite ustvariti več imenikov z eno samo nalogo, lahko uporabite zanko with_items izjavo. Torej, ko zaženete spodnjo igro, se to razlaga kot 3 različne naloge.
--- - 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'
Primer 4: Ustvari uporabnika. Poglejmo uporabnik modul za ustvarjanje in brisanje uporabnikov v knjigi iger.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Primer 5: Odstrani uporabnika. Odstranitev uporabnika je zelo enostavna in bo potreboval država da se nastavi na odsoten . To je enakovredno userdel ukaz v Linuxu.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
V zgornji knjigi iger odstrani = da bo odstranil domači imenik in sila = da bo odstranil datoteke v imeniku.
Primer 6: Kopirajte vsebino v datoteko z uporabo modula za kopiranje.
Če želite kopirati datoteko na ciljne računalnike ali strežnike, uporabite src in dest v modulu za kopiranje.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Na primer,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
7. primer: Zamenjajte vse primerke niza.
Uporaba zamenjati modul lahko besedo nadomestimo z drugo besedo. Za nadomestni modul bodo potrebni 3 parametri, tj. ‘Path’, ‘regexp’ (za iskanje določene besede) in ‘replace’ (zagotavlja drugo besedo za zamenjavo).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Primer 8: Datoteke in mape v arhivu ali ZIP
Uporaba Ansible arhiv modul lahko datoteke ali mape stisnete v obliko »zip«, ».gz« ali »bz2«.
Opomba : Datoteke ali mape, ki jih je treba stisniti, morajo biti na voljo na ciljnih strežnikih, na njih pa morajo biti nameščeni paketi za tar, bzip2, gzip, zip. Za namestitev teh paketov imate lahko posebno nalogo playbook.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Zgornja knjiga z navodili bo datoteko niranjan.txt stisnila v datoteko 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
Zgornja knjiga z navodili bo stisnila več datotek v datoteko niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Zgornja knjiga priročnika bo stisnila vse datoteke v imenik / home / ansible.
Primer 9: Delo z datumom in časovnim žigom
Uporaba sistemskega datuma in časovnega žiga pomaga pri določenih razmerah za stanje ali beleženje. Dejstva Ansible omogočajo dostop do oddaljenih ali ciljnih strežnikov datum in čas. Tako lahko uporabimo modul za odpravljanje napak za tiskanje izpisa skupaj z kje atribut, kot je prikazano spodaj.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Zgornji priročnik prikazuje datum.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Zgornji priročnik prikazuje čas.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Zgornja knjiga predstavitev bo ustvarila dinamično datoteko glede na trenutni datum za Npr . niranjan2018-07-15.log
Primer 10: Primer spremenljivk
Spremenljivke se uporabljajo za shranjevanje vrednosti. V spodnjem primeru navajam spremenljivko ime z vrednostjo niranjan . Rezultat bo niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Lahko imamo tudi matriko ali seznam spremenljivk, kot je prikazano spodaj Primer .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indeksiranje matrike se začne od ZERO (0). Zato bo rezultat v zgornjem primeru Niranjan.
Primer 11: Registriraj spremenljivke
Izhod katere koli naloge lahko zajamemo tudi v spremenljivko registra.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Opomba: Za prikaz - uporabite atribut msg in za zajem katere koli vrednosti uporabite atribut var v modulu za odpravljanje napak
Primer 12: Playbook za namestitev vim editor in GIT na ciljne strežnike ali stroje.
V tej knjigi iger smo uporabili njam modul za namestitev najnovejše različice programskih paketov.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Primer 13: Namestite strežnik Apache. Shranite spodnjo kodo in zaženite playbook, kot je prikazano spodaj.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Poleg njam modul, storitev modul se uporablja tudi za zagon storitve httpd. Naloge se sinhrono izvajajo od zgoraj navzdol.
Primer 14: Namestite JDK
Naslednja knjiga z navodili bo avtomatizirala namestitev JDK 8 na vse ciljne računalnike ali strežnike. JDK je predpogoj za večino drugih programskih paketov, kot sta Maven ali 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'
Primer 15: Namestite Maven
Opravljene naloge so prenos datoteke maven iz URL-ja z uporabo get_url modul, izvlecite preneseno datoteko, jo premaknite v manjši imenik, posodobite in zaženite profil, kjer je maven dodan na pot.
--- - 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
Primer 16: Namestite Tomcat 8
Spodnja knjiga z navodili pomaga namestiti in zagnati Tomcat 8 na ciljne računalnike ali strežnike.
Lahko kliknete tukaj če želite kopirati mesto povezave najnovejše različice programa Tomcat 8. Kliknite tukaj za URL, ki vsebuje datoteko tar Tomcat 8, ki sem jo uporabil v tej knjigi iger.
--- - 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
Primer 17: pre_opravila, post_opravila in oznake
Lahko uporabiš pre_opravila in post_opravila za izvajanje določenih nalog pred ali po zagonu glavne naloge.
Običajno imate v knjižici iger toliko nalog, ki jih izvršite. Kaj če morate izvesti samo določeno nalogo? Oznake so odgovor na to. Oglejmo si spodnjo možnost, ki ima vse 3 možnosti. Ima dve nalogi, tj. Eno s TAG in eno brez 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
Poglejmo, kaj se bo zgodilo med zagonom knjižice z možnostjo –list-tags
kako si ogledati datoteke .swf
$ ansible-playbook preposttagseg.yml --list-tags
Rezultat zgoraj je videti boljši in jasen. Predvajanje # 1 ima oznako niranjan, vendar predvajanje # 2 nima nobenih oznak.
Če morate naloge izvršiti z oznako niranjan, bi bil ukaz za zagon:
$ ansible-playbook preposttagseg.yml --tags niranjan
Drugo predvajanje se ne izvede in datoteka ni ustvarjena.
Primer 18: Vodniki
Vsak programski paket bo imel konfiguracijske datoteke in vse spremembe v njem bodo veljale šele ob ponovnem zagonu storitve. Torej morate imeti storitev nastavljeno za ponovni zagon. Za Npr. V spodnjem priročniku, če ga zaženete večkrat, se bo storitev vseeno znova zagnala, ne glede na opravljene spremembe ali ne, kar ni pravilno.
--- - 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
Torej moramo storitev znova zagnati le, če se spremembe naredijo v konfiguracijskih datotekah. Vodniki zagotoviti to funkcijo.
Torej bi bil primeren pretok z vodniki, če bi imeli obvestiti možnost.
--- - 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 bo prvič nameščen in zagnan strežnik Apache. Tudi če ponovno zaženete knjigo predvajanja brez kakršnih koli sprememb, se storitev httpd ne bo znova zagnala, saj je že zagnana.
Če pride do sprememb na konfiguracijskih datotekah ali če se datoteke HTML spremenijo, potem ko se zažene playbook, je vodnik obveščen, da znova zažene storitev. Ime v razdelku za obveščanje in upravljavci morajo biti enaki. Vodnik je zapisan kot katera koli druga naloga, vendar se pokliče le, če pride do sprememb.
Ansible Vault
V večini primerov je treba v knjigi zaščititi občutljive ali zaupne podatke, nato pa jih je mogoče šifrirati, ne pa samo hraniti v besedilni datoteki, ki je berljiva vsem. Ansible Vault vam omogoča šifriranje knjige z igrami za zaščito zaupnih podatkov.
Na primer, razmislite o naslednji nalogi, kjer se kopira zaupna pogodba o zaposlitvi.
V takih primerih bi 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
Sledijo koraki, ki jih morate upoštevati za šifriranje zgornjih datotek playbook.
# 1) Ustvarjanje novih šifriranih datotek
Če želite ustvariti nove šifrirane datoteke s trezorjem, uporabite ansible-vault ustvari ukaz.
kako odpreti datoteke .json
$ ansible-vault create jobagreement.yml
Po potrditvi gesla se odpre okno za urejanje za dodajanje vsebine v datoteko.
Ansible bo šifriral vsebino, ko zaprete datoteko. Namesto da vidite dejansko vsebino, boste videli šifrirane bloke.
# 2) Za šifriranje obstoječe datoteke yml uporabite naslednje
$ ansible-vault encrypt existingfile.yml
Za šifriranje se bo znova zahtevalo geslo.
# 3) Ogled šifrirane datoteke
Uporabite ukaz pogled ansible-trezor da si ogledate dejansko vsebino datoteke.
$ ansible-vault view jobagreement.yml
Znova boste pozvani k vnosu gesla za ogled vsebine datoteke.
# 4) Urejanje šifriranih datotek
Če želite datoteko urediti, uporabite ukaz ansible-vault edit
$ ansible-vault edit users.yml
Vnesite geslo za urejanje datoteke.
# 5) Spreminjanje gesla šifriranih datotek
Uporabite ukaz ansible-vault rekey , da spremenite geslo datoteke.
$ ansible-vault rekey jobagreement.yml
# 6) Zaženite šifrirano datoteko Ansible playbook
Z ukazom ansible-playbook uporabite možnost –ask-vault-pass.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Ročno dešifriranje šifriranih datotek
Uporabite ukaz ansible-vault decrypt ukaz.
$ ansible-vault decrypt jobagreement.yml
Povzetek
V tej vadnici smo videli dva najpomembnejša vidika upravljanja konfiguracije Ansible Playbooks in zaščita občutljivih podatkov s pomočjo Ansible Vault.
Zgornji primeri knjige z navodili bi vam dali idejo, kako avtomatizirati različne naloge v različnih scenarijih med dobavo programske opreme.
V naši prihajajoči vadnici bomo videli, kako modularizirati Playbook z uporabo vlog Ansible, se integrirati z Jenkinsom in najpomembnejši vidik za delo z moduloma Ansible S3 in EC2 za upravljanje primerkov AWS (Ustvari in zaključi primerke EC2).
PREV Vadnica | NASLEDNJA Vadnica
Priporočeno branje
- Ansible Vadnica: Namestitev in uporaba z Ansible moduli
- SeeTest Automation Commands: Podrobna razlaga s primeri
- Odgovorne vloge, integracija z Jenkinsom v DevOps in moduli EC2
- Kako razviti testne skripte z uporabo 5 najbolj priljubljenih okvirov za avtomatizacijo preskusov (primeri)
- Okvir za avtomatizacijo preizkusov brez skript: orodja in primeri
- Vadnica Python DateTime s primeri
- Izreži ukaz v Unixu s primeri
- Avtomatizacija preizkusov - gre za specializirano kariero? Ali lahko običajni preizkuševalci opravljajo tudi avtomatizacijo?