--- - name: Create manifests directory file: path: /tmp/k3s state: directory owner: root group: root mode: 0644 with_items: "{{ groups['master'] }}" run_once: true - name: Copy metallb namespace manifest to first master template: src: "metallb.namespace.j2" dest: "/tmp/k3s/metallb-namespace.yaml" owner: root group: root mode: 0644 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: root group: root mode: 0644 with_items: "{{ groups['master'] }}" run_once: true - name: Copy metallb main manifest to first master template: src: "metallb.yaml.j2" dest: "/tmp/k3s/metallb.yaml" owner: root group: root mode: 0644 with_items: "{{ groups['master'] }}" run_once: true - name: Apply metallb-system namespace command: >- k3s kubectl apply -f /tmp/k3s/metallb-namespace.yaml with_items: "{{ groups['master'] }}" run_once: true - name: Test metallb-system namespace command: >- k3s kubectl -n metallb-system with_items: "{{ groups['master'] }}" run_once: true - name: Apply metallb crds and service command: >- k3s kubectl apply -f /tmp/k3s/metallb.yaml with_items: "{{ groups['master'] }}" run_once: true - name: Wait for metallb controller to be running command: >- kubectl wait deployment -n metallb-system controller --for condition=Available=True --timeout=60s with_items: "{{ groups['master'] }}" run_once: true - name: Wait for metallb webhook service to be running command: >- kubectl wait -n metallb-system --for=jsonpath='{.status.phase}'=Running pods \ --selector component=controller --timeout=60s with_items: "{{ groups['master'] }}" run_once: true # TODO:// if there is a race condition, we'll have to manually wait here # - name: Wait for all metallb services to come up # wait_for: # timeout: 30 - name: Wait for metallb pods in replicasets command: >- kubectl wait pods -n metallb-system --for condition=Ready \ --selector component=controller,app=metallb --timeout=60s with_items: "{{ groups['master'] }}" run_once: true - name: Wait for the metallb controller readyReplicas command: >- kubectl wait -n metallb-system --for=jsonpath='{.status.readyReplicas}'=1 replicasets \ --selector component=controller,app=metallb --timeout=60s with_items: "{{ groups['master'] }}" run_once: true - name: Wait for the metallb controller fullyLabeledReplicas command: >- kubectl wait -n metallb-system --for=jsonpath='{.status.fullyLabeledReplicas}'=1 replicasets \ --selector component=controller,app=metallb --timeout=60s with_items: "{{ groups['master'] }}" run_once: true - name: Wait for the metallb controller availableReplicas command: >- kubectl wait -n metallb-system --for=jsonpath='{.status.availableReplicas}'=1 replicasets \ --selector component=controller,app=metallb --timeout=60s with_items: "{{ groups['master'] }}" run_once: true - name: Test metallb-system webhook-service endpoint command: >- k3s kubectl -n metallb-system get endpoints webhook-service with_items: "{{ groups['master'] }}" run_once: true - name: Apply metallb CRs command: >- k3s kubectl apply -f /tmp/k3s/metallb-crs.yaml with_items: "{{ groups['master'] }}" run_once: true - name: Test metallb-system IPAddressPool command: >- k3s kubectl -n metallb-system get IPAddressPool with_items: "{{ groups['master'] }}" run_once: true - name: Test metallb-system L2Advertisement command: >- k3s kubectl -n metallb-system get L2Advertisement with_items: "{{ groups['master'] }}" run_once: true - name: Remove tmp director used for manifests file: path: /tmp/k3s state: absent