Ansible:提供的主机列表为空

时间:2016-06-17 09:33:18

标签: 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: 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
...

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

Ansible假设您将所有主机放在某个库存文件中。

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

你将不得不:

  • 更改命令以使用内联广告资源列表,例如ansible all -i '{{ hostname }},' -m setup(更多详细信息,请使用-i '<hostname>,' here

  • 或将主机名写入文件,并将其用作库存文件

答案 1 :(得分:1)

使用以下正弦波将主机放入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-playbook -i hosts.ini

您还可以将主机文件保存在 / etc / ansible / hosts 中,以避免将主机作为参数传递。 Ansible在此处将其作为默认位置。然后只需运行:

ansible-playbook <playbook.yml>

答案 2 :(得分:1)

对我来说,看起来好像不知道库存文件在哪里。

我使用了cmd:
ansible-playbook name.yml -i hostfile

答案 3 :(得分:0)

ansible 文件的父目录位于 $HOME