Ansible 如何在另一个主机变量中使用通过一个主机的vars_提示符定义的变量?
我在一个剧本里有两个剧本。其中一个提示用户输入,我想在另一个游戏中使用该变量。请告诉我怎么做Ansible 如何在另一个主机变量中使用通过一个主机的vars_提示符定义的变量?,ansible,Ansible,我在一个剧本里有两个剧本。其中一个提示用户输入,我想在另一个游戏中使用该变量。请告诉我怎么做 --- - hosts: workers gather_facts: false sudo: true vars_prompt: - name: "server_ip" prompt: "Enter the Server IP" private: no roles: - client-setup-worker - hosts: maste
---
- hosts: workers
gather_facts: false
sudo: true
vars_prompt:
- name: "server_ip"
prompt: "Enter the Server IP"
private: no
roles:
- client-setup-worker
- hosts: master
gather_facts: false
sudo: true
vars:
server: "{{ hostvars['workers']['server_ip'] }}"
roles:
- client-setup-master
在上面的剧本中,我想使用workers主机中定义的服务器ip,以便在主主机中使用
在执行此操作时,我遇到了错误“错误是:\”hostvars['workers']\“未定义”
在执行此操作时,我遇到了错误“错误是:\”hostvars['workers']\“未定义”
这是因为workers
显然是一个组,而不是主机,这是在hostvars中唯一可以找到的声明
您需要从workers
组中随机获取一个主机,然后提取其事实;我相信这可以做到:
在看到@VladimirBotka给出的基本正确答案后更新
- hosts: workers
vars_prompt:
# as before ...
pre_tasks:
- name: re-export the vars_prompt for cross playbook visibility
set_fact:
server_ip: '{{ server_ip }}'
roles:
# as before
- hosts: masters
vars:
server: '{{ hostvars[(groups.workers|first)].server_ip }}'
vars_提示符中声明的变量的数量是播放
该变量可通过set_facts“在另一个游戏中使用该变量”放入HOSTVAR。例如下面的剧本
- hosts: test_01
gather_facts: false
vars_prompt:
- name: "server_ip"
prompt: "Enter the Server IP"
private: no
tasks:
- set_fact:
stored_server_ip: "{{ server_ip }}"
- debug:
var: stored_server_ip
- hosts: test_02
gather_facts: false
vars:
server: "{{ hostvars.test_01.stored_server_ip }}"
tasks:
- debug:
var: server
给出(节略):
问题是vars_prompt的范围。@VladimirBotka在你输入评论时,我正在输入更正:-)我很高兴我了解了这一点,谢谢!然后,本着交叉回答评论的精神,您的答案与原始问题存在相同的问题:如果
test_01
是一个主机,那么它可以正常工作,但如果它是一个组,那么它就不能正常工作。您提到了使用主机和组的区别,这很好。谢谢:)
ok: [test_01] => {
"stored_server_ip": "10.1.0.10"
}
ok: [test_02] => {
"server": "10.1.0.10"
}