使用模式/通配符匹配在ansible中读取字典键值

砷化镓

我获得的变量文件如下:

猫 myvar.yml

dbname: ser1
url_ser1: url1
url_ser2: url2
dbname: ser2
my_ser1_port: 12207
my_ser2_port: 23332

dbname要在第一次调试中开始,我希望显示viz ser1&的两个键(也可以是超过 2 个键)值ser2

然后我希望使用第一个键的值,即ser1提取键包含的所有值ser1url112207

然后ser2价值得到url223332

因此,我需要如下输出:

The dbname are ser1 & ser2
dbname `ser1` URL is url1 and port is 12207
dbname `ser2` URL is url2 and port is 23332

下面是我的剧本,但是,我不知道如何阅读这样的变量:

---
  - name: ReadJsonfile
    hosts: localhost
    tasks:
      - include_vars: myvar.yml
      - debug:
          msg: "{{ dbname }}"

上面只打印第二个 dbname 值,即ser2,而不是我需要的两个。

  - debug:
      msg: "{{ '*'+item+'*' }}"
    loop: "{{ dbname }}"

以上失败并出现错误。

您能否建议我如何从 yaml 中获取所需的变量值。

法兰西

你必须像这样写你的 myvar.yml :

dbname: ['ser1', 'ser2']
url_ser1: url1
url_ser2: url2
my_ser1_port: 12207
my_ser2_port: 23332

所以你可以遍历dbname ...

- name: Reproduce issue
  hosts: localhost
  gather_facts: no
         
  tasks:
    - include_vars: variables.yml
    - debug: 
        msg: "dbname {{ item }} URL is {{ url }} and port is {{ port }}"
      loop: "{{ dbname }}"
      vars:
        port: "{{ lookup('vars', 'my_' + item + '_port' ) }}"
        url: "{{ lookup('vars', 'url_' + item) }}"
      when: hostvars[ansible_host]['my_' + item + '_port'] is defined and 
            hostvars[ansible_host]['url_' + item] is defined

所以lookup('vars', 'my_' + item + '_port' )=hostvars[ansible_host]['my_' + item + '_port']

结果:

ok: [localhost] => (item=ser1) => {
    "msg": "dbname ser1 URL is url1 and port is 12207"
}
ok: [localhost] => (item=ser2) => {
    "msg": "dbname ser2 URL is url2 and port is 23332"
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章