首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将条件中定义的变量用作全局变量?

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

Stack Overflow用户
提问于 2019-10-23 15:53:01
回答 1查看 85关注 0票数 0

我想要取出所有符合when条件的服务器的IP值。

我的ansible-playbook如下:

代码语言:javascript
运行
复制
- 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_ip变量不是全局变量,而是仅在满足"Docker version 18.09.6' in docker_exists.stdout"条件的计算机上,在不满足此条件的计算机上。直接错误,提示The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout',如何全局使用docker_ip变量??

现在如何通过docker_exists安装所有安装了docker的服务器I,以及如何安装没有安装docker的服务器?必须获取满足条件的IP值

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

EN

回答 1

Stack Overflow用户

发布于 2019-10-24 00:12:24

在你的问题中有很多问题,但我们开始吧:

如何全局使用docker_ip变量??

没有“全局”这回事-- ansible中的所有变量都是“主机”变量

现在如何通过docker_exists获得安装了docker的所有服务器ips,以及安装了docker的服务器?

代码语言:javascript
运行
复制
- 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 }}

如果您确实指的是IP,而不是inventory_hostname,请将results.append(hn)更改为results.append(hostvars[hn].ansible_default_ipv4.address)

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

一般来说,不是,因为每个set_fact ( register:只是一个方便的快捷方式)是针对每个主机的,所以在所有主机上循环是在攻略中“广播”该信息的唯一方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58518075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档