我的剧本结构如下:
- hosts: all
name: all
roles:
- roles1
- roles2
在tasks
的{{1}}中,我定义了这样一个变量
roles1
ret.stdout:
---
# tasks for roles1
- name: Get the zookeeper image tag # rel3.0
run_once: true
shell: echo '{{item.split(":")[-1]}}' # Here can get the string rel3.0 normally
with_items: "{{ret.stdout.split('\n')}}"
when: "'zookeeper' in item"
register: zk_tag
在Loaded image: test/old/kafka:latest
Loaded image: test/new/mysql:v5.7
Loaded image: test/old/zookeeper:rel3.0
的{{1}}中,我想使用tasks
变量
roles2
错误:
zk_tag
我认为我遇到了以下两个问题:
使用寄存器注册变量时,添加条件后,不能在所有组中使用该变量。如何解决这个问题呢?如何使此变量可用于所有组?
是我的标题,如何在ansible中使用不同角色之间的变量?
答案 0 :(得分:1)
您很可能为新的主机启动新的剧本。意味着以前收集的所有变量都丢失了。
您可以做的是使用add_host module将var传递给另一个主机。
- name: Pass variable from this play to the other host in the same play
add_host:
name: hostname2
var_in_play_2: "{{ var_in_play_1 }}"
---编辑---
这还不清楚。如果想让剧本中的每个主持人都可以使用,为什么为什么要首先使用when
语句?
您可能要使用group_vars/all.yml
文件来放置var。
此外,使用add_host应该是我阅读该书的方式。您能否将自己的剧本以及剧本的结果发布到某个网站上,例如粘贴框?
答案 1 :(得分:0)
如果有可能由于when条件而未定义var,则应使用默认值force the var to be defined when using it。在进行测试时,请使用debug module进行测试,而不要在外壳程序中回显
- name: Debug my var
debug:
msg: "{{ docker_exists | default(false) }}"