- name: Store custom configuration files ansible.builtin.copy: dest: "{{ item.filename }}" content: "{{ item.content }}" loop: - filename: /etc/rancher/k3s/config.yaml content: | kubelet-arg: - "config=/etc/rancher/k3s/kubelet.config" - filename: /etc/rancher/k3s/kubelet.config content: | apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration shutdownGracePeriod: 180s shtudownGracePeriodCriticalPods: 60s loop_control: label: "{{ item.filename }}" - name: Gather service facts ansible.builtin.service_facts: # Module requires no attributes - name: Install K3s ansible.builtin.command: cmd: ./install.sh chdir: /opt/metacluster/k3s environment: INSTALL_K3S_SKIP_DOWNLOAD: 'true' # To prevent from overwriting traefik's existing configuration, "disable" it on this new node INSTALL_K3S_EXEC: "server --token {{ vapp['metacluster.token'] | trim }} --server https://{{ vapp['metacluster.vip'] }}:6443 --disable local-storage,traefik --config /etc/rancher/k3s/config.yaml" when: ansible_facts.services['k3s.service'] is undefined - name: Ensure API availability ansible.builtin.uri: url: https://{{ vapp['guestinfo.ipaddress'] }}:6443/livez?verbose method: GET validate_certs: no status_code: [200, 401] register: api_readycheck until: api_readycheck.json.apiVersion is defined retries: "{{ playbook.retries }}" delay: "{{ (storage_benchmark | int) * (playbook.delay.medium | int) }}" - name: Install kubectl tab-completion ansible.builtin.shell: cmd: kubectl completion bash | tee /etc/bash_completion.d/kubectl - name: Initialize tempfile ansible.builtin.tempfile: state: file register: kubeconfig - name: Retrieve kubeconfig ansible.builtin.command: cmd: kubectl config view --raw register: kubectl_config - name: Store kubeconfig in tempfile ansible.builtin.copy: dest: "{{ kubeconfig.path }}" content: "{{ kubectl_config.stdout }}" mode: 0600 no_log: true - name: Add label to node object kubernetes.core.k8s: name: "{{ ansible_facts.nodename | lower }}" kind: Node state: patched definition: metadata: labels: ova.airgappedk8s/moref_id: "{{ moref_id }}" kubeconfig: "{{ kubeconfig.path }}" register: k8snode_patch until: - k8snode_patch.result.metadata.labels['ova.airgappedk8s/moref_id'] is defined retries: "{{ playbook.retries }}" delay: "{{ (storage_benchmark | int) * (playbook.delay.medium | int) }}"