J'utilise Ansible et j'ai cette configuration dans mon inventaire/tout:
[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
[all:children]
master
slave
Je ne veux pas répéter tous les paramètres pour chaque nouvelle instance. Comment puis-je les configurer au même endroit? Y a-t-il un fichier avec ces paramètres?
Vous pouvez ajouter la section suivante à votre fichier d'inventaire:
[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant
Remarque: Avant Ansible 2.0 ansible_user
était ansible_ssh_user
.
Vous pouvez définir des variables qui s'appliquent à tous les hôtes en utilisant le disposition du playbook spécifié dans le document Meilleures pratiques d'Ansible et en créant un group_vars/all
fichier où vous définissez-les .
---
# file: group_vars/all
ansible_connection: ssh
ansible_ssh_user: vagrant
ansible_ssh_pass: vagrant
[modifier] Je suis cependant confus quant à ce que vous essayez de faire. Vous ne devriez pas avoir besoin de spécifier l'utilisateur ou le mot de passe Ansible dans l'inventaire. Si vous utilisez Vagrant, vous ne l'utilisez certainement pas, et si vous appelez Ansible à partir de la ligne de commande, vous pouvez spécifier l'utilisateur avec --user=vagrant
et demandez-lui le mot de passe avec --ask-pass
.
Je pense qu'il est préférable d'utiliser l'installation de la clé ssh sur tous les serveurs à travers le pull. Vous devez exécuter ssh-copy-id uniquement par nœud et installer votre clé ssh partout pour que ansible puisse se connecter à l'aide de votre clé ssh. Il sera plus sûr de ne pas enregistrer les mots de passe dans le playbook/inventaire.
Pour ce faire, vous devez générer votre paire de clés ssh et exécuter ssh-copy-id pour tous les serveurs par la suite.
Ajoutez ci-dessous aux hôtes d'inventaire.
Pour Ansible <2.0:
[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
Pour Ansible> = 2. :
[all:vars]
ansible_connection=ssh # actually default mode smart is OK
ansible_user=vagrant
ansible_pass=vagrant # or ansible_ssh_pass=vagrant
Avertissement: je n'ai testé cela que sur OSX. Sur la base des différents documents, je m'attends à ce qu'il fonctionne sur d'autres plates-formes.
"répertoire de projet" fait référence au répertoire de base du projet Vagrant - le répertoire qui contient Vagrantfile
.
Fichier d'inventaire Ansible généré automatiquement par Vagrant:
Vagrant crée un fichier d'inventaire avec les variables de connexion Ansible par défaut. Recherchez-le dans <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
.
Ce fichier sera régénéré par Vagrant au besoin, les modifications manuelles seront donc écrasées. Cependant, selon les documents Vagrant, vous pouvez spécifier plusieurs machines, groupes de variables, etc. dans Vagrantfile
et ils seront ajoutés à ce fichier d'inventaire.
Configurez Ansible par défaut sur ce fichier d'inventaire:
Pour faire de ce fichier la valeur par défaut utilisée par la commande ansible
lorsque vous êtes dans le répertoire du projet (sur l'hôte), ajoutez un fichier ansible.cfg
Dans votre répertoire de projet avec ce contenu, en changeant le chemin comme requis:
[defaults]
inventory = ./path/to/inventory
Pour confirmer que ce fichier d'inventaire est utilisé, recherchez-le comme valeur par défaut signalée par ansible:
(depuis le répertoire du projet)
$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory Host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or
Pour confirmer vos hôtes:
$ ansible all --list-hosts hosts (2): master slave
Utilisation d'Ansible avec ces hôtes:
Depuis le répertoire du projet, vous devriez alors pouvoir utiliser ansible
comme d'habitude avec les hôtes que vous avez définis dans Vagrantfile
.
Par exemple:
ansible slave -a 'hostname'