我想获取所有符合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的所有服务器ip,而没有安装docker的服务器?必须获得满足条件的ip值~~
~~或者还有其他方法可以获取满足when
条件的所有ip吗?~~
答案 0 :(得分:0)
您的问题中有很多问题,但是我们开始:
如何全局使用
docker_ip
变量?
没有“全局”之类的东西-所有变量都是“主机”变量
现在如何通过
docker_exists
获取安装了docker的所有服务器ip,而没有安装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条件的ip吗?
通常,不,因为每个set_fact
(register:
只是一个便捷的快捷方式)都是每个主机 ,因此遍历所有主机是唯一的“在剧本中广播”该信息