web-dev-qa-db-fra.com

Comment définir le nom d'utilisateur / mot de passe Ansible par défaut pour la connexion SSH?

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?

71
Robert

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.

96
Alexey Labzov

Variables de groupe

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.

24
Philip Wilson

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.

5
podarok

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
4
Mithril

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'
2
kentr