首页 > 解决方案 > Ansible:仅当主机名对应时如何循环遍历 2 个 var 字典

问题描述

我试图根据主机名循环到一组变量。我无法获得有条件的权利。

假设我有 2 组变量:

databases_eu:
  - name: database_eu_1
    port: 5432
    login: {{ vault_user_database_eu_1 }}
    password: {{ vault_pw_database_eu_1 }}
  - name: database_eu_2
    port: 5433
    login: {{ vault_user_database_eu_2 }}
    password: {{ vault_pw_database_eu_2 }}
databases_us:
  - name: database_us_1
    port: 5432
    login: {{ vault_user_database_us_1 }}
    password: {{ vault_pw_database_us_1 }}
  - name: database_us_2
    port: 5433
    login: {{ vault_user_database_us_2 }}
    password: {{ vault_pw_database_us_2 }}

我想根据主机名循环遍历它,我该怎么做?

我想像下面这样,但我错过了when声明:

- name: copy configs
  ansible.builtin.template:
    src: config.yml.j2
    dest: /opt/db/configs/{{ item.name }}.yml
    owner: root
    group: root
    mode: '0644'
  loop: 
    - "{{ databases_eu | inventory_hostname == 'eu.db.example.com' }}" 
    - "{{ databases_us | inventory_hostname == 'us.db.example.com' }}" 

标签: loopsansibleconditional-statements

解决方案


谢谢。我通过创建一个 group_vars 目录来解决。感谢您的输入。


推荐阅读