我想为 Ansible 中的新机器编写一个引导程序手册,它将重新配置网络设置。在第一次执行时,目标机器将具有 DHCP 分配的地址。
应该执行 playbook 的用户知道分配给新机器的 IP 地址。我想提示用户是价值。
vars_prompt
模块允许从用户那里获取输入,但是它在hosts
有效防止主机地址作为所需值的部分下定义。
是否可以不使用包装脚本修改库存文件?
我想为 Ansible 中的新机器编写一个引导程序手册,它将重新配置网络设置。在第一次执行时,目标机器将具有 DHCP 分配的地址。
应该执行 playbook 的用户知道分配给新机器的 IP 地址。我想提示用户是价值。
vars_prompt
模块允许从用户那里获取输入,但是它在hosts
有效防止主机地址作为所需值的部分下定义。
是否可以不使用包装脚本修改库存文件?
正确的做法是使用 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"
你可以通过它来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"
添加到马特对多个主机的回答。
输入示例将是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"
免责声明:接受的答案为问题提供了最佳解决方案。虽然这个正在工作,但它基于 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"