Ansible:提供的主机列表为空

Ansible:提供的主机列表为空,ansible,ansible-playbook,Ansible,Ansible Playbook,我有以下剧本,其中远程主机是用户输入,随后我试图收集有关远程主机的事实,并将其复制到本地的文件中: --- - hosts: localhost vars_prompt: name: hostname prompt: "Enter Hostname" tasks: - name: Add hosts to known_hosts file add_host: name={{ hostname }} groups=new - name:

我有以下剧本,其中远程主机是用户输入,随后我试图收集有关远程主机的事实,并将其复制到本地的文件中:

---
- 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
...
我在
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":
我还尝试了下面的剧本,它也给出了相同的错误:

---
 - 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
...

任何帮助都将不胜感激。

Ansible假定您的所有主机都在某个目录文件中

add_host
仅将您的主机添加到当前运行的Ansible,并且不会传播到您调用的Ansible的副本

您必须:

  • 将命令更改为使用内联资源清册列表,如
    ansible all-i'{{{hostname}',-m setup
    (更多详细信息涉及
    -i','

  • 或者将主机名写入一个文件,并将其用作清单文件


使用以下语法将主机放入
hosts.ini
文件中:

[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
运行ansible时,请使用: ansible剧本-i hosts.ini

您还可以将主机文件保存在
/etc/ansible/hosts
中,以避免将主机作为参数传递。ansible将其视为默认位置。然后使用以下命令运行:

ansible-playbook <playbook.yml>
ansible剧本

对我来说,他们似乎不知道库存文件的位置

我使用了cmd:

ansible playbook name.yml-i hostfile

ansible文件的父目录位于
$HOME

我实际上需要一个用户输入,这就是我无法使用
-i
选项的原因。我想我会使用您的第二个选项。只是我会将输入主机名添加到同一个清单文件中(在/etc/ansible/hosts下)并删除剧本末尾的条目。找不到更好的方法..谢谢:)