首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨实例共享变量

跨实例共享变量
EN

DevOps用户
提问于 2019-09-02 02:25:58
回答 1查看 710关注 0票数 2

我正在使用TestInfra 可抗为mongo集群实例编写分子测试脚本。我希望在所有实例之间共享变量。我创建了一个python类,并初始化和更新了变量。每次molecule verify时,每个测试都会在每个实例上运行,因此变量在单个实例上是独立的。

Is it possible to share variables across instances?

EN

回答 1

DevOps用户

发布于 2019-09-02 03:50:38

问:是否有可能在实例之间共享变量?

答:是的。字典主机保存变量。引用使用魔术变量访问有关其他主机的信息

hostvars允许您访问另一个主机的变量,包括已收集到的有关该主机的事实。您可以在剧本中的任何一点访问主机变量。..。

代码语言:javascript
复制
{{ hostvars['test.example.com']['ansible_facts']['distribution'] }}

有关详细信息,请参阅范围变量缓存事实

在禁用“事实缓存”的情况下,为了在Ansible播放簿之间共享信息,可以将所有主机存储在一个文件中。例如,使用此模板

代码语言:javascript
复制
  $ cat my_hostvars.json.j2
  my_hostvars_all:
  {% for my_host in ansible_play_hosts_all %}
    {{ my_host }}:
      {{ hostvars[my_host]|to_nice_json }}
  {% endfor %}

下面的剧本将所有主机的主机存储在字典my_hostvars_all中,并将其放入本地主机上的{ inventory_dir }}/my_hostvars.json文件中。

代码语言:javascript
复制
  - hosts: test_jails
    tasks:
      - set_fact:
          test_var: "test_var_in_{{ inventory_hostname }}"
      - template:
          src: my_hostvars.json.j2
          dest: "{{ inventory_dir }}/my_hostvars.json"
        delegate_to: localhost
        run_once: true

这本词典可以列入下一本剧本。例如,下面的剧本

代码语言:javascript
复制
  - hosts: test_jails
    tasks:
      - include_vars: my_hostvars.json
      - set_fact:
          my_hostvars: "{{ my_hostvars_all[inventory_hostname] }}"
      - debug:
          var: my_hostvars.test_var

给出

代码语言:javascript
复制
  ok: [test_01] => {
      "my_hostvars.test_var": "test_var_in_test_01"
  }
  ok: [test_02] => {
      "my_hostvars.test_var": "test_var_in_test_02"
  }
  ok: [test_03] => {
      "my_hostvars.test_var": "test_var_in_test_03"
  }
票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/9068

复制
相关文章

相似问题

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