首页 > 解决方案 > Ansible:使模板使用不同文件中定义的变量进行不同的运行

问题描述

我在剧本中有一个任务,如图所示:

- name: Create configuration.json for every analytics from the template.
  template:
    src: ./src-zip/{{ item.key }}/configuration_sample.j2
    dest: ./src-zip/{{ item.key }}/configuration.json
  with_dict: "{{ apps }}"

现在,我有变量,其中一些是常见的,有些是在每次运行的文件中定义的不同。

就像,有var_alerts-manager.yml一次运行的文件。对于另一次运行,我有var_abc.yml.

现在我想为不同的运行使用不同的文件。换句话说,模板将使用var_alerts-manager.yml在一次运行和abc.yml另一次运行中定义的变量,依此类推。

如何在 ansible 中实现这一点,我应该将这些文件保存在哪里,以便任务每次运行只能包含该特定文件?

标签: ansible

解决方案


这是角色机制演变的场景:

  1. my_role在您的剧本目录中创建一个角色。

  2. 将您的任务和模板移至该角色。

  3. 将变量存储vars在角色的目录中。

  4. 执行角色:

    - name: Create configuration.json for every analytics from the template.
      include_role:
        name: my_role
        vars_from: "{{ item.key }}"  # or whatever key your naming is defined in
      loop: "{{ apps|dict2items }}"
    

为了清楚起见,您可能想item用其他一些变量替换模板任务内部,请阅读loop_control.


推荐阅读