--- - name: Create manifests directory for temp configuration file: path: /tmp/k3s state: directory owner: "{{ ansible_user }}" mode: 0755 with_items: "{{ groups['master'] }}" run_once: true - name: Copy metallb CRs manifest to first master template: src: "metallb.crs.j2" dest: "/tmp/k3s/metallb-crs.yaml" owner: "{{ ansible_user }}" mode: 0755 with_items: "{{ groups['master'] }}" run_once: true - name: Test metallb-system namespace command: >- k3s kubectl -n metallb-system changed_when: false with_items: "{{ groups['master'] }}" run_once: true - name: Wait for MetalLB resources command: >- k3s kubectl wait {{ item.resource }} --namespace='metallb-system' {% if item.name | default(False) -%}{{ item.name }}{%- endif %} {% if item.selector | default(False) -%}--selector='{{ item.selector }}'{%- endif %} {% if item.condition | default(False) -%}{{ item.condition }}{%- endif %} --timeout='{{ metal_lb_available_timeout }}' changed_when: false run_once: true with_items: - description: controller resource: deployment name: controller condition: --for condition=Available=True - description: webhook service resource: pod selector: component=controller condition: --for=jsonpath='{.status.phase}'=Running - description: pods in replica sets resource: pod selector: component=controller,app=metallb condition: --for condition=Ready - description: ready replicas of controller resource: replicaset selector: component=controller,app=metallb condition: --for=jsonpath='{.status.readyReplicas}'=1 - description: fully labeled replicas of controller resource: replicaset selector: component=controller,app=metallb condition: --for=jsonpath='{.status.fullyLabeledReplicas}'=1 - description: available replicas of controller resource: replicaset selector: component=controller,app=metallb condition: --for=jsonpath='{.status.availableReplicas}'=1 loop_control: label: "{{ item.description }}" - name: Test metallb-system webhook-service endpoint command: >- k3s kubectl -n metallb-system get endpoints webhook-service changed_when: false with_items: "{{ groups['master'] }}" run_once: true - name: Apply metallb CRs command: >- k3s kubectl apply -f /tmp/k3s/metallb-crs.yaml --timeout='{{ metal_lb_available_timeout }}' register: this changed_when: false run_once: true until: this.rc == 0 retries: 5 - name: Test metallb-system resources command: >- k3s kubectl -n metallb-system get {{ item }} changed_when: false run_once: true with_items: - IPAddressPool - L2Advertisement