2 votes

Ansible utilise des paramètres d'hôte erronés

Considérant le fichier hosts suivant :

[initial]
74.125.224.72 ansible_user=root

[default]
74.125.224.72 ansible_user=deploy ansible_port=2222

J'ai un cahier de jeu appelé initial.yml con hosts: initial et un autre a appelé site.yml con hosts: default .

Le problème est que si je lance ansible-playbook initial.yml mais il échoue lorsqu'il essaie de se connecter en tant qu'utilisateur deploy sur le port 2222. Ne devrait-il pas simplement se connecter en tant qu'utilisateur Root sur le port 22 ?

Le contenu de initial.yml (le fait de commenter les rôles ne change rien non plus) :

---
- hosts: initial
  roles:
    - { role: common, tags: common }
    - { role: login, tags: login }

Le contenu de ansible.cfg :

[defaults]
inventory = ./hosts.ini
roles_path = ./.tmp
retry_files_enabled = False

L'environnement :

  • Ansible 2.3.1.0
  • Python 2.7.13
  • Ubuntu 17.04

Dossiers sous /etc/ansible/ o /etc/ssh/ n'ont pas été modifiées.

EDIT : J'ai réussi à contourner ce problème en utilisant une autre hôtes pour initial.yml et en le spécifiant avec ansible-playbook --inventory-file=initial.ini .

2voto

freginold Points 3242

Il semble qu'avec Ansible, le fait de définir deux fois le même hôte dans le même fichier entraîne la substitution de la seconde définition à la première. Depuis le fichier Documentation Ansible :

Dans n'importe quelle section, la redéfinition d'une variable écrasera l'instance précédente. Si plusieurs groupes ont la même variable, c'est la dernière chargée qui l'emporte. Si vous définissez une variable deux fois dans la section vars : d'une pièce, c'est la deuxième qui l'emporte.

Vous devrez contourner ce problème d'une manière ou d'une autre, en utilisant plusieurs fichiers d'hôtes, en spécifiant l'hôte à partir de la ligne de commande, ou en utilisant la solution de contournement que vous avez mentionnée. Une autre option qui peut fonctionner est de changer hash_behavior :

le précédent décrit la configuration par défaut hash_behavior=replace Pour ne remplacer qu'une partie des données, il faut passer à la fonction "fusion".

0voto

Atul Agrawal Points 361

Essayez ceci :

ansible-playbook initial.yml -i <your host file> -l initial 

Ici -i désigne votre fichier d'inventaire et -l pour limiter le playbook à un groupe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X