mirror of
https://github.com/JamesTurland/JimsGarage.git
synced 2026-08-06 07:46:12 +00:00
* 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. * Add explicit become: true to apply-manifests kubectl tasks These tasks set become_user without a task-level become, tripping ansible-lint's partial-become rule. become is already enabled globally via ansible_become in group_vars/all.yaml, so the tasks already escalate to the ansible user — but that is invisible to the linter (and to anyone reading the task in isolation). Make it explicit with become: true alongside become_user. Behavior-neutral: verified with ansible-playbook -vvv that the escalation target is unchanged (sudo -u ansible; chown ansible on the temp files), so kubectl still runs as the ansible user that owns ~/.kube/config.
77 lines
2.9 KiB
YAML
77 lines
2.9 KiB
YAML
# Wait for Server 1 to be ready before continuing with metallb deployment
|
|
- name: Wait for k8s nodes with node label 'server=true' to be ready, otherwise we cannot start metallb deployment
|
|
ansible.builtin.command:
|
|
cmd: "kubectl wait --for=condition=Ready nodes --selector server=true --timeout=600s"
|
|
register: nodes_ready
|
|
retries: 120
|
|
delay: 10
|
|
changed_when: true
|
|
become: true
|
|
become_user: "{{ ansible_user }}"
|
|
when: inventory_hostname == groups['servers'][0]
|
|
|
|
# Create namespace so that we can deploy metallb
|
|
- name: Apply metallb namespace
|
|
ansible.builtin.command:
|
|
cmd: kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
|
|
become: true
|
|
become_user: "{{ ansible_user }}"
|
|
changed_when: true
|
|
when: inventory_hostname == groups['servers'][0]
|
|
|
|
# Apply metallb manifest
|
|
- name: Apply metallb manifest
|
|
ansible.builtin.command:
|
|
cmd: kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/{{ metallb_version }}/config/manifests/metallb-native.yaml
|
|
become: true
|
|
become_user: "{{ ansible_user }}"
|
|
changed_when: true
|
|
when: inventory_hostname == groups['servers'][0]
|
|
|
|
# Wait for metallb deployment pods to be alive before deploying metallb manifests
|
|
- name: Wait for metallb pods to be ready, otherwise we cannot start metallb deployment
|
|
ansible.builtin.command:
|
|
cmd: "kubectl wait --namespace metallb-system --for=condition=ready pod --selector=component=controller --timeout=1800s"
|
|
changed_when: true
|
|
become: true
|
|
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 /home/{{ ansible_user }}/l2advertisement.yaml
|
|
become: true
|
|
become_user: "{{ ansible_user }}"
|
|
changed_when: true
|
|
when: inventory_hostname == groups['servers'][0]
|
|
|
|
# Deploy metal IP Pool to Server 1
|
|
- name: Copy metallb IPPool to server 1
|
|
ansible.builtin.template:
|
|
src: templates/metallb-ippool.j2
|
|
dest: /home/{{ ansible_user }}/ippool.yaml
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0755'
|
|
when: inventory_hostname == groups['servers'][0]
|
|
|
|
# don't think this will work as nodes are no execute, might need agents first
|
|
- name: Apply metallb ipppool
|
|
ansible.builtin.command:
|
|
cmd: kubectl apply -f /home/{{ ansible_user }}/ippool.yaml
|
|
become: true
|
|
become_user: "{{ ansible_user }}"
|
|
changed_when: true
|
|
when: inventory_hostname == groups['servers'][0]
|