From 9452c8be52538dd688a4b76b406689ed4cc97dce Mon Sep 17 00:00:00 2001 From: cyberops7 <18562612+cyberops7@users.noreply.github.com> Date: Wed, 1 Jul 2026 23:34:06 -0600 Subject: [PATCH] Fix RKE2 MetalLB L2Advertisement to honor custom lb_pool_name (#135) The apply-manifests role rendered the IPAddressPool from a template using lb_pool_name, but applied the L2Advertisement from a hardcoded remote file where the pool name was baked in as 'first-pool'. Setting lb_pool_name to anything else left the L2Advertisement pointing at a non-existent pool, so MetalLB assigned LoadBalancer IPs but never advertised them (services got an external IP but were unreachable). Template the L2Advertisement locally from lb_pool_name, mirroring the IPAddressPool pattern, so both manifests always reference the same pool. --- .../RKE2/roles/apply-manifests/tasks/main.yaml | 12 +++++++++++- .../templates/metallb-l2advertisement.j2 | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 Ansible/Playbooks/RKE2/roles/apply-manifests/templates/metallb-l2advertisement.j2 diff --git a/Ansible/Playbooks/RKE2/roles/apply-manifests/tasks/main.yaml b/Ansible/Playbooks/RKE2/roles/apply-manifests/tasks/main.yaml index bf5ea47..9eb8a60 100644 --- a/Ansible/Playbooks/RKE2/roles/apply-manifests/tasks/main.yaml +++ b/Ansible/Playbooks/RKE2/roles/apply-manifests/tasks/main.yaml @@ -33,10 +33,20 @@ become_user: "{{ ansible_user }}" when: inventory_hostname == groups['servers'][0] +# Deploy L2 Advertisement to Server 1 (templated so it matches lb_pool_name) +- name: Copy metallb L2 Advertisement to server 1 + ansible.builtin.template: + src: templates/metallb-l2advertisement.j2 + dest: /home/{{ ansible_user }}/l2advertisement.yaml + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" + mode: '0755' + when: inventory_hostname == groups['servers'][0] + # Apply L2 Advertisement for metallb - name: Apply metallb L2 Advertisement ansible.builtin.command: - cmd: kubectl apply -f https://raw.githubusercontent.com/JamesTurland/JimsGarage/main/Kubernetes/RKE2/l2Advertisement.yaml + cmd: kubectl apply -f /home/{{ ansible_user }}/l2advertisement.yaml become_user: "{{ ansible_user }}" changed_when: true when: inventory_hostname == groups['servers'][0] diff --git a/Ansible/Playbooks/RKE2/roles/apply-manifests/templates/metallb-l2advertisement.j2 b/Ansible/Playbooks/RKE2/roles/apply-manifests/templates/metallb-l2advertisement.j2 new file mode 100644 index 0000000..25458f0 --- /dev/null +++ b/Ansible/Playbooks/RKE2/roles/apply-manifests/templates/metallb-l2advertisement.j2 @@ -0,0 +1,8 @@ +apiVersion: metallb.io/v1beta1 +kind: L2Advertisement +metadata: + name: example + namespace: metallb-system +spec: + ipAddressPools: + - {{ lb_pool_name }}