如何在ansible中使用不同角色之间的变量

时间:2019-12-09 12:57:50

标签: ansible

我的剧本结构如下:

- 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

我认为我遇到了以下两个问题:

  1. 使用寄存器注册变量时,添加条件后,不能在所有组中使用该变量。如何解决这个问题呢?如何使此变量可用于所有组?

  2. 是我的标题,如何在ansible中使用不同角色之间的变量?

2 个答案:

答案 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) }}"