我想要取出所有符合when
条件的服务器的IP值。
我的ansible-playbook
如下:
- 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?
发布于 2019-10-24 00:12:24
在你的问题中有很多问题,但我们开始吧:
如何全局使用
docker_ip
变量??
没有“全局”这回事-- ansible中的所有变量都是“主机”变量
现在如何通过
docker_exists
获得安装了docker的所有服务器ips,以及安装了docker的服务器?
- 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:
只是一个方便的快捷方式)是针对每个主机的,所以在所有主机上循环是在攻略中“广播”该信息的唯一方法
https://stackoverflow.com/questions/58518075
复制相似问题