如何在Ansible中提示用户输入目标主机?
我想为Ansible中的新机器编写一个bootstrapper playbook,它将重新配置网络设置。在第一次执行时,目标机器将具有DHCP分配的地址 应该执行playbook的用户知道分配给新机器的IP地址。我想提示用户输入is值如何在Ansible中提示用户输入目标主机?,ansible,ansible-inventory,Ansible,Ansible Inventory,我想为Ansible中的新机器编写一个bootstrapper playbook,它将重新配置网络设置。在第一次执行时,目标机器将具有DHCP分配的地址 应该执行playbook的用户知道分配给新机器的IP地址。我想提示用户输入is值 vars\u prompt模块允许从用户处获取输入,但它是在hosts部分中定义的,有效地防止主机地址成为所需值 是否可以不使用包装器脚本修改库存文件?您可以将其传递 只需将您的hosts部分设置为变量,例如{{{hosts\u prompt}},然后在命令行上按
vars\u prompt
模块允许从用户处获取输入,但它是在hosts
部分中定义的,有效地防止主机地址成为所需值
是否可以不使用包装器脚本修改库存文件?您可以将其传递
只需将您的hosts
部分设置为变量,例如{{{hosts\u 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"
免责声明:提供问题的最佳解决方案。虽然这是一个工作,它是基于一个黑客,我留下它作为参考
我发现有可能使用一个当前未记录的(请为我指点帖子)将-I
/--inventory
参数的值转换为一个临时主机列表()。只有主机名/ip地址和一个尾随空格(如下所示),它指的是单个主机,不需要存在清单文件
命令:
ansible-playbook -i "192.168.1.21," playbook.yml
因此,可以针对所有主机运行playbook.yml
(在上面的示例中,它将等于单个主机192.168.1.21
):
该列表可能包含多个ip地址
-i“192.168.1.21192.168.1.22”
正确的方法是使用add\u 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"
增加了Matt对多个主机的回答 输入示例为
192.0.2.10192.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"
inventory/environment
部分只是一个示例(与playbook.yml
一样)。如果您没有提供带有-i
的清单文件,那么Ansible将只选择默认的清单文件/etc/Ansible/hosts
,这通常不是您想要的,即使您使用extra-vars
指定主机也是一个关于如何传递extra-vars
的示例,而不是一个示例“这是您需要键入的确切行“。清单是一个必要的参数,它只是默认为/etc/ansible/hosts
,如果该文件不存在,它将失败。@techraf:您建议的编辑在审阅队列中被拒绝。Ydaetskor与此无关。这样的编辑根本不被接受。由于此答案目前确实为您提供了答案,您确实应该接受它,以备将来的访问者使用。您的答案已被删除,因为它是此答案的复制粘贴。这样的剽窃是不允许的。这个答案的OP现在将您的具体案例添加到了答案中,因此我真的看不出有什么理由不接受这个答案。我不喜欢这种方法,因为如果有人错误地运行没有参数的playbook,那么地狱就会失控。
- 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"