Je suis nouveau chez ansible et j'explorais des rôles dépendants. lien de documentation
Ce que je n'ai pas trouvé dans la documentation était: où placer le requirements.yml
fichier.
Par exemple, si mon site.yml
ressemble à ça:
---
- name: prepare system
hosts: all
roles:
- role1
Et, disons
Typiquement, la galaxie ansible a la structure suivante:
└── test-role
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Les dépendances sont ajoutées à meta/main.yml
. En supposant que role1 a des dépendances marquées dans ce fichier comme (et de même pour role2):
dependencies:
- role: role2
- role: role3
Et, j'ai aussi un requirements.yml
fichier qui ressemble à:
---
- src: some git link1
version: master
name: role2
- src: some git link2
version: master
name: role3
Ma question: où dois-je placer ce requirements.yml
fichier pour role1?
Je comprends que la configuration requise devra être installée par la commande,
ansible-galaxy install -r requirements.yml -p roles/
Et, je peux le faire pour le rôle1, mais comment cela est-il automatisé pour le rôle2? Les dépendances successives doivent-elles être résolues et installées manuellement de cette façon, ou y a-t-il quelque chose de mieux?
Techniquement parlant, vous pouvez mettre votre requirements.yml
fichier où vous voulez tant que vous reflétez le chemin correct dans votre ansible-galaxy install
commande.
En attendant, si jamais vous voulez exécuter vos playbooks à partir d'Ansible Tower/Awx, je vous suggère de vous en tenir aux exigences d'Ansible Tower et de mettre votre requirements.yml
fichier dans <project-top-level-directory>/roles/requirements.yml
Concernant les dépendances entre les rôles, ansible-galaxy
est capable de les suivre par eux-mêmes lorsqu'ils sont rencontrés lors de l'installation. Vous n'avez donc pas besoin de les spécifier tous dans votre requirements.yml
, uniquement ceux de niveau supérieur. Il vous suffit de spécifier correctement vos dépendances dans chaque rôle externe.
meta/main.yml
pour le rôle1dependencies:
- src: https://my.scm.com/my-ansible-roles/role2.git
scm: git
version: master
name: role2
- src: https://my.scm.com/my-ansible-roles/role3.git
scm: git
version: master
name: role3
meta/main.yml
pour le rôle2dependencies:
- src: https://my.scm.com/my-ansible-roles/role4.git
scm: git
version: master
name: role4
- src: https://my.scm.com/my-ansible-roles/role5.git
scm: git
version: master
name: role5
roles/requirements.yml
---
- src: https://my.scm.com/my-ansible-roles/role1.git
scm: git
version: master
name: role1
Pour être le plus exhaustif possible, c'est ce que je fais actuellement sur mes projets pour gérer les dépendances localement ainsi que les rôles locaux/projet uniquement
ansible-project-dir
└─── roles
| └─── locally-versionned-role1
| └─── locally-versionned-role2
| └─── ...
| └─── requirements.yml
| └─── .gitignore
└─── ansible.cfg
└─── playbook1.yml
└─── playbook2.yml
ansible.cfg
Je force la recherche de rôles et les téléchargements dans le répertoire local roles
en définissant roles_path = roles
, afin que l'utilisateur puisse utiliser ansible-galaxy install
sans le -p
paramètre.
roles/requirements.yml
Déjà discuté ci-dessus. Répertoriez simplement les dépendances par rapport au niveau supérieur externe (c'est-à-dire non versionnées dans le projet) comme nom de rôle galaxy ou comme git uris. Si vous devez extraire complètement ces rôles pour effectuer plus tard des validations git/pousser dessus, vous pouvez utiliser ansible-galaxy install -g -f -r roles/requirements
roles/.gitignore
# Ignore everything in roles dir
/*
# Except:
# the .gitignore file
!.gitignore
# the requirements file
!requirements.yml
# Readme if you have one
!README.md
# and any specific role we want to version locally
!locally-versionned-role*/