Моя конечная цель состоит в том, чтобы все роли в моем 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
. Я предполагаю, что таким образом я фактически передаю их роли, но как мне применить их к финальной роли из моего блока?