[PYTHON] [Ansible] Ce à quoi je fais attention lorsque j'écris ansible

C'est devenu beaucoup plus pratique (mon style d'écriture est plus ancien) que l'ancienne version, donc un mémo quand j'ai basculé la gestion de mon fichier dot sur ansible et essayé diverses choses

environnement

Site référencé

Lire la présentation du répertoire des meilleures pratiques

En regardant divers référentiels, il semble que ansible soit écrit avec différentes structures de répertoires, mais le document officiel [Disposition du répertoire](http://docs.ansible.com/ansible/playbooks_best_practices.html#directory- Puisqu'il est décrit dans la mise en page), écrivons (ou visons) avec une structure de répertoires qui y fait référence

Choses liées au jugement (quand le système)

Il existe divers problèmes qui ne peuvent être résolus par les modules seuls.

La modification du résultat de l'exécution du playbook est toujours modifiée uniquement lorsque le comportement de l'hôte cible change.

Bien que décrit dans

Si c'est un playbook que vous avez écrit, il s'agit d'un changement dont vous n'avez pas à vous soucier. Vous pouvez juger immédiatement en regardant le résultat de l'exécution d'ansible, mais si vous obtenez un changement lorsque quelqu'un d'autre exécute ce playbook, vous vous demanderez, "Oh, quelque chose a changé?" Je pense qu'il est souhaitable que le changement ne change que lorsque le comportement du système d'exploitation cible change.

Sinon, le changement devient effrayant, et il devient impossible d'écrire des tâches communes en production, mise en scène, développement, etc., et le processus de réalisation des tâches en fonction de chaque environnement commence. À ce stade, la "sauce secrète" devrait être assez avancée. J'ai l'impression de ne pas savoir à quoi ça sert.

Depuis quand est rapide, écrivez la branche de condition d'exécution autant que possible avec quand

C'est une histoire rapide, mais de changed_when [when](http: //docs.ansible. com / ansible / playbooks_error_handling.html # controller-what-defining-failure) semble souvent plus rapide pour exécuter des playbooks, alors utilisez (Peut-être chaged_when a l'impression de faire une action, puis une décision quand. Je suis désolé si c'est faux.)

Pour les modules spécifiques au système d'exploitation, ajoutez `quand:" ansible_os_family == '{uname}' "`

Par exemple, si vous limitez le système d'exploitation cible à OSX lors de l'écriture de la tâche pour installer nkf, vous écrirez comme ceci

roles/nkf/install/tasks/main.yml


- name: Install the nkf from homebrew
  homebrew: name=nkf state=present

Mais nkf est également nécessaire pour le système d'exploitation invité, non? Si vous écrivez ceci afin de ne pas créer de rôles inutiles lorsque cela se produit, vous pouvez garantir la même opération à différents systèmes d'exploitation avec un rôle.

roles/nkf/install/tasks/main.yml


- name: Install the nkf from homebrew
  homebrew: name=nkf state=present
  when: "ansible_os_family == 'Darwin'"

- name: Install the nkf from yum
  yum: pkg=nkf state=present
  when: "ansible_os_family == 'RedHat'"

Avec `` `failed_when: no``` plutôt que ignore_erros

Il existe ignore_errors car vous pouvez l'ignorer même si une erreur se produit.

"répugnant····"

Ou plutôt, si ignore_errors se produit lors de l'exécution du playbook, échoué est affiché à l'écran.

Quelque chose de rouge apparaît sur la console, même si ce n'est pas possible.

Ce que vous voulez faire avec ignore_errors est d'ignorer l'échec, donc si vous l'ignorez, ne provoquez pas d'échec

failed_when: no

Écrivons. De cette façon, vous ne serez pas échoué sur la console.

Utilisez meta si vous avez un rôle dépendant

Par exemple, chrome est requis lors de l'installation de chrome-cli qui exploite chrome avec CUI.

La façon d'écrire la tâche dans ce cas est comme ça

Tâche d'installation de chrome-cli

roles/homebrew/brew/chrome-cli/tasks/main.yml


- name: Install the chrome-cli in the brew.
  homebrew: name=chrome-cli state=present
  when: "ansible_os_family == 'Darwin'"

Installez simplement chrome-cli avec homebrew

Tâche pour installer google-chrome

roles/homebrew/brew-cask/google-chrome/tasks/main.yml


- name: Install the google-chrome in the brew-cask
  homebrew_cask: name=google-chrome state=present
  when: "ansible_os_family == 'Darwin'"

Installez simplement google-chrome avec homebrew-cask

chrome-cli est une méta de dépendance homebrew / brew-cask / google-chrome

homebrew/brew/chrome-cli/meta/main.yml


dependencies:
  - { role: homebrew/brew-cask/google-chrome }
chrome-cli
├── meta
│   └── main.yml
└── tasks
    └── main.yml

google-chrome
└── tasks
    └── main.yml

Ecrivez deux rôles et décrivez les dépendances dans meta

Si vous voulez wget, utilisez get_url

Comme le dit le titre. Pour mémo personnel

Manipuler des fichiers et des répertoires

J'oublie souvent cela et regarde souvent la documentation du module ansible, donc mon propre mémo

Vérifier l'existence de fichiers et de répertoires est stat

Si vous regardez les [exemples] ci-dessus (http://docs.ansible.com/ansible/stat_module.html#examples), vous pouvez faire la plupart des choses.

finalement

Je l'ajouterai s'il y a une note supplémentaire.

Recommended Posts

[Ansible] Ce à quoi je fais attention lorsque j'écris ansible
Éléments à prendre en compte lors de la mise en œuvre d'Airflow avec docker-compose
Un résumé divers de ce que j'ai recherché sur Ansible
Ce que j'ai appris sur Linux
Ce qui m'inquiétait lors de l'affichage d'images avec matplotlib
Ce que j'ai vérifié sur le post de Qiita
Ce que je suis entré lors de l'utilisation de Tensorflow-gpu
Ce à quoi j'ai fait référence en étudiant tkinter
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
[Question] Que se passe-t-il si vous utilisez% en python?
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (1)
Que faire lorsque l'imitation est intégrée à Python
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (3)
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)
Une note de ce que j'ai appris quand j'ai pensé à utiliser pyenv ou virtualenv sous Windows