12

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

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

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

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

4

4 回答 4

28

正确的做法是使用 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"
于 2016-04-13T17:02:57.980 回答
6

你可以通过它来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"
于 2015-10-14T07:32:30.813 回答
5

添加到马特对多个主机的回答。

输入示例将是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"
于 2017-09-25T15:57:14.733 回答
3

免责声明:接受的答案为问题提供了最佳解决方案。虽然这个正在工作,但它基于 hack,我将其作为参考。

我发现可以使用当前未记录的hack(感谢Bruce P将我指向该帖子)将-i/--inventory参数的值转换为主机的临时列表(参考)。仅使用主机名/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"

于 2015-10-26T14:20:12.550 回答