Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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 如何将条件中定义的变量用作全局变量?_Ansible_Ansible 2.x - Fatal编程技术网

Ansible 如何将条件中定义的变量用作全局变量?

Ansible 如何将条件中定义的变量用作全局变量?,ansible,ansible-2.x,Ansible,Ansible 2.x,我想在条件下取出与匹配的所有服务器的ip值 我的ansible剧本如下: - name: Get all the servers with docker installed shell: docker -v failed_when: False register: docker_exists - name: Get the server where docker is installed shell: echo "{{inventory_hostname}}" regist

我想在条件下取出与
匹配的所有服务器的ip值

我的
ansible剧本
如下:

- name: Get all the servers with docker installed
  shell: docker -v
  failed_when: False
  register: docker_exists

- name: Get the server where docker is installed
  shell: echo "{{inventory_hostname}}"
  register: docker_ip
  when: "'Docker version 18.09.6' in docker_exists.stdout"
经测试,
docker\u ip
变量不是全局变量,但仅在满足docker\u中“docker version 18.09.6”条件的机器上。在不满足此条件的机器上,stdout“
。直接错误,提示任务包含一个带有未定义变量的选项。错误是:“dict object”没有属性“stdout”,如何全局使用
docker\u ip
变量

~~现在我如何通过
docker\u exists
获取安装了docker的所有服务器IP,以及未安装docker的服务器?必须获得满足条件的ip值~~


~~或者有没有其他方法可以在条件下获得满足条件的所有IP?~~

您的问题中有很多问题,但现在我们开始:

如何全局使用
docker\u ip
变量

没有“全局”这样的东西--ansible中的所有变量都是“主机”变量

现在,如何通过
docker\u exists
获取安装了docker的所有服务器IP,以及未安装docker的服务器

如果您的字面意思是IP,而不是
inventory\u主机名
,那么将
results.append(hn)
更改为
results.append(hostvars[hn].ansible\u default\u ipv4.address)

或者是否有其他方法可以获得满足when条件的所有IP

一般来说,没有,因为每个
集合\u fact
(注册:只是一个方便的快捷方式)都是每个主机,所以在所有主机上循环是在剧本中“广播”该信息的唯一方式

- name: declare discovered docker hosts
  set_fact:
    hosts_with_docker: >-
      {%- set results = [] -%}
      {%- for hn in groups["all"] -%}
      {%- if "Docker version" in hostvars[hn].get("docker_exists", {"stdout": ""}).stdout -%}
      {%- set _ = results.append(hn) -%}
      {%- endif -%}
      {%- endfor -%}
      {{ results }}