task automation using ansible playbooks
Aflați automatizarea sarcinilor folosind cărțile de joc Ansible și seifurile Ansible pentru securizarea datelor sensibile:
În tutorialul nostru Ansible nr. 1 anterior , am aflat despre diferitele componente ale Ansible și cum se instalează și se configurează acest instrument cu diferite module. Am văzut, de asemenea, modul în care modulele sunt utilizate pentru a îndeplini o funcție sau o sarcină.
În această parte, vom analiza automatizarea sarcinilor folosind cărți de joc Ansible și seifuri Ansible pentru a securiza datele sensibile.
Citire sugerată => Ghid de învățare pe DevOps
întrebări și răspunsuri pentru interviuri dot net cu experiență
Ce veți învăța:
Cărți de joc Ansible
Am văzut cum să rulăm sarcini unice sau uneori folosind module, dar dacă trebuie să executați mai multe sarcini? Playbook-urile vă ajută să le rulați într-un mod scriptat.
Playbook-urile definesc variabile, configurații, pași de implementare, atribuie roluri, efectuează mai multe sarcini. Pentru De exemplu. COPIAȚI / ȘTERGEȚI fișiere și foldere, instalați pachete, porniți servicii. Deci, în primul rând, cărțile de joc sunt definite pentru a orchestra pașii către mai multe mașini sau servere și pentru a le duce pe toți într-o anumită stare dorită.
Playbook este scris în Format YAML cu o extensie de fișier .yml. Trebuie să fii foarte atent cu formatul și alinierea, ceea ce îl face foarte sensibil.
Conține următoarele secțiuni:
- Fiecare carte de joc începe cu 3 cratime '-'
- Secțiunea gazdă - Definește mașinile țintă pe care ar trebui să ruleze playbook-ul. Aceasta se bazează pe fișierul de inventar Ansible.
- Secțiunea variabilă - Acesta este opțional și poate declara toate variabilele necesare în playbook. Vom analiza și câteva exemple.
- Secțiunea Sarcini - Această secțiune listează toate sarcinile care ar trebui executate pe mașina țintă. Specifică utilizarea modulelor. Fiecare sarcină are un nume care reprezintă o mică descriere a activității și va fi listată în timp ce rulează playbook-ul.
De exemplu,
Dacă trebuie să instalăm și să configurăm Tomcat, acesta va consta din următoarele sarcini:
- Descărcați și instalați Tomcat
- Configurați Tomcat
- Porniți Tomcat
În mod similar, altulExemplupentru utilizarea Tomcat utilizat în livrarea continuă a DevOps, sarcinile ar putea fi după cum urmează:
- Opriți aplicarea
- Dezinstalați aplicația
- Instalați o nouă versiune a fișierului WAR.
- Porniți aplicația
Eșantion format de 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
În scriptul de mai sus priviți alinierea începând de sus și trebuie menținută altfel veți primi erori de sintaxă.
Pentru a rula orice playbook, utilizați următoarea comandă
$ ansible-playbook
Pentru a verifica playbook-ul pentru erori de sintaxă
$ ansible-playbook --syntax-check
Pentru a vizualiza lista gazdelor
$ ansible-playbook --list-hosts
Crearea Playbooks cu exemple
În această secțiune, vom vedea mai multe exemple despre cum să creați playbook-uri pe care este posibil să le aveți nevoie pentru a rula în mod regulat. Aceste cărți de redare vor trebui create și rulate de pe mașina de control.
Salvați toate cărțile de redare de mai jos într-un fișier .yml și rulați așa cum se arată mai jos.
$ ansible-playbook filename.yml
Exemplul 1: Creați fișierul pe mașinile sau serverele țintă așa cum se menționează în fișierul de inventar și în grupul serverului web, salvați codul de mai jos cu extensia .yml și rulați playbook-ul.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
În exemplul de mai sus, am folosit fişier modul pentru a crea fișierul.
Exemplul 2: Creați un director cu modul 775 și proprietar / grup ca Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Exemplul 3: Creați mai multe directoare. Pentru a crea mai multe directoare cu o singură sarcină, puteți utiliza bucla cu_elemente afirmație. Deci, atunci când rulați playbook-ul de mai jos, acesta este interpretat ca 3 sarcini diferite.
--- - 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'
Exemplul 4: Creați un utilizator. Să ne uităm la utilizator modul pentru a crea și șterge utilizatori din playbook.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Exemplul 5: Eliminați utilizatorul. Eliminarea unui utilizator este foarte ușoară și va avea nevoie de stat a fi setat la absent . Acest lucru este echivalent cu userdel comandă în Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
În manualul de mai sus, elimina = da va elimina directorul de start și forta = da va elimina fișierele din director.
Exemplul 6: Copiați conținutul într-un fișier utilizând modulul de copiere.
Dacă trebuie să copiați un fișier pe mașinile sau serverele țintă utilizați src și dest în modulul de copiere.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
De exemplu,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Exemplul 7: Înlocuiți toate instanțele unui șir.
Folosind a inlocui modul putem înlocui un cuvânt cu un alt cuvânt. Modulul de înlocuire va avea nevoie de 3 parametri, adică „cale”, „regexp” (pentru a găsi cuvântul respectiv) și „înlocuire” (furnizarea unui alt cuvânt pentru înlocuire).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Exemplul 8: Arhivă sau fișiere ZIP și foldere
Folosind Ansible Arhiva modulul puteți comprima fișiere sau foldere în formatul „zip”, „.gz” sau „bz2”.
Notă : Fișierele sau folderele care trebuie comprimate ar trebui să fie disponibile pe serverele țintă și ar trebui să aibă pachetele pentru fișier tar, bzip2, gzip, zip instalat pe ele. Puteți avea o sarcină separată de playbook pentru instalarea acestor pachete.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Playbook-ul de mai sus va arhiva fișierul niranjan.txt în fișierul 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
Playbook-ul de mai sus va arhiva mai multe fișiere în fișierul niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Playbook-ul de mai sus va zip toate fișierele în directorul / home / ansible.
Exemplul 9: Lucrul cu data și marcajul de timp
Utilizarea datei și a marcajului de timp ajută la anumite stări sau scopuri de înregistrare. Faptele Ansible oferă acces la data și ora serverelor la distanță sau țintă. Deci putem folosi modul de depanare pentru a imprima rezultatul împreună cu Unde atribut așa cum se arată mai jos.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Playbook-ul de mai sus afișează data.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Playbook-ul de mai sus afișează ora.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Playbook-ul de mai sus va crea un fișier dinamic bazat pe data curentă pentru De exemplu . niranjan2018-07-15.log
Exemplul 10: Exemplu de variabile
Variabilele sunt utilizate pentru a stoca valori. În exemplul de mai jos declar variabila Nume cu valoare niranjan . Ieșirea va fi niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Putem avea, de asemenea, o matrice sau o listă de variabile ca în cele de mai jos Exemplu .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indexarea matricei începe de la ZERO (0). Prin urmare, rezultatul din exemplul de mai sus va fi Niranjan.
Exemplul 11: Înregistrați variabile
De asemenea, putem captura ieșirea oricărei sarcini către o variabilă de registru.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Notă: Pentru a afișa - utilizați atributul msg și pentru a captura orice valoare utilizați atributul var în modulul - debug
Exemplul 12: Playbook pentru a instala editorul vim și GIT pe serverele sau mașinile țintă.
În acest manual, am folosit utilizarea da pentru a instala cea mai recentă versiune a pachetelor software.
site-uri anime pentru a viziona anime gratuit
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Exemplul 13: Instalați serverul Apache. Salvați codul de mai jos și rulați playbook așa cum se arată mai jos.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
În afară de da modul, serviciu modulul este, de asemenea, utilizat pentru a porni serviciul httpd. Sarcinile rulează de sus în jos sincron.
Exemplul 14: Instalați JDK
Următorul playbook se va automatiza pentru a instala JDK 8 pe toate mașinile sau serverele țintă. JDK este o condiție prealabilă pentru majoritatea celorlalte pachete software precum Maven sau 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'
Exemplul 15: Instalați Maven
Sarcinile îndeplinite sunt descărcarea fișierului maven de pe URL folosind get_url modul, extrageți fișierul descărcat, mutați-l într-un director mai mic, actualizați și rulați profilul în care mavenul este adăugat la cale.
--- - 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
Exemplul 16: Instalați Tomcat 8
Playbook-ul de mai jos vă ajută să instalați și să porniți Tomcat 8 pe mașinile sau serverele țintă.
Puteți face clic Aici pentru a copia locația link-ului celei mai recente versiuni de Tomcat 8. Faceți clic pe Aici pentru adresa URL care conține fișierul tar Tomcat 8 pe care l-am folosit în acest playbook.
--- - 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
Exemplul 17: pre_tasks, post_tasks și tag-uri
Poți să folosești pre_tasks și post_tasks pentru a rula anumite sarcini înainte sau după executarea sarcinii principale.
În mod normal, într-un playbook, aveți atâtea sarcini care sunt executate. Ce se întâmplă dacă trebuie să executați doar o anumită sarcină? Etichetele sunt răspunsul la aceasta. Să vedem opțiunea de mai jos, care are toate cele 3 opțiuni. Are 2 sarcini, adică una cu TAG și una fără 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
Să vedem ce se întâmplă în timpul rulării playbook-ului cu opțiunea –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Rezultatul de mai sus arată mai bine și mai clar. Jocul # 1 are o etichetă niranjan, dar Jocul # 2 nu are etichete.
Dacă trebuie să executați sarcinile cu eticheta niranjan, atunci comanda de executat ar fi:
$ ansible-playbook preposttagseg.yml --tags niranjan
A doua redare nu este executată și fișierul nu este creat.
Exemplul 18: Manipulatori
Orice pachet software va avea fișiere de configurare și orice modificări aduse acestuia vor avea efect numai la repornirea serviciului. Deci, trebuie să aveți serviciul setat pentru a reporni. Pentru De exemplu. În playbook-ul de mai jos, dacă îl rulați de mai multe ori, serviciul va reporni oricum, indiferent de modificările efectuate sau nu, ceea ce nu este corect.
--- - 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
Deci, trebuie să repornim serviciul numai dacă modificările se fac la fișierele de configurare. Manipulatori furnizați această caracteristică.
Deci, fluxul adecvat cu manipulatori ar fi să aveți un notifica opțiune.
--- - 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
Deci, pentru prima dată, serverul Apache va fi instalat și pornit. Chiar dacă rulați din nou playbook-ul fără nicio modificare, serviciul httpd nu va reporni, deoarece este deja pornit.
Dacă există modificări la fișierele de configurare sau dacă fișierele HTML sunt modificate, atunci odată ce rulează playbook-ul, handlerul este notificat să repornească serviciul. Numele din secțiunea de notificare și gestionarele trebuie să fie aceleași. Handlerul este scris ca orice altă sarcină, dar este apelat numai dacă există modificări.
Ansible Vault
De cele mai multe ori când datele sensibile sau confidențiale trebuie protejate în playbook, atunci acestea pot fi criptate, mai degrabă decât păstrarea lor într-un fișier text care poate fi citit de toți. Ansible Vault vă permite să criptați playbook-ul pentru a proteja datele confidențiale.
De exemplu, luați în considerare următoarea sarcină în cazul în care se copiază un acord de muncă confidențial.
În astfel de cazuri, ai avea nevoie de un 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
Urmează pașii pe care trebuie să îi urmați pentru a cripta fișierele playbook de mai sus.
# 1) Crearea de noi fișiere criptate
Pentru a crea noi fișiere criptate cu seif folosiți ansible-seif crea comanda.
$ ansible-vault create jobagreement.yml
După confirmarea parolei, se va deschide o fereastră de editare pentru a adăuga conținut în fișier.
Ansible va cripta conținutul atunci când închideți fișierul. În loc să vedeți conținutul real, veți vedea blocuri criptate.
# 2) Pentru a cripta un fișier yml existent, utilizați următoarele
$ ansible-vault encrypt existingfile.yml
Parola va fi solicitată din nou pentru criptare.
# 3) Vizualizarea fișierului criptat
Folosiți comanda vedere ansible-seif pentru a privi conținutul real al fișierului.
$ ansible-vault view jobagreement.yml
Vi se va solicita din nou parola pentru a privi conținutul fișierului.
# 4) Editarea fișierelor criptate
Dacă trebuie să editați fișierul, utilizați comanda editare ansible-seif
$ ansible-vault edit users.yml
Introduceți parola pentru a edita fișierul.
# 5) Modificarea parolei fișierelor criptate
Folosiți comanda ansible-seif rekey pentru a schimba parola fișierului.
$ ansible-vault rekey jobagreement.yml
# 6) Rulați un fișier Answer criptat
Folosiți opțiunea –ask-vault-pass cu comanda ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Decriptarea manuală a fișierelor criptate
Utilizați comanda ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
rezumat
Ei bine, în acest tutorial, am văzut cele mai importante două aspecte ale managementului configurației care sunt Playbook-uri Ansible și protejarea datelor sensibile folosind Ansible Vaults.
Exemplele de mai sus de playbook v-ar fi dat o idee despre cum să automatizați diferite sarcini în diferite scenarii în timpul livrării software-ului.
În viitorul nostru tutorial, vom vedea cum să modularizăm Playbook folosind roluri Ansible, să se integreze cu Jenkins și cel mai important aspect pentru a lucra cu modulele Ansible S3 și EC2 pentru gestionarea instanțelor AWS (Creați și terminați instanțe EC2).
care este cheia mea de securitate pe internet
Lectură recomandată
- Tutorial Ansible: Instalare și utilizare cu module Ansible
- Comenzile de automatizare SeeTest: o explicație detaliată cu exemple
- Roluri Ansible, integrare cu Jenkins în DevOps și module EC2
- Cum să dezvoltați scripturile de testare folosind cele mai populare 5 cadre de automatizare a testelor (exemple)
- Cadrul de automatizare a testelor fără script: instrumente și exemple
- Tutorial Python DateTime cu exemple
- Tăiați comanda în Unix cu exemple
- Automatizarea testelor - Este o carieră specializată? Testatorii normali pot face și automatizarea?