199 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| ---
 | |
| 
 | |
| # Reference https://docs.tigera.io/calico/3.25/operations/operator-migration
 | |
| 
 | |
| # Script creation of imageset: https://docs.tigera.io/calico/latest/operations/image-options/imageset#create-an-imageset
 | |
| # above may pull sha for arch of machine who ran the script
 | |
| 
 | |
| - name: Try / Catch
 | |
|   vars:
 | |
|     operator_manifests:
 | |
|       - Deployment-manifest-Calico_Operator.yaml.j2
 | |
|       - Installation-manifest-Calico_Cluster.yaml.j2
 | |
|       - FelixConfiguration-manifest-Calico_Cluster.yaml
 | |
|       - IPPool-manifest-Calico_Cluster.yaml.j2
 | |
|       - APIServer-manifest-Calico_Cluster.yaml
 | |
|       - ConfigMap-manifest-Calico_Service_Endpoint.yaml.j2
 | |
|   block:
 | |
| 
 | |
| 
 | |
|     - name: Move Calico Manifest from addons directory
 | |
|       ansible.builtin.command:
 | |
|         cmd: mv /var/lib/rancher/k3s/server/manifests/calico.yaml /tmp/
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       when: file_calico_yaml_metadata.stat.exists
 | |
| 
 | |
| 
 | |
|     - name: Remove addon from Kubernetes
 | |
|       ansible.builtin.command:
 | |
|         cmd: kubectl delete addon -n kube-system calico
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       when: file_calico_yaml_metadata.stat.exists
 | |
| 
 | |
| 
 | |
|     - name: Uninstall Calico
 | |
|       ansible.builtin.command:
 | |
|         cmd: kubectl delete -f /tmp/calico.yaml
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       when: file_calico_yaml_metadata.stat.exists
 | |
| 
 | |
| 
 | |
|       # Save the manifests in a dir so that diff's can be shown for changes
 | |
|     - name: Copy Manifest for addition
 | |
|       ansible.builtin.template:
 | |
|         src: "{{ item }}"
 | |
|         dest: "/var/lib/rancher/k3s/ansible/{{ item | lower | replace('.j2', '') }}"
 | |
|         mode: '744'
 | |
|       become: true
 | |
|       diff: true
 | |
|       loop: "{{ operator_manifests }}"
 | |
| 
 | |
| 
 | |
|     - name: Try / Catch
 | |
|       block:
 | |
| 
 | |
| 
 | |
|         - name: Apply Operator Manifests
 | |
|           ansible.builtin.command:
 | |
|             cmd: "kubectl create -f /var/lib/rancher/k3s/ansible/{{ item | lower | replace('.j2', '') }}"
 | |
|           become: true
 | |
|           changed_when: false
 | |
|           failed_when: >
 | |
|             'Error from server' in operator_manifest_stdout.stderr
 | |
|           loop: "{{ operator_manifests }}"
 | |
|           register: operator_manifest_stdout
 | |
| 
 | |
| 
 | |
|       rescue:
 | |
| 
 | |
| 
 | |
|         - name: TRACE - Operator manifest apply
 | |
|           ansible.builtin.debug:
 | |
|             msg: "{{ operator_manifest_stdout }}"
 | |
| 
 | |
| 
 | |
|         - name: Apply Operator Manifests - "Rescue"
 | |
|           ansible.builtin.command:
 | |
|             cmd: "kubectl replace -f /var/lib/rancher/k3s/ansible/{{ item | lower | replace('.j2', '') }}"
 | |
|           become: true
 | |
|           changed_when: false
 | |
|           failed_when: >
 | |
|             'Error from server' in operator_manifest_stdout.stderr
 | |
|               and
 | |
|             'ensure CRDs are installed first' in operator_manifest_stdout.stderr
 | |
|           loop: "{{ operator_manifests }}"
 | |
|           register: operator_manifest_stdout
 | |
| 
 | |
| 
 | |
|         - name: TRACE - Operator manifest apply. Rescued
 | |
|           ansible.builtin.debug:
 | |
|             msg: "{{ operator_manifest_stdout }}"
 | |
| 
 | |
| 
 | |
|     - name: Fetch Calico Kubectl Plugin
 | |
|       ansible.builtin.uri:
 | |
|         url: |-
 | |
|           https://github.com/projectcalico/calico/releases/download/{{ nfc_kubernetes_calico_version }}/calicoctl-linux-
 | |
|           {%- if cpu_arch.key == 'aarch64' -%}
 | |
|             arm64
 | |
|           {%- else -%}
 | |
|             amd64
 | |
|           {%- endif %}
 | |
|         status_code:
 | |
|           - 200
 | |
|           - 304
 | |
|         dest: "/tmp/kubectl-calico.{{ cpu_arch.key }}"
 | |
|         mode: '777'
 | |
|         owner: root
 | |
|         group: 'root'
 | |
|       changed_when: false
 | |
|       become: true
 | |
|       delegate_to: localhost
 | |
|       loop: "{{ nfc_kubernetes_install_architectures | dict2items }}"
 | |
|       loop_control:
 | |
|         loop_var: cpu_arch
 | |
|       vars:
 | |
|         ansible_connection: local
 | |
| 
 | |
| 
 | |
|     - name: Add calico Plugin
 | |
|       ansible.builtin.copy:
 | |
|         src: "/tmp/kubectl-calico.{{ ansible_architecture }}"
 | |
|         dest: /usr/local/bin/kubectl-calico
 | |
|         mode: '770'
 | |
|         owner: root
 | |
|         group: 'root'
 | |
|       become: true
 | |
|       when: nfc_role_kubernetes_master
 | |
| 
 | |
| 
 | |
|     - name: Setup Automagic Host Endpoints
 | |
|       ansible.builtin.shell:
 | |
|         cmd: |-
 | |
|           kubectl calico \
 | |
|             patch kubecontrollersconfiguration \
 | |
|             default --patch='{"spec": {"controllers": {"node": {"hostEndpoint": {"autoCreate": "Enabled"}}}}}'
 | |
|         executable: bash
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       failed_when: false # fixme
 | |
| 
 | |
| 
 | |
|     - name: Remove calico migration label
 | |
|       ansible.builtin.shell:
 | |
|         cmd: |-
 | |
|           kubectl label \
 | |
|             {{ inventory_hostname }} \
 | |
|             projectcalico.org/operator-node-migration-
 | |
|         executable: bash
 | |
|       become: true
 | |
|       delegate_to: "{{ kubernetes_config.cluster.prime.name | default(inventory_hostname) }}"
 | |
|       changed_when: false
 | |
|       failed_when: false
 | |
|       loop: "{{ groups[kubernetes_config.cluster.group_name | default('make_me_optional')] | default([]) }}"
 | |
| 
 | |
|     # kubectl label node ip-10-229-92-202.eu-west-1.compute.internal projectcalico.org/operator-node-migration-
 | |
|     # migration started
 | |
| 
 | |
|   rescue:
 | |
| 
 | |
| 
 | |
|     - name: Remove Operator Manifests
 | |
|       ansible.builtin.command:
 | |
|         cmd: "kubectl delete -f /var/lib/rancher/k3s/ansible/{{ item | lower | replace('.j2', '') }}"
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       failed_when: false
 | |
|       loop: "{{ operator_manifests }}"
 | |
|       when: file_calico_yaml_metadata.stat.exists # Only rescue if it was a migration
 | |
| 
 | |
| 
 | |
|     - name: Move Calico Manifest from addons directory
 | |
|       ansible.builtin.command:
 | |
|         cmd: mv /tmp/calico.yaml /var/lib/rancher/k3s/server/manifests/
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       when: file_calico_yaml_metadata.stat.exists
 | |
| 
 | |
| 
 | |
|     - name: Re-install Calico
 | |
|       ansible.builtin.command:
 | |
|         cmd: kubectl apply -f /var/lib/rancher/k3s/server/manifests/calico.yaml
 | |
|       become: true
 | |
|       changed_when: false
 | |
|       when: file_calico_yaml_metadata.stat.exists
 | |
| 
 | |
| 
 | |
|   always:
 | |
| 
 | |
| 
 | |
|     - name: Clean-up Temp File
 | |
|       ansible.builtin.file:
 | |
|         name: /tmp/calico.yaml
 | |
|         state: absent
 | |
|       become: true
 | |
|       when: file_calico_yaml_metadata.stat.exists
 |