task automation using ansible playbooks
Apprenez à automatiser les tâches à l'aide des playbooks Ansible et des coffres-forts Ansible pour sécuriser les données sensibles:
Dans notre précédent tutoriel Ansible n ° 1 , nous avons découvert les différents composants d'Ansible et comment installer et configurer cet outil avec divers modules. Nous avons également vu comment les modules sont utilisés pour exécuter une fonction ou une tâche.
Dans cette partie, nous examinerons l'automatisation des tâches à l'aide des playbooks Ansible et des coffres Ansible pour sécuriser les données sensibles.
Lecture suggérée => Guide d'apprentissage sur DevOps
Questions entretien développeur pl / sql
Ce que vous apprendrez:
Playbooks Ansible
Nous avons vu comment exécuter des tâches uniques ou des tâches ponctuelles à l'aide de modules, mais que se passe-t-il si vous devez exécuter plusieurs tâches? Les playbooks aident à les exécuter de manière scriptée.
Les playbooks définissent des variables, des configurations, des étapes de déploiement, attribuent des rôles, exécutent plusieurs tâches. Pour Par exemple. COPIER / SUPPRIMER des fichiers et des dossiers, installer des packages, démarrer des services. Les playbooks sont donc principalement définis pour orchestrer les étapes vers plusieurs machines ou serveurs et les amener tous à un certain état souhaité.
Playbook est écrit en Format YAML avec une extension de fichier .yml. Il faut faire très attention au format et à l'alignement qui le rendent très sensible.
Il contient les sections suivantes:
- Chaque playbook commence par 3 tirets '-'
- Section hôte - Définit les machines cibles sur lesquelles le playbook doit s'exécuter. Ceci est basé sur le fichier d'inventaire Ansible.
- Section variable - Ceci est facultatif et peut déclarer toutes les variables nécessaires dans le playbook. Nous examinerons également quelques exemples.
- Section des tâches - Cette section répertorie toutes les tâches qui doivent être exécutées sur la machine cible. Il spécifie l'utilisation des modules. Chaque tâche a un nom qui est une petite description de ce que la tâche fera et sera répertoriée pendant l'exécution du playbook.
Par exemple,
Si nous devons installer et configurer Tomcat, il comprendra les tâches suivantes:
- Téléchargez et installez Tomcat
- Configurer Tomcat
- Démarrez Tomcat
De même, un autreExemplepour l'utilisation de Tomcat utilisé dans la livraison continue de DevOps, les tâches peuvent être les suivantes:
- Arrêter l'application
- Désinstaller l'application
- Installez une nouvelle version du fichier WAR.
- Lancer l'application
Exemple de 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
Dans le script ci-dessus, regardez l'alignement en commençant par le haut et il doit être maintenu, sinon vous obtiendrez des erreurs de syntaxe.
Pour exécuter n'importe quel playbook, utilisez la commande suivante
$ ansible-playbook
Pour rechercher des erreurs de syntaxe dans le playbook
$ ansible-playbook --syntax-check
Pour afficher la liste des hôtes
$ ansible-playbook --list-hosts
Créer des playbooks avec des exemples
Dans cette section, nous verrons plusieurs exemples de création de playbooks que vous devrez peut-être exécuter régulièrement. Ces playbooks devront être créés et exécutés à partir de la machine de contrôle.
Enregistrez tous les playbooks ci-dessous dans un fichier .yml et exécutez comme indiqué ci-dessous.
$ ansible-playbook filename.yml
Exemple 1: Créez le fichier sur les machines ou serveurs cibles comme indiqué dans le fichier d'inventaire et le groupe du serveur Web, enregistrez le code ci-dessous avec l'extension .yml et exécutez le playbook.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
Dans l'exemple ci-dessus, nous avons utilisé le déposer module pour créer le fichier.
Exemple 2: Créez un répertoire avec le mode 775 et le propriétaire / groupe comme Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Exemple 3: Créez plusieurs répertoires. Pour créer plusieurs répertoires avec une seule tâche, vous pouvez utiliser la boucle with_items déclaration. Ainsi, lorsque vous exécutez le playbook ci-dessous, il est interprété comme 3 tâches différentes.
--- - 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: Créez un utilisateur. Regardons le utilisateur module pour créer et supprimer des utilisateurs dans le playbook.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Exemple 5: Supprimer l'utilisateur. La suppression d'un utilisateur est très simple et nécessite le Etat être réglé sur absent . Cela équivaut au userdel commande sous Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
Dans le playbook ci-dessus, remove = oui supprimera le répertoire personnel et force = oui supprimera les fichiers du répertoire.
Exemple 6: Copiez le contenu dans un fichier à l'aide du module de copie.
Si vous devez copier un fichier sur les machines ou serveurs cibles, utilisez le src et dest dans le module de copie.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Par exemple,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Exemple 7: Remplacez toutes les instances d'une chaîne.
Utilisant remplacer module, nous pouvons remplacer un mot par un autre mot. Le module replace aura besoin de 3 paramètres, à savoir «path», «regexp» (pour trouver le mot particulier) et «replace» (fournissant un autre mot pour le remplacement).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Exemple 8: Fichiers et dossiers d'archive ou ZIP
Utilisation d'Ansible archiver module, vous pouvez compresser des fichiers ou des dossiers au format «zip», «.gz» ou «bz2».
Noter : Les fichiers ou dossiers à compresser doivent être disponibles sur les serveurs cibles et doivent avoir les packages pour tar, bzip2, gzip, fichier zip installés sur eux. Vous pouvez avoir une tâche de playbook distincte pour installer ces packages.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Le playbook ci-dessus compressera le fichier niranjan.txt dans le fichier 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
Le playbook ci-dessus compressera plusieurs fichiers dans le fichier niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Le playbook ci-dessus compressera tous les fichiers dans le répertoire / home / ansible.
Exemple 9: Travailler avec la date et l'horodatage
L'utilisation de la date et de l'horodatage du système aide à certaines fins d'état ou de journalisation. Les faits Ansible permettent d'accéder à la date et à l'heure des serveurs distants ou cibles. Nous pouvons donc utiliser le module de débogage pour imprimer la sortie avec le où attribut comme indiqué ci-dessous.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Le playbook ci-dessus affiche la date.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Le playbook ci-dessus affiche l'heure.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Le playbook ci-dessus créera un fichier dynamique basé sur la date actuelle pour Par exemple . niranjan2018-07-15.log
Exemple 10: Exemple de variables
Les variables sont utilisées pour stocker des valeurs. Dans l'exemple ci-dessous, je déclare la variable Nom avec valeur Niranjan . La sortie sera Niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
On peut aussi avoir un tableau ou une liste de variables comme ci-dessous Exemple .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
L'indexation du tableau commence à partir de ZERO (0). Par conséquent, la sortie dans l'exemple ci-dessus sera Niranjan.
Exemple 11: Enregistrer les variables
Nous pouvons également capturer la sortie de n'importe quelle tâche dans une 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
Remarque: pour afficher - utilisez l'attribut msg et pour capturer n'importe quelle valeur, utilisez l'attribut var dans le module - debug
Exemple 12: Playbook pour installer l'éditeur vim et GIT sur les serveurs ou machines cibles.
Dans ce playbook, nous avons utilisé le Miam module pour installer la dernière version des progiciels.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Exemple 13: Installez le serveur Apache. Enregistrez le code ci-dessous et exécutez le playbook comme indiqué ci-dessous.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Séparé de Miam module, le un service module est également utilisé pour démarrer le service httpd. Les tâches s'exécutent de haut en bas de manière synchrone.
Exemple 14: Installez JDK
Le playbook suivant s'automatisera pour installer JDK 8 sur toutes les machines ou serveurs cibles. JDK est un pré-requis pour la plupart des autres logiciels tels que Maven ou 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: Installez Maven
Les tâches effectuées consistent à télécharger le fichier maven à partir de l'URL en utilisant le get_url module, extrayez le fichier téléchargé, déplacez-le dans un répertoire plus petit, mettez à jour et exécutez le profil où le maven est ajouté au chemin.
--- - 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: Installez Tomcat 8
Le playbook ci-dessous permet d'installer et de démarrer Tomcat 8 sur les machines ou serveurs cibles.
Vous pouvez cliquer ici pour copier l'emplacement du lien de la dernière version de Tomcat 8. Cliquez sur ici pour l'URL contenant le fichier tar Tomcat 8 que j'ai utilisé dans ce 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
Exemple 17: pre_tasks, post_tasks et balises
Vous pouvez utiliser pre_tasks et post_tasks pour exécuter certaines tâches avant ou après l'exécution de la tâche principale.
Normalement, dans un playbook, vous avez tellement de tâches qui sont exécutées. Que faire si vous ne devez exécuter qu'une certaine tâche? Les balises sont la réponse. Examinons l'option ci-dessous qui a les 3 options. Il a 2 tâches à savoir une avec un TAG et une sans 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
Voyons ce qui se passe lors de l'exécution du playbook avec l'option –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
La sortie ci-dessus est meilleure et plus claire. Play # 1 a un tag niranjan mais Play # 2 ne contient aucun tag.
Si vous devez exécuter les tâches avec la balise niranjan, la commande à exécuter serait:
$ ansible-playbook preposttagseg.yml --tags niranjan
La deuxième lecture n'est pas exécutée et le fichier n'est pas créé.
meilleur VPN pour le streaming
Exemple 18: Manutentionnaires
Tout progiciel aura des fichiers de configuration et toute modification apportée à celui-ci n'aura d'effet que lorsque le service sera redémarré. Vous devez donc configurer le service pour redémarrer. Pour Par exemple. Dans le playbook ci-dessous, si vous l'exécutez plusieurs fois, le service redémarrera de toute façon, quelles que soient les modifications effectuées ou non, ce qui n'est pas correct.
--- - 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
Nous devons donc redémarrer le service uniquement si les modifications sont apportées aux fichiers de configuration. Manutentionnaires fournir cette fonctionnalité.
Donc, le bon flux avec les gestionnaires serait d'avoir un notifier option.
--- - 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
Ainsi, pour la première fois, le serveur Apache sera installé et démarré. Même si vous réexécutez le playbook sans aucune modification, le service httpd ne redémarrera pas car il est déjà démarré.
S'il y a des changements dans les fichiers de configuration ou si les fichiers HTML sont modifiés, une fois le playbook exécuté, le gestionnaire est invité à redémarrer le service. Le nom dans la section de notification et les gestionnaires doivent être identiques. Le gestionnaire est écrit comme toute autre tâche mais n'est appelé que s'il y a des changements.
Voûte Ansible
La plupart du temps, lorsque des données sensibles ou confidentielles doivent être protégées dans le playbook, elles peuvent être cryptées plutôt que de simplement les conserver dans un fichier texte lisible par tous. Ansible Vault vous permet de crypter le playbook pour protéger les données confidentielles.
Par exemple, considérez la tâche suivante lorsqu'un contrat de travail confidentiel est copié.
Dans de tels cas, vous auriez besoin d'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
Voici les étapes à suivre pour crypter les fichiers de playbook ci-dessus.
# 1) Création de nouveaux fichiers cryptés
Pour créer de nouveaux fichiers chiffrés avec Vault, utilisez le ansible-vault créer commander.
$ ansible-vault create jobagreement.yml
Après avoir confirmé le mot de passe, une fenêtre d'édition s'ouvrira pour ajouter du contenu au fichier.
Ansible crypte le contenu lorsque vous fermez le fichier. Au lieu de voir le contenu réel, vous verrez des blocs chiffrés.
# 2) Pour crypter un fichier yml existant, utilisez ce qui suit
$ ansible-vault encrypt existingfile.yml
Le mot de passe sera à nouveau demandé pour le cryptage.
# 3) Affichage du fichier crypté
Utilisez la commande vue ansible-vault pour regarder le contenu réel du fichier.
$ ansible-vault view jobagreement.yml
On vous demandera à nouveau le mot de passe pour consulter le contenu du fichier.
# 4) Modification de fichiers cryptés
Si vous devez éditer le fichier, utilisez la commande ansible-vault modifier
$ ansible-vault edit users.yml
Entrez le mot de passe pour modifier le fichier.
# 5) Modification du mot de passe des fichiers cryptés
Utilisez la commande renouvellement de clé de coffre-fort ansible pour changer le mot de passe du fichier.
$ ansible-vault rekey jobagreement.yml
# 6) Exécutez un fichier de playbook Ansible crypté
Utilisez l'option –ask-vault-pass avec la commande ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Décryptage manuel des fichiers cryptés
Utilisez la commande ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Résumé
Eh bien dans ce tutoriel, nous avons vu les deux aspects les plus importants de la gestion de la configuration qui sont Playbooks Ansible et protection des données sensibles à l'aide d'Ansible Vaults.
Les exemples de playbook ci-dessus vous auraient donné une idée de la façon d'automatiser diverses tâches dans différents scénarios lors de la livraison de logiciels.
Dans notre prochain tutoriel, nous verrons comment modulariser le Playbook à l'aide des rôles Ansible, l'intégrer à Jenkins et l'aspect le plus important pour travailler avec les modules Ansible S3 et EC2 pour gérer les instances AWS (Créer et mettre fin aux instances EC2).
qu'est-ce que le test alpha dans les tests logiciels
Tutoriel PREV | Tutoriel SUIVANT
lecture recommandée
- Tutoriel Ansible: Installation et utilisation avec les modules Ansible
- Commandes d'automatisation SeeTest: une explication détaillée avec des exemples
- Rôles Ansible, intégration avec Jenkins dans DevOps et modules EC2
- Comment développer des scripts de test à l'aide des 5 cadres d'automatisation de test les plus populaires (exemples)
- Framework d'automatisation des tests sans script: outils et exemples
- Tutoriel Python DateTime avec des exemples
- Commande Cut sous Unix avec des exemples
- Automatisation des tests - Est-ce une carrière spécialisée? Les testeurs normaux peuvent-ils également faire de l'automatisation?