web-dev-qa-db-fra.com

Ansible: La liste d'hôtes fournie est vide

J'ai ci-dessous playbook où l'hôte distant est une entrée utilisateur et ensuite j'essaie de rassembler des informations sur l'hôte distant et de les copier dans un fichier local:

---
- hosts: localhost
  vars_Prompt:
      name: hostname
      Prompt: "Enter Hostname"
  tasks:
    - name: Add hosts to known_hosts file
      add_Host: name={{ hostname }} groups=new
    - name: Check if Host is reachable
      Shell: ansible -m ping {{ hostname }}
    - name: Remove existing remote hosts
      Shell: ssh-keygen -R {{ hostname }}
    - name: Setup passwordless SSH login
      Shell: ssh-copy-id -i ~/.ssh/id_rsa user@{{ hostname }}
    - name: Display facts
      command: ansible {{ groups['new'] }} -m setup
      register: output
    - copy: content="{{ output }}" dest=/var/tmp/dir/Node_Health/temp
...

J'ai l'erreur ci-dessous dans le fichier temp:

Node_Health]# cat temp
{"start": "2016-06-17 09:26:59.174155", "delta": "0:00:00.279268", "cmd": ["ansible", "[udl360x4675]", "-m", "setup"], "end": "2016-06-17 09:26:59.453423", "stderr": " [WARNING]: provided hosts list is empty, only localhost is available", "stdout": "", "stdout_lines": [], "changed": true, "rc": 0, "warnings":

J'ai aussi essayé le playbook ci-dessous qui donne aussi la même erreur:

---
 - hosts: localhost
  vars_Prompt:
      name: hostname
      Prompt: "Enter Hostname"
  tasks:
    - name: Add hosts to known_hosts file
      add_Host: name={{ hostname }} groups=new
    - name: Check if Host is reachable
      Shell: ansible -m ping {{ hostname }}
    - name: Remove existing remote hosts
      Shell: ssh-keygen -R {{ hostname }}
    - name: Setup passwordless SSH login
      Shell: ssh-copy-id -i ~/.ssh/id_rsa user@{{ hostname }}
- hosts: new
   tasks:
    - name: Display facts
      command: ansible {{ groups['new'] }} -m setup
      register: output
    - local_action: copy content="{{ output }}" dest=/var/tmp/dir/Node_Health/temp
...

Toute aide serait appréciée.

5
Supratim Das

Ansible suppose que vous avez tous vos hôtes dans un fichier d'inventaire quelque part. 

add_Host ajoute uniquement votre hôte à Ansible en cours d'exécution, et qui ne se propage pas à la copie de Ansible que vous appelez

Vous allez devoir soit:

  • changez la commande pour utiliser une liste d'inventaire intégrée, telle que ansible all -i '{{ hostname }},' -m setup (Plus de détails sur l'utilisation de -i '<hostname>,'ici

  • ou écrivez le nom d'hôte dans un fichier et utilisez-le comme fichier d'inventaire

3
Kyle

Placez vos hôtes dans un fichier hosts.ini, avec le code suivant:

[nodes]
node_u1 ansible_user=root   ansible_Host=127.0.0.1
node_u2 ansible_user=root   ansible_Host=127.0.1.1
node_u3 ansible_user=root   ansible_Host=127.0.2.1
node_u4 ansible_user=root   ansible_Host=127.0.3.1
node_u5 ansible_user=root   ansible_Host=127.0.4.1

Courant ansible, utilisez: ansible-playbook -i hôtes.ini

Vous pouvez également enregistrer votre fichier d'hôtes dans/etc/ansible/hosts pour éviter de passer des hôtes en paramètre. Ansible y regarde comme emplacement par défaut. Ensuite, utilisez simplement:

ansible-playbook <playbook.yml>
0
Federico Caccia