task automation using ansible playbooks
Impara l'automazione delle attività utilizzando i playbook Ansible e i depositi Ansible per la protezione dei dati sensibili:
Nel nostro precedente tutorial Ansible n. 1 , abbiamo imparato a conoscere i diversi componenti di Ansible e come installare e configurare questo strumento con vari moduli. Abbiamo anche visto come vengono utilizzati i moduli per eseguire una funzione o un'attività.
In questa parte, esamineremo l'automazione delle attività utilizzando i playbook Ansible e i depositi Ansible per proteggere i dati sensibili.
Lettura suggerita => Guida didattica su DevOps
script di shell per confrontare due file
Cosa imparerai:
Playbook Ansible
Abbiamo visto come eseguire singole attività o attività una tantum utilizzando i moduli, ma cosa succede se è necessario eseguire più attività? I playbook aiutano a eseguirli in modo programmato.
I playbook definiscono variabili, configurazioni, passaggi di distribuzione, assegnano ruoli, eseguono più attività. Per Per esempio. COPIA / ELIMINA file e cartelle, installa pacchetti, avvia servizi. Quindi, principalmente i playbook sono definiti per orchestrare i passaggi su più macchine o server e portarli tutti a un certo stato desiderato.
Playbook è scritto in formato Formato YAML con estensione .yml. Bisogna stare molto attenti al formato e all'allineamento che lo rendono molto sensibile.
Contiene le seguenti sezioni:
- Ogni playbook inizia con 3 trattini '-'
- Sezione host - Definisce le macchine di destinazione su cui deve essere eseguito il playbook. Si basa sul file di inventario Ansible.
- Sezione variabile - Questo è opzionale e può dichiarare tutte le variabili necessarie nel playbook. Vedremo anche alcuni esempi.
- Sezione attività - Questa sezione elenca tutte le attività che dovrebbero essere eseguite sulla macchina di destinazione. Specifica l'uso dei Moduli. Ogni attività ha un nome che è una piccola descrizione di ciò che l'attività farà e verrà elencata durante l'esecuzione del playbook.
Per esempio,
Se dobbiamo installare e configurare Tomcat, consisterà nelle seguenti attività:
- Scarica e installa Tomcat
- Configura Tomcat
- Avvia Tomcat
Allo stesso modo, un altroEsempioper l'utilizzo di Tomcat utilizzato nella distribuzione continua di DevOps, le attività potrebbero essere le seguenti:
- Interrompi l'applicazione
- Disinstalla l'applicazione
- Installa una nuova versione del file WAR.
- Avvia l'applicazione
Formato di esempio del 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
Nello script sopra, guarda l'allineamento partendo dall'alto e deve essere mantenuto altrimenti otterrai errori di sintassi.
Per eseguire qualsiasi playbook usa il seguente comando
$ ansible-playbook
Per controllare il playbook per errori di sintassi
$ ansible-playbook --syntax-check
Per visualizzare l'elenco degli host
$ ansible-playbook --list-hosts
Creazione di playbook con esempi
In questa sezione, vedremo più esempi di come creare playbook che potresti dover eseguire regolarmente. Questi playbook dovranno essere creati ed eseguiti dalla macchina di controllo.
Salva tutti i seguenti playbook in un file .yml ed esegui come mostrato di seguito.
$ ansible-playbook filename.yml
Esempio 1: Crea il file sulle macchine o sui server di destinazione come indicato nel file di inventario e nel gruppo del server web, salva il codice seguente con l'estensione .yml ed esegui il playbook.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
Nell'esempio sopra, abbiamo usato il file modulo per creare il file.
Esempio 2: Crea una directory con la modalità 775 e proprietario / gruppo come Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Esempio 3: Crea più directory. Per creare più directory con una singola attività puoi utilizzare il loop with_items dichiarazione. Quindi, quando esegui il playbook di seguito, viene interpretato come 3 diverse attività.
--- - 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'
Esempio 4: Crea un utente. Diamo un'occhiata al utente modulo per creare ed eliminare utenti nel playbook.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Esempio 5: Rimuovi utente. La rimozione di un utente è molto semplice e richiederà l'estensione stato essere impostato su assente . Questo è equivalente al userdel comando in Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
Nel playbook sopra, rimuovere = sì rimuoverà la directory home e forza = sì rimuoverà i file nella directory.
Esempio 6: Copiare il contenuto in un file utilizzando il modulo di copia.
Se è necessario copiare un file sulle macchine o sui server di destinazione, utilizzare l'estensione src e dest nel modulo di copia.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Per esempio,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Esempio 7: Sostituisci tutte le istanze di una stringa.
Utilizzando sostituire modulo possiamo sostituire una parola con un'altra parola. Il modulo di sostituzione avrà bisogno di 3 parametri, ovvero 'percorso', 'regexp' (per trovare la parola particolare) e 'sostituisci' (fornendo un'altra parola per la sostituzione).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Esempio 8: Archivi o file ZIP e cartelle
Utilizzando Ansible archivio modulo puoi comprimere file o cartelle in formato 'zip', '.gz' o 'bz2'.
Nota : I file o le cartelle da comprimere dovrebbero essere disponibili sui server di destinazione e dovrebbero avere i pacchetti per tar, bzip2, gzip, file zip installati su di essi. Puoi avere un'attività playbook separata per l'installazione di questi pacchetti.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Il playbook sopra comprimerà il file niranjan.txt nel file 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
Il playbook sopra comprimerà più file nel file niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Il playbook sopra comprimerà tutti i file nella directory / home / ansible.
Esempio 9: Lavorare con data e timestamp
L'utilizzo della data e del timestamp del sistema aiuta in determinati scopi di stato o di registrazione. I fatti Ansible forniscono l'accesso alla data e all'ora dei server remoti o di destinazione. Quindi possiamo usare il file modulo di debug per stampare l'output insieme al file dove attributo come mostrato di seguito.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Il playbook sopra mostra la data.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Il playbook sopra mostra l'ora.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Il playbook sopra creerà un file dinamico basato sulla data corrente per Per esempio . niranjan2018-07-15.log
Esempio 10: Esempio di variabili
Le variabili vengono utilizzate per memorizzare i valori. Nell'esempio seguente dichiaro la variabile nome con valore niranjan . L'output sarà niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Possiamo anche avere un array o un elenco di variabili come di seguito Esempio .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
L'indicizzazione dell'array inizia da ZERO (0). Quindi l'output nell'esempio precedente sarà Niranjan.
Esempio 11: Registra variabili
Possiamo anche catturare l'output di qualsiasi attività in una variabile di registro.
- 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 visualizzare - utilizzare l'attributo msg e per acquisire qualsiasi valore utilizzare l'attributo var nel modulo - debug
Esempio 12: Playbook per installare vim editor e GIT sui server o sulle macchine di destinazione.
curriculum di esempio per tester software esperti
In questo playbook abbiamo utilizzato il file yum modulo per installare l'ultima versione dei pacchetti software.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Esempio 13: Installa il server Apache. Salva il codice seguente ed esegui Playbook come mostrato di seguito.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
A parte il yum modulo, il servizio viene utilizzato anche per avviare il servizio httpd. Le attività vengono eseguite dall'alto verso il basso in modo sincrono.
Esempio 14: Installa JDK
Il seguente playbook si automatizzerà per installare JDK 8 su tutte le macchine o server di destinazione. JDK è un prerequisito per la maggior parte degli altri pacchetti software come 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'
Esempio 15: Installa Maven
Le attività svolte consistono nel scaricare il file Maven dall'URL utilizzando l'estensione get_url modulo, estrai il file scaricato, spostalo in una directory più piccola, aggiorna ed esegui il profilo in cui il maven viene aggiunto al percorso.
--- - 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
Esempio 16: Installa Tomcat 8
Il playbook sottostante aiuta a installare e avviare Tomcat 8 sulle macchine o sui server di destinazione.
Puoi fare clic Qui per copiare il percorso del collegamento dell'ultima versione di Tomcat 8. Fare clic su Qui per l'URL contenente il file tar Tomcat 8 che ho utilizzato in questo 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
Esempio 17: pre_tasks, post_tasks e tag
Puoi usare pre_tasks e post_tasks per eseguire determinate attività prima o dopo l'esecuzione dell'attività principale.
Normalmente in un playbook ci sono così tante attività che vengono eseguite. E se hai bisogno di eseguire solo una determinata attività? I tag sono la risposta. Diamo un'occhiata all'opzione sottostante che ha tutte e 3 le opzioni. Ha 2 compiti, uno con un TAG e uno senza 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
Vediamo cosa succede durante l'esecuzione del playbook con l'opzione –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
L'output sopra sembra migliore e chiaro. Play # 1 ha un tag niranjan ma Play # 2 non ha alcun tag.
Se è necessario eseguire le attività con il tag niranjan, il comando da eseguire sarebbe:
$ ansible-playbook preposttagseg.yml --tags niranjan
La seconda riproduzione non viene eseguita e il file non viene creato.
Esempio 18: Gestori
Qualsiasi pacchetto software disporrà di file di configurazione e qualsiasi modifica avrà effetto solo al riavvio del servizio. Quindi è necessario che il servizio sia impostato per il riavvio. Per Per esempio. Nel playbook sottostante, se lo esegui più volte, il servizio si riavvierà comunque indipendentemente dalle modifiche apportate o meno, il che non è corretto.
--- - 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
Quindi è necessario riavviare il servizio solo se le modifiche vengono apportate ai file di configurazione. Gestori fornire quella caratteristica.
Quindi il flusso corretto con i gestori sarebbe avere un file notificare opzione.
--- - 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
Quindi, per la prima volta, il server Apache verrà installato e avviato. Anche se riesegui il playbook senza apportare modifiche, il servizio httpd non si riavvierà poiché è già avviato.
Se vengono apportate modifiche ai file di configurazione o se i file HTML vengono modificati, una volta eseguito il playbook, al gestore viene notificato di riavviare il servizio. Il nome nella sezione di notifica e nei gestori dovrebbe essere lo stesso. Il gestore viene scritto come qualsiasi altra attività ma viene chiamato solo se ci sono modifiche.
Ansible Vault
La maggior parte delle volte quando i dati sensibili o riservati devono essere protetti nel playbook, è possibile crittografarli piuttosto che conservarli in un file di testo leggibile da tutti. Ansible Vault ti consente di crittografare il playbook per proteggere i dati riservati.
Per esempio, considera la seguente attività in cui viene copiato un contratto di lavoro riservato.
In questi casi, avresti bisogno di 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
Di seguito sono riportati i passaggi che è necessario seguire per crittografare i file del playbook sopra.
# 1) Creazione di nuovi file crittografati
Per creare nuovi file crittografati con Vault utilizzare il ansible-vault create comando.
$ ansible-vault create jobagreement.yml
Dopo aver confermato la password, si aprirà una finestra di modifica per aggiungere contenuti al file.
Ansible crittograferà il contenuto quando chiudi il file. Invece di vedere i contenuti effettivi vedrai blocchi crittografati.
# 2) Per crittografare un file yml esistente utilizzare quanto segue
$ ansible-vault encrypt existingfile.yml
Verrà nuovamente richiesta la password per la crittografia.
# 3) Visualizzazione del file crittografato
Usa il comando vista ansible-vault per esaminare il contenuto effettivo del file.
$ ansible-vault view jobagreement.yml
Ti verrà richiesta di nuovo la password per esaminare il contenuto del file.
# 4) Modifica di file crittografati
Se devi modificare il file usa il comando ansible-vault modifica
$ ansible-vault edit users.yml
Immettere la password per modificare il file.
# 5) Modifica della password dei file crittografati
Usa il comando rekey ansible-vault per modificare la password del file.
$ ansible-vault rekey jobagreement.yml
# 6) Esegui un file playbook Ansible crittografato
Utilizzare l'opzione –ask-vault-pass con il comando ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Decrittografare manualmente i file crittografati
Utilizzare il comando ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Sommario
Bene, in questo tutorial, abbiamo visto i due aspetti più importanti della gestione della configurazione che sono Ansible Playbook e protezione dei dati sensibili utilizzando Ansible Vaults.
Gli esempi precedenti di playbook ti avrebbero dato un'idea su come automatizzare varie attività in diversi scenari durante la consegna del software.
Nel nostro prossimo tutorial, vedremo come modularizzare il Playbook utilizzando ruoli Ansible, integrarlo con Jenkins e l'aspetto più importante per lavorare con i moduli Ansible S3 ed EC2 per la gestione delle istanze AWS (Crea e termina istanze EC2).
miglior software gratuito per l'orologio dei dipendenti
Tutorial PREV | PROSSIMO Tutorial
Lettura consigliata
- Tutorial Ansible: installazione e utilizzo con moduli Ansible
- Comandi di automazione SeeTest: una spiegazione dettagliata con esempi
- Ruoli Ansible, integrazione con Jenkins in DevOps e moduli EC2
- Come sviluppare script di test utilizzando i 5 framework di automazione dei test più popolari (esempi)
- Scriptless Test Automation Framework: strumenti ed esempi
- Tutorial Python DateTime con esempi
- Comando Taglia in Unix con esempi
- Test Automation - È una carriera specializzata? I normali tester possono eseguire anche l'automazione?