task automation using ansible playbooks
Apreneu l’automatització de tasques amb llibres de jocs Ansible i voltes Ansible per protegir dades sensibles:
Al nostre anterior tutorial Ansible núm. 1 , vam conèixer els diferents components d'Ansible i com instal·lar i configurar aquesta eina amb diversos mòduls. També vam veure com s’utilitzen els mòduls per realitzar una funció o tasca.
En aquesta part, analitzarem l’automatització de tasques mitjançant llibres de joc Ansible i voltes Ansible per protegir dades sensibles.
Lectura suggerida => Guia d'aprenentatge sobre DevOps
com obrir fitxers jnlp a Windows 8
Què aprendreu:
Llibres de joc Ansible
Hem vist com executar tasques individuals o una sola vegada mitjançant mòduls, però, i si heu d’executar diverses tasques? Els Playbooks ajuden a executar-los de manera script.
Els llibres de jocs defineixen variables, configuracions, passos de desplegament, assignen rols i realitzen diverses tasques. Per a Per exemple. COPIA / ELIMINA fitxers i carpetes, instal·la paquets, inicia serveis. Per tant, principalment els llibres de jocs es defineixen per orquestrar els passos a diverses màquines o servidors i aconseguir que tots estiguin en un estat desitjat.
Playbook està escrit en Format YAML amb una extensió de fitxer .yml. Cal tenir molta cura amb el format i l’alineació que el fan molt sensible.
Conté les seccions següents:
- Tots els llibres de jocs comencen amb 3 guions '-'
- Secció d’amfitrió - Defineix les màquines de destinació en què s'hauria d'executar el llibre de reproducció. Això es basa en el fitxer d’inventari Ansible.
- Secció variable - Això és opcional i pot declarar totes les variables necessàries al llibre de reproducció. Veurem també alguns exemples.
- Secció de tasques - Aquesta secció llista totes les tasques que s'han d'executar a la màquina de destinació. Especifica l’ús dels mòduls. Totes les tasques tenen un nom que és una petita descripció del que farà la tasca i que apareixerà a la llista mentre s’executa el llibre de reproducció.
Per exemple,
Si necessitem instal·lar i configurar Tomcat, constarà de les tasques següents:
- Descarregueu i instal·leu Tomcat
- Configureu Tomcat
- Inicieu Tomcat
De la mateixa manera, un altreExempleper a l'ús del Tomcat utilitzat en el lliurament continu de DevOps, les tasques podrien ser les següents:
- Atura l'aplicació
- Desinstal·la l'aplicació
- Instal·leu una nova versió del fitxer WAR.
- Inicieu l'aplicació
Format de mostra 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
A l'script anterior mireu l'alineació que comença des de la part superior i s'ha de mantenir perquè obtindreu errors de sintaxi.
Per executar qualsevol llibre de reproducció, utilitzeu l'ordre següent
$ ansible-playbook
Per comprovar si hi ha errors de sintaxi al llibre de reproducció
$ ansible-playbook --syntax-check
Per veure la llista d'amfitrions
$ ansible-playbook --list-hosts
Creació de Playbooks amb exemples
En aquesta secció, veurem diversos exemples de com crear llibres de reproducció que és possible que hàgiu d'executar amb regularitat. Aquests llibres de reproducció hauran de ser creats i executats des de la màquina de control.
Deseu tots els llibres de reproducció següents en un fitxer .yml i executeu-los com es mostra a continuació.
$ ansible-playbook filename.yml
Exemple 1: Creeu el fitxer a les màquines o servidors de destinació tal com s’indica al fitxer d’inventari i al grup del servidor web, deseu el codi següent amb l’extensió .yml i executeu el llibre de reproducció.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
A l'exemple anterior, hem utilitzat el fitxer dossier mòdul per crear el fitxer.
Exemple 2: Creeu un directori amb el mode 775 i el propietari / grup com a Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Exemple 3: Creeu diversos directoris. Per crear diversos directoris amb una sola tasca, podeu utilitzar el bucle amb_elements declaració. Així, quan executeu el llibre de reproducció següent, s’interpreta com a tres tasques diferents.
--- - 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'
Exemple 4: Crea un usuari. Vegem el usuari mòdul per crear i eliminar usuaris del llibre de reproducció.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Exemple 5: Elimina l'usuari. Eliminar un usuari és molt fàcil i necessitarà el fitxer estat a configurar absent . Això equival al userdel comandament a Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
Al llibre de joc anterior, eliminar = sí eliminarà el directori inicial i força = sí eliminarà els fitxers del directori.
Exemple 6: Copieu el contingut a un fitxer mitjançant el mòdul de còpia.
Si necessiteu copiar un fitxer a les màquines o servidors de destinació, utilitzeu el fitxer src i dest al mòdul de còpia.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Per exemple,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Exemple 7: Substitueix totes les instàncies d'una cadena.
Utilitzant substituir mòdul podem substituir una paraula per una altra paraula. El mòdul de substitució necessitarà 3 paràmetres, és a dir, 'ruta', 'regexp' (per trobar la paraula concreta) i 'substituir' (proporcionant una altra paraula per substituir-la).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Exemple 8: Arxiu o arxius ZIP i carpetes
Utilitzant Ansible Arxiu Podeu comprimir fitxers o carpetes al format 'zip', '.gz' o 'bz2'.
Nota : Els fitxers o carpetes que es volen comprimir haurien d’estar disponibles als servidors de destinació i haurien de tenir instal·lats els paquets de fitxers tar, bzip2, gzip, zip. Podeu tenir una tasca de playbook independent per instal·lar aquests paquets.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
El llibre de reproducció anterior comprimirà el fitxer niranjan.txt al fitxer 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
El llibre de reproducció anterior comprimirà diversos fitxers al fitxer niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
El llibre de reproducció anterior comprimirà tots els fitxers al directori / home / ansible.
Exemple 9: Treballar amb data i marca de temps
L’ús de la data i la marca de temps del sistema ajuda a certs propòsits d’estat o registre. Els fets de Ansible proporcionen accés a data i hora als servidors remots o de destinació. Així podem utilitzar el fitxer mòdul de depuració per imprimir la sortida juntament amb el fitxer on com es mostra a continuació.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
El llibre de reproducció anterior mostra la data.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
El llibre de reproducció anterior mostra l'hora.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
El llibre de reproducció anterior crearà un fitxer dinàmic basat en la data actual de Per exemple . niranjan2018-07-15.log
Exemple 10: Exemple de variables
Les variables s’utilitzen per emmagatzemar valors. A l'exemple següent, declaro la variable nom amb valor niranjan . La sortida serà niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
També podem tenir una matriu o una llista de variables com es mostra a continuació Exemple .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name[1] }}'
La indexació de la matriu comença des de ZERO (0). Per tant, la sortida de l'exemple anterior serà Niranjan.
Exemple 11: Registre de variables
També podem capturar la sortida de qualsevol tasca a una variable de registre.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Nota: Per mostrar - utilitzeu l'atribut msg i per capturar qualsevol valor, utilitzeu l'atribut var al mòdul - debug
millors llocs d'anime per veure l'anime
Exemple 12: Playbook per instal·lar l'editor vim i el GIT als servidors o màquines de destinació.
En aquest llibre de joc, hem fet ús del fitxer yum per instal·lar la versió més recent dels paquets de programari.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Exemple 13: Instal·leu el servidor Apache. Deseu el codi següent i executeu Playbook com es mostra a continuació.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
A part del yum mòdul, el servei El mòdul també s'utilitza per iniciar el servei httpd. Les tasques s’executen de dalt a baix de manera sincronitzada.
Exemple 14: Instal·leu JDK
El següent llibre de joc s'automatitzarà per instal·lar JDK 8 a totes les màquines o servidors de destinació. JDK és un requisit previ per a la majoria dels altres paquets de programari com Maven o 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'
Exemple 15: Instal·leu Maven
Les tasques realitzades són descarregar el fitxer maven des de l'URL mitjançant el fitxer get_url , extreu el fitxer descarregat, moveu-lo a un directori més petit, actualitzeu i executeu el perfil on s’afegeix el maven al camí.
--- - 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
Exemple 16: Instal·leu Tomcat 8
El llibre de joc següent us ajuda a instal·lar i iniciar Tomcat 8 a les màquines o servidors de destinació.
Podeu fer clic aquí per copiar la ubicació de l'enllaç de l'última versió de Tomcat 8. Feu clic a aquí per a l'URL que conté el fitxer tar Tomcat 8 que he utilitzat en aquest llibre de reproducció.
--- - 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
Exemple 17: pre_tasks, post_tasks i etiquetes
Pots fer servir pre_tasques i post_tasques per executar determinades tasques abans o després d'executar la tasca principal.
Normalment, en un llibre de reproducció, teniu tantes tasques que s’executen. Què passa si heu d'executar només una tasca determinada? Les etiquetes són la resposta. Vegem l’opció següent que inclou les tres opcions. Té dues tasques, és a dir, una amb un TAG i una sense un 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
Vegem què passa mentre s’executa el llibre de reproducció amb l’opció –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
La sortida anterior es veu millor i més clara. El joc número 1 té una etiqueta niranjan, però el joc número 2 no té cap etiqueta.
Si heu d'executar les tasques amb l'etiqueta niranjan, l'ordre a executar seria:
$ ansible-playbook preposttagseg.yml --tags niranjan
La segona reproducció no s'executa i el fitxer no es crea.
Exemple 18: Manipuladors
Qualsevol paquet de programari tindrà fitxers de configuració i els canvis que s’hi produeixin només tindran efecte quan es reiniciï el servei. Per tant, heu de tenir el servei configurat per reiniciar-lo. Per a Per exemple. Al següent llibre de reproducció, si el feu servir diverses vegades, el servei es reiniciarà de totes maneres, independentment dels canvis realitzats o no, cosa que no és correcta.
--- - 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
Per tant, hem de reiniciar el servei només si els canvis es fan als fitxers de configuració. Manipuladors proporcionar aquesta característica.
Per tant, el flux adequat amb gestors seria tenir un notificar opció.
--- - 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
Així, per primera vegada, s’instal·larà i s’iniciarà el servidor Apache. Fins i tot si torneu a executar el llibre de reproducció sense fer canvis, el servei httpd no es reiniciarà ja que ja està iniciat.
Si hi ha algun canvi als fitxers de configuració o si es canvien els fitxers HTML, un cop executat el llibre de reproducció es notifica al controlador que reiniciï el servei. El nom de la secció de notificacions i els gestors han de ser els mateixos. El controlador s'escriu com qualsevol altra tasca, però només es diu si hi ha canvis.
Volta Ansible
La majoria de les vegades que cal protegir les dades sensibles o confidencials al llibre de reproducció, es poden xifrar en lloc de guardar-les en un fitxer de text que tothom pugui llegir. Ansible Vault us permet xifrar el llibre de reproducció per protegir les dades confidencials.
Per exemple, tingueu en compte la tasca següent en què s'està copiant un acord de treball confidencial.
En aquests casos, necessitareu 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
A continuació es detallen els passos que heu de seguir per xifrar els fitxers del llibre de reproducció anteriors.
# 1) Creació de fitxers xifrats nous
Per crear fitxers xifrats nous amb el magatzem, utilitzeu el fitxer ansible-vault crear comandament.
$ ansible-vault create jobagreement.yml
Després de confirmar la contrasenya, s'obrirà una finestra d'edició per afegir contingut al fitxer.
Ansible xifrarà el contingut quan tanqueu el fitxer. En lloc de veure el contingut real, veureu blocs xifrats.
# 2) Per xifrar un fitxer yml existent, utilitzeu el següent
$ ansible-vault encrypt existingfile.yml
Es tornarà a demanar xifratge de la contrasenya.
# 3) Visualització del fitxer xifrat
Utilitzeu l'ordre vista de volta ansible per veure el contingut real del fitxer.
$ ansible-vault view jobagreement.yml
Se us demanarà de nou la contrasenya per veure el contingut del fitxer.
# 4) Edició de fitxers xifrats
Si necessiteu editar el fitxer, utilitzeu l'ordre edició ansible-vault
$ ansible-vault edit users.yml
Introduïu la contrasenya per editar el fitxer.
# 5) Canvi de contrasenya dels fitxers xifrats
Utilitzeu l'ordre clau de volta ansible per canviar la contrasenya del fitxer.
$ ansible-vault rekey jobagreement.yml
# 6) Executeu un fitxer de llibre de reproducció Ansible xifrat
Utilitzeu l'opció –ask-vault-pass amb l'ordre ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Descodificació manual dels fitxers xifrats
Utilitzeu la comanda ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Resum
Bé, en aquest tutorial, hem vist els dos aspectes més importants de la gestió de configuracions que són Ansible Playbooks i protecció de dades sensibles mitjançant Ansible Vaults.
Els exemples anteriors de playbook us haurien donat una idea de com automatitzar diverses tasques en diferents escenaris durant la distribució de programari.
Al nostre proper tutorial, veurem com modular el Playbook mitjançant rols Ansible, integrar-lo amb Jenkins i l’aspecte més important per treballar amb els mòduls Ansible S3 i EC2 per gestionar les instàncies AWS (Crear i finalitzar instàncies EC2).
exemples d'escenaris de proves de punta a punta
Lectura recomanada
- Tutorial Ansible: Instal·lació i ús amb mòduls Ansible
- Ordres d’automatització SeeTest: una explicació detallada amb exemples
- Rols Ansible, integració amb Jenkins en DevOps i mòduls EC2
- Com desenvolupar scripts de prova mitjançant els 5 marcs d'automatització de proves més populars (exemples)
- Marc d’automatització de proves sense script: eines i exemples
- Tutorial de Python DateTime amb exemples
- Talla l'ordre a Unix amb exemples
- Automatització de proves: és una carrera especialitzada? Els provadors normals també poden fer automatització?