|
| 1 | +--- |
| 2 | +# Discover clustergroups in use: main from values-global, managed from main file's clusterGroup.managedClusterGroups. |
| 3 | +# Sets: clustergroup_names (sorted stems), managed_clustergroup_names (sorted, excludes main), |
| 4 | +# clustergroup_load_order (main first, then managed sorted — SS CSI merge precedence), |
| 5 | +# clustergroup_file_entries ({name, path} only when values-<stem>.yaml|yml exists), |
| 6 | +# clustergroup_documents (optional, stem -> parsed YAML root). |
| 7 | + |
| 8 | +- name: Resolve pattern_dir for clustergroup discovery |
| 9 | + ansible.builtin.include_tasks: ../pattern_settings/tasks/resolve_overrides.yml |
| 10 | + when: (pattern_dir | default('', true) | string | trim | length) == 0 |
| 11 | + |
| 12 | +- name: Fail when pattern_dir is empty after resolve |
| 13 | + ansible.builtin.fail: |
| 14 | + msg: >- |
| 15 | + pattern_dir is required (extra var pattern_dir, env PATTERN_DIR, or cwd with values-global.yaml). |
| 16 | + when: (pattern_dir | default('', true) | string | trim | length) == 0 |
| 17 | + |
| 18 | +- name: Resolve main clustergroup stem from facts or values-global.yaml |
| 19 | + ansible.builtin.set_fact: |
| 20 | + _clustergroup_discovery_main_stem: >- |
| 21 | + {{ |
| 22 | + ( |
| 23 | + (main_clustergroupname | default(main_clustergroup | default('', true), true) | string | trim | length) > 0 |
| 24 | + ) |
| 25 | + | ternary( |
| 26 | + main_clustergroupname | default(main_clustergroup, true) | string | trim, |
| 27 | + ( |
| 28 | + lookup('file', (pattern_dir | string | trim) ~ '/values-global.yaml') |
| 29 | + | from_yaml |
| 30 | + ).main.clusterGroupName | string | trim |
| 31 | + ) |
| 32 | + }} |
| 33 | +
|
| 34 | +- name: Fail when main clusterGroupName cannot be resolved |
| 35 | + ansible.builtin.fail: |
| 36 | + msg: >- |
| 37 | + Could not resolve main clustergroup (values-global.yaml missing .main.clusterGroupName or empty). |
| 38 | + when: (_clustergroup_discovery_main_stem | string | trim | length) == 0 |
| 39 | + |
| 40 | +- name: Stat main clustergroup values file (yaml) |
| 41 | + ansible.builtin.stat: |
| 42 | + path: "{{ pattern_dir | string | trim }}/values-{{ _clustergroup_discovery_main_stem }}.yaml" |
| 43 | + register: _clustergroup_discovery_main_stat_yaml |
| 44 | + |
| 45 | +- name: Stat main clustergroup values file (yml) |
| 46 | + ansible.builtin.stat: |
| 47 | + path: "{{ pattern_dir | string | trim }}/values-{{ _clustergroup_discovery_main_stem }}.yml" |
| 48 | + register: _clustergroup_discovery_main_stat_yml |
| 49 | + when: not (_clustergroup_discovery_main_stat_yaml.stat.exists | default(false)) |
| 50 | + |
| 51 | +- name: Set path to main clustergroup values file when present |
| 52 | + ansible.builtin.set_fact: |
| 53 | + _clustergroup_main_values_path: "{{ pattern_dir | string | trim }}/values-{{ _clustergroup_discovery_main_stem }}.yaml" |
| 54 | + when: _clustergroup_discovery_main_stat_yaml.stat.exists | default(false) |
| 55 | + |
| 56 | +- name: Set path to main clustergroup values file when only yml exists |
| 57 | + ansible.builtin.set_fact: |
| 58 | + _clustergroup_main_values_path: "{{ pattern_dir | string | trim }}/values-{{ _clustergroup_discovery_main_stem }}.yml" |
| 59 | + when: |
| 60 | + - _clustergroup_main_values_path is not defined |
| 61 | + - _clustergroup_discovery_main_stat_yml is defined |
| 62 | + - _clustergroup_discovery_main_stat_yml.stat.exists | default(false) |
| 63 | + |
| 64 | +- name: Load parsed root from main clustergroup values file |
| 65 | + ansible.builtin.set_fact: |
| 66 | + _clustergroup_main_root: "{{ lookup('file', _clustergroup_main_values_path) | from_yaml }}" |
| 67 | + when: _clustergroup_main_values_path is defined |
| 68 | + |
| 69 | +- name: Default empty main clustergroup root when file is absent |
| 70 | + ansible.builtin.set_fact: |
| 71 | + _clustergroup_main_root: {} |
| 72 | + when: _clustergroup_main_values_path is not defined |
| 73 | + |
| 74 | +- name: Collect managed clustergroup names from main file managedClusterGroups |
| 75 | + ansible.builtin.set_fact: |
| 76 | + managed_clustergroup_names: "{{ managed_clustergroup_names | default([]) + [_cgd_mcg_name] }}" |
| 77 | + vars: |
| 78 | + _cgd_mcg_name: "{{ (item.value.name | default(item.key, true)) | string | trim }}" |
| 79 | + loop: "{{ (_clustergroup_main_root.clusterGroup | default({})).managedClusterGroups | default({}) | dict2items }}" |
| 80 | + loop_control: |
| 81 | + label: "{{ _cgd_mcg_name }}" |
| 82 | + when: |
| 83 | + - _clustergroup_main_root is mapping |
| 84 | + - (_clustergroup_main_root.clusterGroup | default({})).managedClusterGroups is defined |
| 85 | + - ((_clustergroup_main_root.clusterGroup | default({})).managedClusterGroups | default({})) is mapping |
| 86 | + |
| 87 | +- name: Finalize managed clustergroup names list |
| 88 | + ansible.builtin.set_fact: |
| 89 | + managed_clustergroup_names: "{{ managed_clustergroup_names | default([]) | unique | sort }}" |
| 90 | + |
| 91 | +- name: Set clustergroup load order (main first so managed values files override for SS CSI merge) |
| 92 | + ansible.builtin.set_fact: |
| 93 | + clustergroup_load_order: >- |
| 94 | + {{ |
| 95 | + ( |
| 96 | + [_clustergroup_discovery_main_stem] |
| 97 | + + (managed_clustergroup_names | reject('equalto', _clustergroup_discovery_main_stem) | list) |
| 98 | + ) | unique | list |
| 99 | + }} |
| 100 | +
|
| 101 | +- name: Set sorted clustergroup names (all stems in use) |
| 102 | + ansible.builtin.set_fact: |
| 103 | + clustergroup_names: "{{ clustergroup_load_order | sort }}" |
| 104 | + |
| 105 | +- name: Build clustergroup_file_entries for stems that have a local values file |
| 106 | + ansible.builtin.include_tasks: resolve_clustergroup_file_path.yml |
| 107 | + loop: "{{ clustergroup_load_order }}" |
| 108 | + loop_control: |
| 109 | + loop_var: clustergroup_discovery_stem |
| 110 | + |
| 111 | +- name: Default empty clustergroup file entries |
| 112 | + ansible.builtin.set_fact: |
| 113 | + clustergroup_file_entries: [] |
| 114 | + when: clustergroup_file_entries is not defined |
| 115 | + |
| 116 | +- name: Parse each resolved clustergroup values file when requested |
| 117 | + ansible.builtin.include_tasks: parse_documents.yml |
| 118 | + when: clustergroup_discovery_parse_documents | default(false) | bool |
0 commit comments