如何在Ansible中提示用户使用目标主机?

时间:2015-10-14 07:23:18

标签: ansible ansible-inventory

我想在Ansible中为新机器编写一个bootstrapper playbook,它将重新配置网络设置。在第一次执行时,目标机器将具有DHCP分配的地址。

应该执行该剧本的用户知道所分配的新机器的IP地址。我想提示用户是值。

vars_prompt模块允许从用户那里获取输入,但是它在hosts部分下定义,有效地阻止了主机地址作为所需的值。

是否可以不使用修改库存文件的包装器脚本?

4 个答案:

答案 0 :(得分:18)

执行此操作的正确方法是使用add_host创建动态主机并将其置于新组中,然后启动以该组为目标的新游戏。这样,如果您有其他需要提前设置的连接变量(凭证/密钥/等),您可以将它们设置在清单中的空组中,然后动态地将主机添加到它。例如:

- hosts: localhost
  gather_facts: no
  vars_prompt:
  - name: target_host
    prompt: please enter the target host IP
    private: no
  tasks:
    - add_host:
        name: "{{ target_host }}"
        groups: dynamically_created_hosts

- hosts: dynamically_created_hosts
  tasks:
  - debug: msg="do things on target host here"

答案 1 :(得分:5)

您可以使用extra-vars传递它。

只需将hosts部分变为{{ hosts_prompt }}等变量,然后在命令行上传递主机,如下所示:

ansible-playbook -i inventory/environment playbook.yml --extra-vars "hosts_prompt=192.168.1.10"

或者,如果您使用/etc/ansible/hosts ansible-playbook playbook.yml --extra-vars "hosts_prompt=192.168.1.10" ,则只需使用:

{{1}}

答案 2 :(得分:3)

为多个主机添加Matt的答案。

输入示例为192.0.2.10,192.0.2.11

- hosts: localhost
  gather_facts: no
  vars_prompt:
  - name: target_host
    prompt: please enter the target host IP
    private: no
  tasks:
    - add_host:
        name: "{{ item }}"
        groups: dynamically_created_hosts
      with_items: "{{ target_host.split(',') }}"


- hosts: dynamically_created_hosts
  tasks:
  - debug: msg="do things on target host here"

答案 3 :(得分:1)

免责声明:The accepted answer为此问题提供了最佳解决方案。虽然这个工作正在进行,但它基于一个黑客,我把它留作参考。

我发现有可能使用当前未记录的hack(信用Bruce P来指向我的帖子)来转换-i / --inventory参数的值到主机的临时列表(reference)。只有主机名/ IP地址和尾随空格(如下所示),它指的是单个主机,而不需要存在库存文件。

命令:

ansible-playbook -i "192.168.1.21," playbook.yml

因此playbook.yml可以针对所有主机运行(在上面的示例中将等于单个主机192.168.1.21):

- hosts: all 

该列表可能包含多个IP地址-i "192.168.1.21,192.168.1.22"