From a569fe153b124127da271b5bf2adc265ed1440df Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Sat, 4 Apr 2026 06:11:44 +0800 Subject: [PATCH] refactor(platform): split addon step for external-dns --- k3s_platform_addon.yml | 2 +- k3s_platform_bootstrap_with_gitops.yml | 7 ++++ .../tasks/addons/external-dns.yml | 38 +++++++++++++++++ .../vhosts/k3s_platform_addon/tasks/main.yml | 41 ++----------------- 4 files changed, 49 insertions(+), 39 deletions(-) create mode 100644 roles/vhosts/k3s_platform_addon/tasks/addons/external-dns.yml diff --git a/k3s_platform_addon.yml b/k3s_platform_addon.yml index c1df3d7..32001ba 100644 --- a/k3s_platform_addon.yml +++ b/k3s_platform_addon.yml @@ -1,4 +1,4 @@ -- name: Install single-node k3s platform addons +- name: Addon | single-node k3s platform hosts: k3s user: root become: yes diff --git a/k3s_platform_bootstrap_with_gitops.yml b/k3s_platform_bootstrap_with_gitops.yml index 40e0bcc..d27c55d 100644 --- a/k3s_platform_bootstrap_with_gitops.yml +++ b/k3s_platform_bootstrap_with_gitops.yml @@ -6,5 +6,12 @@ tasks: - include_role: name: vhosts/k3s_platform_bootstrap + +- name: Addon | single-node k3s platform + hosts: k3s + user: root + become: yes + gather_facts: yes + tasks: - include_role: name: vhosts/k3s_platform_addon diff --git a/roles/vhosts/k3s_platform_addon/tasks/addons/external-dns.yml b/roles/vhosts/k3s_platform_addon/tasks/addons/external-dns.yml new file mode 100644 index 0000000..f86efe4 --- /dev/null +++ b/roles/vhosts/k3s_platform_addon/tasks/addons/external-dns.yml @@ -0,0 +1,38 @@ +- name: Addon | external-dns install chart with retry + ansible.builtin.shell: | + set -euo pipefail + export KUBECONFIG="{{ k3s_platform_kubeconfig_path }}" + chart_dir="$(mktemp -d /tmp/external-dns.XXXXXX)" + cleanup() { + rm -rf "$chart_dir" + } + trap cleanup EXIT + + attempt=1 + max_attempts=6 + while true; do + rm -rf "$chart_dir"/* + if helm pull --repo "{{ k3s_platform_external_dns_chart_repo_url }}" \ + --version "{{ k3s_platform_external_dns_chart_version }}" \ + --untar \ + --untardir "$chart_dir" \ + external-dns; then + break + fi + if [ "$attempt" -ge "$max_attempts" ]; then + echo "failed to download external-dns after $attempt attempts" >&2 + exit 1 + fi + sleep "$((attempt * 30))" + attempt=$((attempt + 1)) + done + + helm upgrade --install "{{ k3s_platform_values.components.externalDns.releaseName }}" "$chart_dir/external-dns" \ + --namespace platform \ + --create-namespace \ + --version "{{ k3s_platform_external_dns_chart_version }}" \ + -f /tmp/platform-external-dns-values.yaml \ + --wait \ + --timeout 10m + args: + executable: /bin/bash diff --git a/roles/vhosts/k3s_platform_addon/tasks/main.yml b/roles/vhosts/k3s_platform_addon/tasks/main.yml index c589b31..48079e4 100644 --- a/roles/vhosts/k3s_platform_addon/tasks/main.yml +++ b/roles/vhosts/k3s_platform_addon/tasks/main.yml @@ -126,43 +126,8 @@ when: - k3s_platform_values.components.apisix.enabled | default(false) -- name: Install external-dns directly with Helm - ansible.builtin.shell: | - set -euo pipefail - export KUBECONFIG="{{ k3s_platform_kubeconfig_path }}" - chart_dir="$(mktemp -d /tmp/external-dns.XXXXXX)" - cleanup() { - rm -rf "$chart_dir" - } - trap cleanup EXIT - - attempt=1 - max_attempts=6 - while true; do - rm -rf "$chart_dir"/* - if helm pull --repo "{{ k3s_platform_external_dns_chart_repo_url }}" \ - --version "{{ k3s_platform_external_dns_chart_version }}" \ - --untar \ - --untardir "$chart_dir" \ - external-dns; then - break - fi - if [ "$attempt" -ge "$max_attempts" ]; then - echo "failed to download external-dns after $attempt attempts" >&2 - exit 1 - fi - sleep "$((attempt * 30))" - attempt=$((attempt + 1)) - done - - helm upgrade --install "{{ k3s_platform_values.components.externalDns.releaseName }}" "$chart_dir/external-dns" \ - --namespace platform \ - --create-namespace \ - --version "{{ k3s_platform_external_dns_chart_version }}" \ - -f /tmp/platform-external-dns-values.yaml \ - --wait \ - --timeout 10m - args: - executable: /bin/bash +- name: Addon | external-dns + ansible.builtin.import_tasks: addons/external-dns.yml when: - k3s_platform_values.components.externalDns.enabled | default(false) + tags: [addon, external-dns]