web-dev-qa-db-fra.com

Comment installer automatiquement les rôles Ansible Galaxy?

Tous mes playbooks/rôles Ansible sont archivés dans mon dépôt Git.

Cependant, pour les rôles Ansible Galaxy, je dois toujours les télécharger explicitement, un par un, sur toutes les machines sur lesquelles je veux utiliser Ansible.

Il est même difficile de savoir à l'avance quels rôles Ansible Galaxy sont nécessaires jusqu'à ce qu'Ansible se plaint d'un rôle manquant au moment de l'exécution.

Comment est-on supposé gérer les dépendances de rôle Ansible Galaxy? Je souhaite que ceux-ci soient enregistrés dans mon dépôt Git avec le reste de mon code ansible ou qu'ils soient automatiquement identifiés et téléchargés lorsque je lance Ansible sur une nouvelle machine.

103
pdeva

Vous devriez utiliser un requirements.yml fichier pour ce cas d'utilisation. Décrivez les rôles dont vous avez besoin, en utilisant l’une des méthodes d’installation suivantes:

# Install a role from the Ansible Galaxy
- src: dfarrell07.opendaylight

# Install a role from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight

# Install a role from a specific git branch
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: Origin/master

# Install a role at a specific tag from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: 1.0.0

# Install a role at a specific commit from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: <commit hash>

Puis installez-les:

ansible-galaxy install -r requirements.yml

Voici un exemple de travail (installer OpenDaylight en utilisant Ansible en tant que fournisseur Vagrant). Voir le documents Ansible pertinents pour plus d'informations.

129
dfarrell07

Comme suggéré, vous pouvez utiliser ansible galaxy pour ce besoin.

Ansible a une fonctionnalité où vous pouvez créer un requirements.yml fichier qui répertorie tous vos rôles. Vous pouvez trouver plus d'informations à ce sujet ici: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-file

Par exemple (exigences.yml):

- src: yatesr.timezone

Vous exécutez alors ansible-galaxy install -r requirements.yml sur ce fichier pour télécharger tous les rôles listés ici.

Si vous souhaitez l'automatiser davantage, vous pouvez créer un script Shell simple qui exécutera les deux commandes.

Par exemple (ansible.sh):

./ansible.sh

ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory 
44
Kieran Andrews

Je me trouve souvent en train d’installer un Java JDK. L’utilisation d’un rôle facilite cette manipulation. J’ai essayé différentes méthodes (notamment de nombreux .gitmodules et sous-modules ... Je dois utiliser plusieurs systèmes git pour le travail et tout cela devient moche.) Ma plus grande exigence est de ne pas vérifier le code de rôle dans mon projet Playbook, principalement pour pouvoir tout conserver au même endroit.

Le contenu de mon fichier 'Requirements.yml':

- src: https://github.com/staylorx/ansible-role-wls-prep.git
  version: master
  name: staylorx.wls-prep

- src: https://my-work-git-extravaganza.com
  version: 2.x
  name: coolplace.niftyrole

#From Ansible Galaxy
- src: staylorx.Oracle-jdk

Je lance un playbook séparé, install-roles.yml:

---

- hosts: localhost

  tasks:
    - file:
        path:  roles
        state: absent

    - local_action:
        command ansible-galaxy install -r requirements.yml --roles-path roles

    - lineinfile:
        dest:   .gitignore
        regexp: '^\/roles$'
        line:   '/roles'
        state:  present

Je lance ce premier playbook, puis mes rôles dans n'importe quel playbook normalement. Pour moi, le secret est de s'assurer que c'est ignoré par git afin que je ne vérifie pas les rôles par erreur. De plus, comme j'efface le dossier à chaque fois, je m'assure que je n'ai pas besoin de forcer ou d'ignorer les erreurs.

17
staylorx

Une autre solution consiste à utiliser des sous-modules git. Après tout, Ansible Galaxy est uniquement un répertoire de référentiels github ...

J'utilise cette commande pour ajouter automatiquement n'importe quel rôle Galaxy en tant que sous-module:

ansible-galaxy info <package> | grep -A 1 github_repo | tr '\n' ' ' | sed -e "s/.*github_repo: \([^[:space:]]*\)[^\w]*github_user: \([^[:space:]]*\)[[:space:]]*/git submodule add git:\/\/github.com\/\2\/\1.git roles\/\2.\1/g" | sh

Validez ensuite les modifications dans votre dépôt Git. Lorsque vous clonerez votre rapport à l'avenir, assurez-vous de le cloner avec des sous-modules, par exemple. git clone ... --recursive

Un avantage de ceci est qu'un sous-module git fait toujours référence à une version spécifique (git commit-hash). Cela vous empêchera d'exécuter des mises à jour non testées dans votre environnement de production. Une nouvelle version d'un rôle Galaxy pourrait comporter des bogues ou fonctionner complètement différemment. Avec un sous-module git, vous décidez si et quand vous mettez à jour un rôle vers la nouvelle version.

En outre, vous ne devrez pas non plus vous occuper de la liste noire des rôles de galaxie dans votre .gitignore pour empêcher la validation de leur code dans votre référentiel.

4
udondan

Pour autant que je sache, il n'existe pas de moyen automatique de télécharger des rôles au moment de l'exécution. Votre meilleur choix est de les engager dans votre propre dépôt ou d’avoir une documentation appropriée répertoriant toutes les exigences. Vous pouvez même créer un livre de jeu pré-vol qui installe vos rôles. :)

3
Mxx

Vous pouvez utiliser un rôle Ansible pour installer les autres rôles nécessaires à l'aide de module de commande .

Voici un exemple très basique qui fonctionne ansible-galaxy install :

- name: Install roles from Ansible Galaxy
  command: ansible-galaxy install {{ item.item }}
  with_items:
    - "{{ ansible_roles_list }}"

Le ansible_roles_list peut être fourni sous forme de variable ou de paramètre de rôle.

J'ai implémenté un rôle pour cela, vous pouvez donc utiliser Ansible également pour configurer (une partie de) la machine de contrôle: https://galaxy.ansible.com/ferrarimarco/install-roles/ .

Ce rôle doit être appliqué avant tous les autres rôles que vous souhaitez installer à l'aide de celui-ci, dans un livre de jeu séparé. En effet, Ansible vérifie si tous les rôles sont disponibles avant d'exécuter le livre de lecture auquel vous les référez.

3
Marco Ferrari