Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 如何在另一个主机变量中使用通过一个主机的vars_提示符定义的变量?_Ansible - Fatal编程技术网

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"
}