Можно применять переменные к роли изнутри блока другой роли - PullRequest
0 голосов
/ 04 октября 2019

Моя конечная цель состоит в том, чтобы все роли в моем cluster.yml были в многократно используемом блоке block/rescue, который я использую для уведомления REST API о состоянии книги воспроизведения и возможных ошибках. Мое текущее решение прекрасно работает для простых случаев, но я испытываю трудности, когда мне приходится передавать переменные из основной книги воспроизведения вплоть до внутренней роли.

Допустим, у меня есть следующий фрагмент в моем кластере. yml

- hosts: k8s-cluster:calico-rr
  any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
  roles:
    - { role: kubespray-defaults}
    - { role: etcd, tags: etcd, etcd_cluster_setup: false, etcd_events_cluster_setup: false }

Но я хочу запустить каждую роль внутри блока. Поэтому я сделал следующую роль, которую могу использовать повторно для настройки цикла:

- name: apply-roles
  block:
    - include_role:
        name: "{{ item.name }}"
        apply:
          tags: >-
            {%- if item.tags is defined -%}
            "{{ item.tags }}"
            {%- else -%}
            ""
            {%- endif -%}
  rescue:
    - debug:
        msg: "before notification"
    - include_role:
        name: "my-notification"
      vars:
        msg: an error has occurred
        host: "{{ inventory_hostname }}"
        result: "{{ ansible_failed_result.msg | trim | default(omit) }}"
        role: "{{ item.name }}"
        error: "true"
    - debug:
        msg: "after notification"
  always:
    - debug:
        msg: "include completed"

Тогда мой фрагмент cluster.yml станет:

- hosts: k8s-cluster:calico-rr
  any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
  vars:
    roles:
      - name: "kubespray-defaults"
      - name: "etcd"
        tags: etcd
        etcd_cluster_setup: false
        etcd_events_cluster_setup: false

  tasks:
  - include_tasks: roles/apply-roles/tasks/main.yml
    loop: "{{ roles }}"

Но тогда я не знаюкак перехватить переменные etcd_cluster_setup и etcd_events_cluster_setup и передать их моей роли apply-roles. Я предполагаю, что таким образом я фактически передаю их роли, но как мне применить их к финальной роли из моего блока?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...