wake-up-neo.com

Ansible: Die Liste der bereitgestellten Hosts ist leer

Ich habe dieses Spielbuch, in dem der entfernte Host eine Benutzereingabe ist. Anschließend versuche ich, Fakten über den entfernten Host zu sammeln und in eine Datei in local zu kopieren:

---
- 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 [email protected]{{ hostname }}
    - name: Display facts
      command: ansible {{ groups['new'] }} -m setup
      register: output
    - copy: content="{{ output }}" dest=/var/tmp/dir/Node_Health/temp
...

Ich erhalte den folgenden Fehler in der temp-Datei:

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":

Ich habe auch das untenstehende Spielbuch ausprobiert, das auch den gleichen Fehler ergibt:

---
 - 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 [email protected]{{ 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
...

Jede Hilfe wird geschätzt.

5
Supratim Das

Ansible geht davon aus, dass sich alle Hosts in einer Inventardatei befinden. 

add_Host fügt Ihren Host nur dem aktuell laufenden Ansible hinzu, und das wird nicht an die Kopie von Ansible weitergegeben, die Sie aufrufen. 

Sie müssen entweder:

  • Ändern Sie den Befehl, um eine Inline-Bestandsliste zu verwenden, beispielsweise ansible all -i '{{ hostname }},' -m setup (Weitere Details zur Verwendung von -i '<hostname>,'hier

  • oder schreiben Sie den Hostnamen in eine Datei und verwenden Sie diesen als Inventardatei

3
Kyle

Legen Sie Ihre Hosts in einer hosts.ini-Datei mit dem folgenden sintax ab:

[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

Laufen Sie ansible, verwenden Sie:. ansible-playbook -i hosts.ini

Sie können Ihre Hosts-Datei auch in/etc/ansible/hosts speichern, um zu vermeiden, dass Hosts als Parameter übergeben werden. Ansible sieht dort als Standardspeicherort aus. Dann laufen Sie einfach mit:

ansible-playbook <playbook.yml>
0
Federico Caccia