|
| 1 | +--- |
| 2 | +# Detect which External Secrets Operator service account tokens exist on the |
| 3 | +# cluster and build hub-role bindings. Supports both: |
| 4 | +# - openshift-external-secrets (ocp-external-secrets / external-secrets) |
| 5 | +# - golang-external-secrets (legacy community chart) |
| 6 | +# |
| 7 | +# Sets facts used by vault_secrets_init.yaml and vault_app_policies.yaml: |
| 8 | +# hub_bound_service_account_names - comma-separated for vault write |
| 9 | +# hub_bound_service_account_namespaces - comma-separated for vault write |
| 10 | +# hub_bound_service_account_names_list |
| 11 | +# hub_bound_service_account_namespaces_list |
| 12 | +# token_data / sa_token - reviewer JWT (prefers openshift) |
| 13 | +# active_external_secrets_sa - primary SA (for backwards compatibility) |
| 14 | +# active_external_secrets_ns |
| 15 | +# active_external_secrets_secret |
| 16 | + |
| 17 | +- name: Check for openshift external secrets service account token |
| 18 | + no_log: '{{ hide_sensitive_output | default(true) }}' |
| 19 | + kubernetes.core.k8s_info: |
| 20 | + kind: Secret |
| 21 | + namespace: "{{ external_secrets_ns }}" |
| 22 | + name: "{{ external_secrets_secret }}" |
| 23 | + api_version: v1 |
| 24 | + register: external_secrets_token_data |
| 25 | + failed_when: false |
| 26 | + |
| 27 | +- name: Check for golang external secrets service account token |
| 28 | + no_log: '{{ hide_sensitive_output | default(true) }}' |
| 29 | + kubernetes.core.k8s_info: |
| 30 | + kind: Secret |
| 31 | + namespace: "{{ legacy_external_secrets_ns }}" |
| 32 | + name: "{{ legacy_external_secrets_secret }}" |
| 33 | + api_version: v1 |
| 34 | + register: legacy_external_secrets_token_data |
| 35 | + failed_when: false |
| 36 | + |
| 37 | +- name: Build hub-role service account binding lists |
| 38 | + ansible.builtin.set_fact: |
| 39 | + hub_bound_service_account_names_list: >- |
| 40 | + {{ |
| 41 | + ([] if external_secrets_token_data.resources | length == 0 else [external_secrets_sa]) |
| 42 | + + ([] if legacy_external_secrets_token_data.resources | length == 0 else [legacy_external_secrets_sa]) |
| 43 | + }} |
| 44 | + hub_bound_service_account_namespaces_list: >- |
| 45 | + {{ |
| 46 | + ([] if external_secrets_token_data.resources | length == 0 else [external_secrets_ns]) |
| 47 | + + ([] if legacy_external_secrets_token_data.resources | length == 0 else [legacy_external_secrets_ns]) |
| 48 | + }} |
| 49 | +
|
| 50 | +- name: Set comma-separated hub-role bindings for vault write |
| 51 | + ansible.builtin.set_fact: |
| 52 | + hub_bound_service_account_names: "{{ hub_bound_service_account_names_list | join(',') }}" |
| 53 | + hub_bound_service_account_namespaces: "{{ hub_bound_service_account_namespaces_list | join(',') }}" |
| 54 | + |
| 55 | +- name: Fail if no external secrets service account tokens are found |
| 56 | + ansible.builtin.fail: |
| 57 | + msg: >- |
| 58 | + No External Secrets service account tokens found. Expected at least one of: |
| 59 | + {{ external_secrets_ns }}/{{ external_secrets_secret }} (openshift-external-secrets) or |
| 60 | + {{ legacy_external_secrets_ns }}/{{ legacy_external_secrets_secret }} (golang-external-secrets). |
| 61 | + Deploy openshift-external-secrets or golang-external-secrets before running load-secrets. |
| 62 | + when: hub_bound_service_account_names_list | length == 0 |
| 63 | + |
| 64 | +- name: Set token reviewer and primary ESO facts (prefer openshift over legacy) |
| 65 | + no_log: '{{ hide_sensitive_output | default(true) }}' |
| 66 | + ansible.builtin.set_fact: |
| 67 | + token_data: >- |
| 68 | + {{ |
| 69 | + external_secrets_token_data |
| 70 | + if (external_secrets_token_data.resources | length > 0) |
| 71 | + else legacy_external_secrets_token_data |
| 72 | + }} |
| 73 | + active_external_secrets_sa: >- |
| 74 | + {{ |
| 75 | + external_secrets_sa |
| 76 | + if (external_secrets_token_data.resources | length > 0) |
| 77 | + else legacy_external_secrets_sa |
| 78 | + }} |
| 79 | + active_external_secrets_ns: >- |
| 80 | + {{ |
| 81 | + external_secrets_ns |
| 82 | + if (external_secrets_token_data.resources | length > 0) |
| 83 | + else legacy_external_secrets_ns |
| 84 | + }} |
| 85 | + active_external_secrets_secret: >- |
| 86 | + {{ |
| 87 | + external_secrets_secret |
| 88 | + if (external_secrets_token_data.resources | length > 0) |
| 89 | + else legacy_external_secrets_secret |
| 90 | + }} |
| 91 | +
|
| 92 | +- name: Set sa_token fact |
| 93 | + no_log: '{{ hide_sensitive_output | default(true) }}' |
| 94 | + ansible.builtin.set_fact: |
| 95 | + sa_token: "{{ token_data.resources[0].data.token | b64decode }}" |
| 96 | + |
| 97 | +- name: Debug - External secrets auth detection |
| 98 | + ansible.builtin.debug: |
| 99 | + msg: >- |
| 100 | + ESO hub-role bindings: names={{ hub_bound_service_account_names }}, |
| 101 | + namespaces={{ hub_bound_service_account_namespaces }}, |
| 102 | + token reviewer from {{ active_external_secrets_ns }}/{{ active_external_secrets_secret }} |
| 103 | + verbosity: 1 |
0 commit comments