Перебирать переменные var_files в ansible

У меня есть playbook, который вызывает роль и должен импортировать переменные apache для веб-сайтов. Проблема в том, что когда я заглядываю в ports.conf, я вижу только строку для website1. Website2 никогда не вызывается. Любая помощь будет принята с благодарностью.

---
- hosts: all
  vars_files:
   - [ "./roles/apache-vhost/vars/website1.yml", "./roles/apache-vhost/vars/website12.yml"]
  roles:
   - apache-vhost

/roles/apache-vhost/vars/website1.yml

site:
  - domain: website1
    http_port: 5000
    https_port: 6000

./ roles / apache-vhost / vars / website2.yml

site:
  - domain: website2
    http_port: 5001
    https_port: 6001

задача в playbook -

- name: add http Listeners to ports.conf
  lineinfile:
    path: /etc/httpd/conf.d/ports.conf
    line: 'Listen {{item.http_port}} #{{ item.domain}}'
  loop: "{{ site }}"

- name: add https Listeners to ports.conf
  lineinfile:
    path: /etc/httpd/conf.d/ports.conf
    line: 'Listen {{item.https_port}} #{{ item.domain}}'
  loop: "{{ site }}"

Спасибо.

0
задан 11 June 2021 в 22:34
1 ответ

Переменная site из 2-го файла website2.yml переопределяет значение из 1-го файла website1.yml, например

- hosts: localhost
  vars_files:
    - website1.yml
    - website2.yml
  tasks:
    - debug:
        var: site

дает

  site:
  - domain: website2
    http_port: 5001
    https_port: 6001

Вам нужно будет объединить (объединить) списки в цикл, например

- hosts: localhost
  tasks:
    - set_fact:
        site: "{{ site|default([]) + x.site }}"
      loop:
        - website1.yml
        - website2.yml
      vars:
        x: "{{ lookup('file', item)|from_yaml }}"
    - debug:
        var: site

дает

  site:
  - domain: website1
    http_port: 5000
    https_port: 6000
  - domain: website2
    http_port: 5001
    https_port: 6001
2
ответ дан 28 July 2021 в 13:56

Теги

Похожие вопросы