我想为Ansible中的新机器编写引导程序操作手册,它将重新配置网络设置。在第一次执行时,目标机器将具有DHCP分配的地址。如何提示用户在Ansible中的目标主机?
应该执行剧本的用户知道新机器的分配IP地址。我想提示用户是否有价值。
vars_prompt
模块允许从用户那里获得输入,但是它被定义在hosts
部分有效防止主机地址作为所需值。
是否有可能不使用包装脚本修改库存文件?
我想为Ansible中的新机器编写引导程序操作手册,它将重新配置网络设置。在第一次执行时,目标机器将具有DHCP分配的地址。如何提示用户在Ansible中的目标主机?
应该执行剧本的用户知道新机器的分配IP地址。我想提示用户是否有价值。
vars_prompt
模块允许从用户那里获得输入,但是它被定义在hosts
部分有效防止主机地址作为所需值。
是否有可能不使用包装脚本修改库存文件?
正确的方法是使用add_host和pl创建一个动态主机将它加入一个新组,然后开始一个针对该组的新剧。这样,如果您需要提前设置其他连接变量(凭证/密钥/等),则可以将它们设置为清单中的空白组,然后将该主机动态添加到它。例如:
- 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
的default inventory file location,你可以简单地使用:
ansible-playbook playbook.yml --extra-vars "hosts_prompt=192.168.1.10"
声明: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"
我不喜欢这种方法,因为如果有人无意误用了参数来运行剧本,那么**地狱就会松散**。 – sorin
添加到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"
的'库存/ environment'部分仅仅是一个例子(与'playbook.yml')。如果你没有提供'-i'的库存文件,那么Ansible就会简单地选择默认的库文件'/ etc/ansible/hosts',这通常不是你想要的,即使你使用'extra- vars' – ydaetskcoR
这是一个关于如何传递“extra-vars”的例子,而不是“这里是你需要输入的确切行”。库存_是一个必要的参数,它只是默认为'/ etc/ansible/hosts',如果该文件不存在,那么它将会失败。 – ydaetskcoR
@techraf:您的建议修改在审核队列中被拒绝。 ydaetskcoR与此无关。像这样的编辑根本不被接受。由于这个答案_does_目前为你提供了答案,你应该接受它,为了未来的参观者。 – Cerbrus