我想在Ansible中为新机器编写一个bootstrapper playbook,它将重新配置网络设置。在第一次执行时,目标机器将具有DHCP分配的地址。
应该执行该剧本的用户知道所分配的新机器的IP地址。我想提示用户是值。
vars_prompt
模块允许从用户那里获取输入,但是它在hosts
部分下定义,有效地阻止了主机地址作为所需的值。
是否可以不使用修改库存文件的包装器脚本?
答案 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"