tech:bonnes_pratiques_ansible
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tech:bonnes_pratiques_ansible [2025/10/29 15:22] – Jean-Baptiste | tech:bonnes_pratiques_ansible [2025/11/20 16:27] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 74: | Ligne 74: | ||
| Éviter d' | Éviter d' | ||
| Privilégier **M(command)** à **M(shell)** \\ | Privilégier **M(command)** à **M(shell)** \\ | ||
| - | Si variables Jinja en argument à M(command) ou M(shell) : utiliser '' | + | Si variables Jinja en argument à M(shell) : utiliser '' |
| Pour **M(command)**, | Pour **M(command)**, | ||
| * '' | * '' | ||
| Ligne 179: | Ligne 179: | ||
| Éviter d’utiliser '' | Éviter d’utiliser '' | ||
| + | |||
| + | |||
| + | Pour les templates et les fichiers, systématiquement sauf si non applicable mettre en commentaire que ce fichier est géré par Ansible. (RA_QUA_N1) | ||
| + | |||
| + | Exemple : | ||
| + | '' | ||
| + | <code yaml> | ||
| + | ansible_managed: | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Pièges | ||
| + | |||
| + | ==== Run_once | ||
| + | |||
| + | |||
| + | |||
| + | run_once will be executed at each serial execution in the play. That means, if you choose serial = 1, it will be asked to confirm as many times as the quantity of targets on the play. | ||
| + | |||
| + | Check Ansible docs: https:// | ||
| + | |||
| + | When used together with serial, tasks marked as run_once will be run on one host in each serial batch. If the task must run only once regardless of serial mode, use '' | ||
| + | |||
| + | Attention aux slicing ! | ||
| + | |||
| + | |||
| + | |||
| + | === Limiter l' | ||
| + | |||
| + | <code yaml> | ||
| + | - name: Installation d'un logiciel sur plusieurs serveurs avec throttle | ||
| + | ansible.builtin.apt: | ||
| + | name: nginx | ||
| + | state: present | ||
| + | async: 600 # Exécution en mode asynchrone avec un délai maximum de 10 minutes | ||
| + | poll: 5 # Vérification toutes les 5 secondes | ||
| + | throttle: 3 # Limite à 3 installations simultanées | ||
| + | when: inventory_hostname in groups[' | ||
| + | </ | ||
| + | |||
| Ligne 196: | Ligne 236: | ||
| Variable Management for Inventory - Keeping variable data along with the hosts and groups definitions (see the inventory editor) is encouraged, rather than using group_vars/ and host_vars/ | Variable Management for Inventory - Keeping variable data along with the hosts and groups definitions (see the inventory editor) is encouraged, rather than using group_vars/ and host_vars/ | ||
| - | Autoscaling - Using the “callback” feature to allow newly booting instances to request configuration is very useful for auto-scaling scenarios or provisioning integration. | + | Autoscaling - Using the “callback” feature to allow newly booting instances to request configuration is very useful for auto-scaling scenarios or provisioning integration.$ |
| Larger Host Counts - Consider setting “forks” on a job template to larger values to increase parallelism of execution runs. Voir : Strategy, Mitogen, Slicing, Async (Asynchronous) (RA_PERF_N3) | Larger Host Counts - Consider setting “forks” on a job template to larger values to increase parallelism of execution runs. Voir : Strategy, Mitogen, Slicing, Async (Asynchronous) (RA_PERF_N3) | ||
| Ligne 202: | Ligne 242: | ||
| Ne pas utiliser Verbosity à 4 ou 5. Eviter d' | Ne pas utiliser Verbosity à 4 ou 5. Eviter d' | ||
| - | Ne pas mettre les facts des noeuds | + | Ne pas mettre les facts des nœuds |
| Le cache des facts doit être sur les managed_hosts et non coté serveur (RA_GEN_N1) | Le cache des facts doit être sur les managed_hosts et non coté serveur (RA_GEN_N1) | ||
| + | |||
| + | Ne pas faire de '' | ||
| + | |||
| + | |||
| Ligne 259: | Ligne 303: | ||
| * '' | * '' | ||
| * En utilisant import* et include* (attention aux notify avec include) | * En utilisant import* et include* (attention aux notify avec include) | ||
| + | * En utilsant '' | ||
| Utiliser SonarQube ou équivalent (RA_GEN_N4) | Utiliser SonarQube ou équivalent (RA_GEN_N4) | ||
| Ligne 387: | Ligne 432: | ||
| You cannot use loops on ' | You cannot use loops on ' | ||
| </ | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| Ligne 409: | Ligne 450: | ||
| Utiliser '' | Utiliser '' | ||
| + | |||
| + | Pour les données sensibles utiliser ansible-vault ou les Crendential AWX (RA_SEC_N1) | ||
| Troubleshooting untrusted templates | Troubleshooting untrusted templates | ||
| Ligne 468: | Ligne 511: | ||
| == Convention de nommage | == Convention de nommage | ||
| - | Si beaucoup de templates dans le role : utiliser une arborescence du style : | + | === Naming things |
| - | * files/etc/nginx/sites-available/plop | + | |
| + | * Use valid Python identifiers following standard naming conventions of being in snake_case_naming_schemes for all YAML or Python files, variables, arguments, repositories, | ||
| + | |||
| + | * Do not use special characters other than underscore in variable names, even if YAML/JSON allow them. | ||
| + | |||
| + | Source | ||
| + | |||
| + | |||
| + | === name | ||
| + | |||
| + | For example, if you have a task named **Restart server** inside a file named '' | ||
| + | Source : https://ansible.readthedocs.io/ | ||
| + | |||
| + | === role-name | ||
| + | |||
| + | (snake case) | ||
| + | Role names must contain only lowercase alphanumeric characters and the underscore _ character. Role names must also start with an alphabetic character. | ||
| + | Source : https:// | ||
| + | |||
| + | |||
| + | === var-naming | ||
| + | |||
| + | ... | ||
| + | Variable names must contain only lowercase alphanumeric characters and the underscore _ character. Variable names must also start with either an alphabetic or underscore _ character. | ||
| + | ... | ||
| + | role_name_ as a prefix | ||
| + | ... | ||
| + | Source : https:// | ||
| + | |||
| + | |||
| + | === Extra_vars | ||
| Voir : https:// | Voir : https:// | ||
| - | Convention pour les **register** | + | Exemple : '' |
| + | |||
| + | |||
| + | === Register | ||
| + | |||
| + | Convention pour les **register**. | ||
| + | Exemple '' | ||
| + | |||
| + | |||
| + | === Autres | ||
| Les listes seront nommées avec un **s** finals. L' | Les listes seront nommées avec un **s** finals. L' | ||
| Ligne 484: | Ligne 566: | ||
| * Variables internes | * Variables internes | ||
| - | Nommer les templates Jinja avec l’extension **j2** (RA_CONV_O) | + | Nommer les templates Jinja avec l’extension **j2** (RA_CONV_REQ) |
| - | Préférer les variables a plat plutôt que les variables dictionnaires (RA_CONV_F) | + | Préférer les variables a plat plutôt que les variables dictionnaires (RA_CONV_OPT) |
| <code yaml> | <code yaml> | ||
| endpoint_url: | endpoint_url: | ||
| Ligne 504: | Ligne 586: | ||
| === Boucles | === Boucles | ||
| - | De préférence nommer la variable de boucle ('' | + | De préférence nommer la variable de boucle ('' |
| C'est plus lisible, et cela permet un fonctionnement non équivoque en cas de boucles imbriqués. | C'est plus lisible, et cela permet un fonctionnement non équivoque en cas de boucles imbriqués. | ||
| Ligne 526: | Ligne 608: | ||
| === Fichiers / templates | === Fichiers / templates | ||
| - | Pour les roles contenants beaucoup de fichiers dans " | + | Pour les roles contenants beaucoup de fichiers dans " |
| * files/ | * files/ | ||
| * files/ | * files/ | ||
tech/bonnes_pratiques_ansible.1761747777.txt.gz · Dernière modification : de Jean-Baptiste
