Ansible est utilisé ici en tant que module python (cf. article)
Ansible Galaxy c’est le dépôt officiel utilisé pour le partage de contenu sous ansible.
Un Rôle est une arborescence constitué de fichier et de répertoire qui auront pour but d’effectuer un ensemble d’actions cohérente et réutilisable (Rôle : « installation et configuration d’apache », « Installation et configuration de MYSQL »). Les rôles peuvent être imbriqués entre eux ou interdépendant.
Dans le dossier d’un rôle on trouve les différents dossiers:
- tasks : regroupe les actions à effectuer sur les serveur ( installer un paquet, …)
- handlers : regroupe les actions à effectuer suite à une notification (redémarrer un service,…)
- templates : contient des templates de fichier qui seront remplis et copier sur les serveurs lors de l’exécution du rôle
- files : contient les fichiers plats qui seront copiés sur le serveur.
- vars : regroupe les variables relatives au rôle
le seul répertoire indispensable dans le répertoire d’un rôle c’est « tasks » qui contient un fichiers main.yml appelé par ansible lors du lancement du rôle. Donc au final :
- un rôle contient un ou plusieurs fichiers de configuration YAML (Yet Another Markup Language)
- un fichier de configuration contient une ou plusieurs tâches
- une tâche fait appel à un module
Pour créer un rôle vous pouvez utiliser la commande ansible-galaxy n’oublié pas qu’une collection est aussi un rôle qui peux en contenir d’autre.
(ansible) root@srv:/root/ansible# mkdir roles && cd roles
(ansible) root@srv:/root/ansible/roles# ansible-galaxy init hyperviseur
(ansible) root@srv:/root/ansible/roles# tree -L 3 .
.
└── hyperviseur
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Les paramètres d’ansible sont recherchés dans l’ordre suivant (le 1er élément qui résout une variable est utilisé).
- ANSIBLE_CONFIG (Vérifie si la variable d’environment est défini)
- ansible.cfg (le fichier dans le répertoire courant: pour prévenir un risque d’élévation de privilége, le répertoire ne doit pas être modifiable pour les autres ( chmod o-w . ) sinon ansible ne le chargera pas le fichier)
- ~/.ansible.cfg (le fichier de configuration dans la home de l’utilisateur courant)
- /etc/ansible/ansible.cfg (recherche le fichier de conf sous /etc/ansible)
Pour changer la configuration d’ansible lorsqu’il est installé comme module python, nous allons commencer par créer notre fichier de conf ansible pour surchager quelque variables.
(ansible) root@srv:/root/ansible# chmod o-w .
(ansible) root@srv:/root/ansible# cat ansible.cfg
[defaults]
role_path = {{CWD}}/roles
inventory = {{CWD}}/inventaire.yml
cache_dir = {{CWD}}/.ansible/galaxy_cache
collections_paths = {{CWD}}/.ansible/collections
local_tmp = {{CWD}}/.ansible/tmp
Une collection est une grosse archive contenant des données structuré, utilisé par galaxy pour la distribution du contenu. Elle permet aux utilisateurs d’ansible de partager du contenu. Une collection contient donc plusieurs éléments, plugins (inventaire, modules, filtres …) , rôles , playbooks… Une fois la collection téléchargé vous pouvez ensuite utiliser les éléments qu’elle contient.
Nous allons installer la collection « general » de « community » depuis galaxy (le dépôt pour le partage des modules ansibles)
(ansible) root@srv:/root/ansible# ansible-galaxy collection install community.general
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/download/community-general-3.8.0.tar.gz to /root/ansible/.ansible/tmp/ansible-local-62982ug1skedh/tmp04gtgdgz/community-general-3.8.0-zrguaklp
Installing 'community.general:3.8.0' to '/root/ansible/.ansible/collections/ansible_collections/community/general'
community.general:3.8.0 was installed successfully
(ansible) root@srv:/root/ansible# tree -L 2 .ansible/collections/ansible_collections/community/general/
.ansible/collections/ansible_collections/community/general/
├── CHANGELOG.rst
├── changelogs
│ ├── changelog.yaml
│ ├── config.yaml
│ └── fragments
├── commit-rights.md
├── CONTRIBUTING.md
├── COPYING
├── docs
│ └── docsite
├── FILES.json
├── MANIFEST.json
├── meta
│ └── runtime.yml
├── plugins
│ ├── action
│ ├── become
│ ├── cache
│ ├── callback
│ ├── connection
│ ├── doc_fragments
│ ├── filter
│ ├── inventory
│ ├── lookup
│ ├── modules
│ └── module_utils
├── README.md
├── scripts
│ ├── inventory
│ └── vault
└── tests
├── config.yml
├── integration
├── requirements.yml
├── sanity
├── unit
└── utils
Laisser un commentaire