This project is maintained by p-avery
Lisez ceci dans d’autres langues:
English,
日本語,
Portugues do Brasil,
Française.
Bien qu’il soit possible d’écrire un playbook dans un fichier comme nous l’avons fait tout au long de cet atelier, vous souhaiterez éventuellement réutiliser des fichiers et commencer à organiser les choses.
Les rôles Ansible sont notre façon de procéder. Lorsque vous créez un rôle, vous déconstruisez votre playbook en parties et ces parties se trouvent dans une structure de répertoires. Ceci est expliqué plus en détail dans la meilleure pratique.
Cet exercice couvrira:
Les rôles sont des éléments réutilisables comprenant des fichiers Ansible et a pour but de simplifier la gestion des fichiers référencés.
Les rôles suivent une structure de répertoires définie; un rôle est nommé par le répertoire de niveau supérieur. Certains sous-répertoires contiennent des fichiers YAML, nommés main.yml. Les sous-répertoires de fichiers et de template peuvent contenir des objets utilisés par les fichiers YAML.
Un exemple de structure de projet pourrait ressembler à ceci, le nom du rôle serait “apache”:
apache/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Les différents fichiers main.yml contiennent du contenu en fonction de leur emplacement dans la structure de répertoires indiquée ci-dessus. Par exemple, vars/main.yml fait référence à des variables, handlers/main.yaml décrit les handlers, etc. Notez que contrairement aux playbooks, les fichiers main.yml contiennent uniquement le contenu spécifique et non des informations supplémentaires sur le playbook comme les hôtes, become ou d’autres mots clés.
Astuce
Il existe en fait deux répertoires pour les variables:
varsetdefault: les variables par défaut ont la priorité la plus faible et contiennent généralement des valeurs par défaut définies par les auteurs du rôle et sont souvent utilisées lorsqu’il est prévu que leurs valeurs soient remplacées. Les variables peuvent être définis dansvars/main.ymloudefaults/main.yml, mais pas aux deux endroits.
L’utilisation de rôles dans un Playbook est simplement:
---
- name: launch roles
hosts: web
roles:
- role1
- role2
Pour chaque rôle, les tâches, les handlers et les variables de ce rôle seront inclus dans le Playbook, dans cet ordre. Toute tâche de copie, de script, de template ou d’inclusion peuvent référencer les fichiers par leur nom de chemin absolu ou relatif. Ansible les recherchera respectivement dans les fichiers en fonction de leur utilisation.
Ansible recherche les rôles dans un sous-répertoire appelé roles dans le répertoire du projet. Cela peut être remplacé dans la configuration Ansible. Chaque rôle a son propre répertoire. Pour faciliter la création d’un nouveau rôle, l’outil ansible-galaxy peut être utilisé.
Astuce
Ansible Galaxy est votre hub pour trouver, réutiliser et partager le meilleur contenu Ansible.
ansible-galaxyaide à interagir avec Ansible Galaxy. Pour l’instant, nous allons simplement l’utiliser comme aide pour construire la structure du répertoire.
Bien, commençons à construire un rôle. Nous allons créer un rôle qui installe et configure Apache pour servir un virtual host. Exécutez ces commandes dans votre répertoire ~/ansible-files:
[student<X>@ansible ansible-files]$ mkdir roles
[student<X>@ansible ansible-files]$ ansible-galaxy init --offline roles/apache_vhost
Jetez un œil aux répertoires de rôles et à leur contenu:
[student<X>@ansible ansible-files]$ tree roles
Le fichier main.yml dans le sous-répertoire tasks du rôle doit faire ce qui suit:
S’assurer que httpd est installé
S’assurer que httpd est démarré et activé
Mettre du contenu HTML dans la racine du document Apache
Installer le template fourni pour configurer le vhost
AVERTISSEMENT
** Le
main.yml(et d’autres fichiers éventuellement inclus par main.yml) ne peut contenir que des tâches, et non de Playbook complet!**
Accédez au répertoire roles/apache_vhost. Editez le fichier tasks/main.yml:
---
- name: install httpd
yum:
name: httpd
state: latest
- name: start and enable httpd service
service:
name: httpd
state: started
enabled: true
Notez qu’ici, seules les tâches ont été ajoutées. Les détails d’un playbook ne sont pas présents.
Les tâches ajoutées jusqu’ici font:
Installez le package httpd à l’aide du module yum
Utilisez le module de service pour activer et démarrer httpd
Ensuite, nous ajoutons deux tâches supplémentaires pour garantir une structure de répertoire vhost et copier le contenu html:
- name: ensure vhost directory is present
file:
path: "/var/www/vhosts/{{ ansible_hostname }}"
state: directory
- name: deliver html content
copy:
src: web.html
dest: "/var/www/vhosts/{{ ansible_hostname }}"
Notez que le répertoire vhost est créé en utilisant le module file.
La dernière tâche que nous ajoutons utilise le module template pour créer le fichier de configuration vhost à partir d’un modèle j2:
- name: template vhost file
template:
src: vhost.conf.j2
dest: /etc/httpd/conf.d/vhost.conf
owner: root
group: root
mode: 0644
notify:
- restart_httpd
Notez qu’il utilise un handler pour redémarrer httpd après une mise à jour de configuration.
Le fichier complet tasks/main.yml est:
---
- name: install httpd
yum:
name: httpd
state: latest
- name: start and enable httpd service
service:
name: httpd
state: started
enabled: true
- name: ensure vhost directory is present
file:
path: "/var/www/vhosts/{{ ansible_hostname }}"
state: directory
- name: deliver html content
copy:
src: web.html
dest: "/var/www/vhosts/{{ ansible_hostname }}"
- name: template vhost file
template:
src: vhost.conf.j2
dest: /etc/httpd/conf.d/vhost.conf
owner: root
group: root
mode: 0644
notify:
- restart_httpd
Créez le handler dans le fichier handlers/main.yml pour redémarrer httpd lorsqu’il est notifié par la tâche de modèle:
---
# handlers file for roles/apache_vhost
- name: restart_httpd
service:
name: httpd
state: restarted
Créez le contenu HTML qui sera servi par le serveur Web.
files:[student<X>@ansible ansible-files]$ echo 'simple vhost index' > ~/ansible-files/roles/apache_vhost/files/web.html
vhost.conf.j2 dans le sous-répertoire templates du rôle.# {{ ansible_managed }}
<VirtualHost *:8080>
ServerAdmin webmaster@{{ ansible_fqdn }}
ServerName {{ ansible_fqdn }}
ErrorLog logs/{{ ansible_hostname }}-error.log
CustomLog logs/{{ ansible_hostname }}-common.log common
DocumentRoot /var/www/vhosts/{{ ansible_hostname }}/
<Directory /var/www/vhosts/{{ ansible_hostname }}/>
Options +Indexes +FollowSymlinks +Includes
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Vous êtes prêt à tester le rôle sur node2. Mais comme un rôle ne peut pas être attribué directement à un nœud, créez d’abord un playbook qui connecte le rôle et l’hôte. Créez le fichier test_apache_role.yml dans le répertoire ~/ansible-files:
---
- name: use apache_vhost role playbook
hosts: node2
become: yes
pre_tasks:
- debug:
msg: 'Beginning web server configuration.'
roles:
- apache_vhost
post_tasks:
- debug:
msg: 'Web server has been configured.'
Notez les mots clés pre_tasks et post_tasks. Normalement, les tâches des rôles s’exécutent avant les tâches d’un playbook. Pour contrôler l’ordre d’exécution, des pre_tasks sont effectuées avant l’application des rôles. Les post_tasks sont effectués une fois tous les rôles terminés. Ici, nous les utilisons simplement pour mieux mettre en évidence lorsque le rôle réel est exécuté.
Vous êtes maintenant prêt à exécuter votre playbook:
[student<X>@ansible ansible-files]$ ansible-playbook test_apache_role.yml
Exécutez une commande curl contre node2 pour confirmer que le rôle a fonctionné:
[student<X>@ansible ansible-files]$ curl -s http://22.33.44.55:8080
simple vhost index
Tout va bien? Toutes nos félicitations! Vous avez terminé avec succès les exercices d’atelier Ansible Engine!
Navigation
Exercise précédent
Cliquez ici pour revenir à l’atelier Ansible pour Red Hat Enterprise Linux