|
5 | 5 | become: yes |
6 | 6 | become_user: root |
7 | 7 | become_method: sudo |
| 8 | + vars: |
| 9 | + kubeconfig_dir: "/home/{{ ansible_user }}/kubeconfigs" |
8 | 10 |
|
9 | 11 | tasks: |
10 | 12 | - name: Fetch kubeconfig from cluster master nodes |
11 | 13 | ansible.builtin.fetch: |
12 | 14 | src: "/etc/rancher/k3s/k3s.yaml" |
13 | | - dest: "/tmp/{{ inventory_hostname }}-k3s.yaml" |
| 15 | + dest: "{{kubeconfig_dir}}/{{ inventory_hostname }}-k3s.yaml" |
14 | 16 | flat: yes |
15 | 17 | when: inventory_hostname in groups['master_nodes'] |
16 | 18 |
|
|
20 | 22 | become_user: root |
21 | 23 | become_method: sudo |
22 | 24 | gather_facts: no |
| 25 | + vars: |
| 26 | + kubeconfig_dir: "/home/{{ ansible_user }}/kubeconfigs" |
23 | 27 |
|
24 | 28 | tasks: |
25 | 29 | - name: Ensure temporary directory exists |
26 | 30 | ansible.builtin.file: |
27 | | - path: /tmp/kubeconfigs |
| 31 | + path: "{{ kubeconfig_dir }}" |
28 | 32 | state: directory |
| 33 | + owner: "{{ ansible_user }}" |
| 34 | + group: "{{ ansible_user }}" |
29 | 35 | mode: '0755' |
30 | 36 |
|
31 | 37 | - name: Copy fetched kubeconfig to management vm |
32 | 38 | ansible.builtin.copy: |
33 | | - src: "/tmp/{{ item }}-k3s.yaml" |
34 | | - dest: "/tmp/kubeconfigs/{{ item }}-k3s.yaml" |
| 39 | + src: "{{ kubeconfig_dir }}/{{ item }}-k3s.yaml" |
| 40 | + dest: "{{ kubeconfig_dir }}/{{ item }}-k3s.yaml" |
35 | 41 | mode: '0644' |
36 | 42 | loop: "{{ groups['master_nodes'] }}" |
37 | 43 |
|
38 | 44 | - name: Adjust kubeconfig server address for cluster master nodes |
39 | 45 | ansible.builtin.replace: |
40 | | - path: "/tmp/kubeconfigs/{{ item }}-k3s.yaml" |
41 | | - regexp: '127.0.0.1' |
| 46 | + path: "{{ kubeconfig_dir }}/{{ item }}-k3s.yaml" |
| 47 | + regexp: '127\.0\.0\.1' |
42 | 48 | replace: "{{ hostvars[item]['ansible_host'] }}" |
43 | 49 | loop: "{{ groups['master_nodes'] }}" |
44 | 50 |
|
|
51 | 57 | managementvm_ip: "{{ hostvars[inventory_hostname]['ansible_host'] }}" |
52 | 58 | managementvm_hostname: "{{ inventory_hostname }}" |
53 | 59 | karmada_apiserver_nodeport: 32443 |
| 60 | + kubeconfig_dir: "/home/{{ ansible_user }}/kubeconfigs" |
54 | 61 |
|
55 | 62 | tasks: |
56 | 63 | - name: Gathering Facts |
57 | 64 | ansible.builtin.setup: |
58 | 65 |
|
| 66 | + - name: Ensure working directory exists |
| 67 | + file: |
| 68 | + path: "/home/{{ ansible_user }}/mlsysopsansible" |
| 69 | + state: directory |
| 70 | + owner: "{{ ansible_user }}" |
| 71 | + group: "{{ ansible_user }}" |
| 72 | + mode: '0755' |
| 73 | + |
59 | 74 | - name: Create values.yml |
60 | 75 | ansible.builtin.copy: |
61 | 76 | dest: "/home/{{ ansible_user }}/mlsysopsansible/values.yml" |
|
200 | 215 | karmada_config: "/home/{{ ansible_user }}/karmada-kubeconfig.yaml" |
201 | 216 | managementvm_ip: "{{ hostvars[inventory_hostname]['ansible_host'] }}" |
202 | 217 | karmada_apiserver_nodeport: 32644 |
| 218 | + kubeconfig_dir: "/home/{{ ansible_user }}/kubeconfigs" |
203 | 219 |
|
204 | 220 | tasks: |
205 | 221 | - name: Patch Karmada API server service to NodePort |
|
224 | 240 | become: yes |
225 | 241 | vars: |
226 | 242 | karmada_config: "/home/{{ ansible_user }}/karmada-kubeconfig.yaml" |
227 | | - |
| 243 | + kubeconfig_dir: "/home/{{ ansible_user }}/kubeconfigs" |
228 | 244 | tasks: |
229 | 245 | - name: Get list of all clusters |
230 | 246 | ansible.builtin.set_fact: |
|
258 | 274 | ansible.builtin.command: | |
259 | 275 | karmadactl join {{ item }} \ |
260 | 276 | --kubeconfig {{ karmada_config }} \ |
261 | | - --cluster-kubeconfig /tmp/kubeconfigs/{{ cluster_masters[item] }}-k3s.yaml |
| 277 | + --cluster-kubeconfig {{ kubeconfig_dir }}/{{ cluster_masters[item] }}-k3s.yaml |
262 | 278 | loop: "{{ cluster_list }}" |
263 | 279 | register: join_clusters |
264 | 280 | failed_when: join_clusters.rc != 0 |
|
274 | 290 | - name: Debug Karmada clusters |
275 | 291 | debug: |
276 | 292 | var: karmada_clusters.stdout |
| 293 | + |
| 294 | +- name: Merge kubeconfig files into Karmada config |
| 295 | + hosts: management_cluster |
| 296 | + become: yes |
| 297 | + become_user: root |
| 298 | + become_method: sudo |
| 299 | + vars: |
| 300 | + karmada_config: "/home/{{ ansible_user }}/karmada-kubeconfig.yaml" |
| 301 | + kubeconfig_dir: "/home/{{ ansible_user }}/kubeconfigs" |
| 302 | + temp_dir: "/tmp/kubeconfigs" |
| 303 | + |
| 304 | + tasks: |
| 305 | + - name: Ensure temporary directory exists |
| 306 | + ansible.builtin.file: |
| 307 | + path: "{{ temp_dir }}" |
| 308 | + state: directory |
| 309 | + mode: '0755' |
| 310 | + |
| 311 | + - name: Find all cluster kubeconfig files |
| 312 | + ansible.builtin.find: |
| 313 | + paths: "{{ kubeconfig_dir }}" |
| 314 | + patterns: "*-k3s.yaml" |
| 315 | + register: found_configs |
| 316 | + |
| 317 | + - name: Copy kubeconfigs to temporary directory |
| 318 | + ansible.builtin.copy: |
| 319 | + src: "{{ item.path }}" |
| 320 | + dest: "{{ temp_dir }}/{{ item.path | basename }}" |
| 321 | + remote_src: yes |
| 322 | + mode: '0644' |
| 323 | + loop: "{{ found_configs.files }}" |
| 324 | + when: found_configs.files | length > 0 |
| 325 | + |
| 326 | + - name: Normalize context and cluster names in temporary kubeconfigs |
| 327 | + ansible.builtin.shell: | |
| 328 | + name={{ item.path | basename | regex_replace('-k3s.yaml','') }} |
| 329 | + |
| 330 | + kubectl --kubeconfig={{ temp_dir }}/{{ item.path | basename }} config rename-context default ${name} || true |
| 331 | + |
| 332 | + sed -i "s/name: default/name: ${name}/" {{ temp_dir }}/{{ item.path | basename }} |
| 333 | + sed -i "s/cluster: default/cluster: ${name}/" {{ temp_dir }}/{{ item.path | basename }} |
| 334 | + args: |
| 335 | + executable: /bin/bash |
| 336 | + loop: "{{ found_configs.files }}" |
| 337 | + when: found_configs.files | length > 0 |
| 338 | + |
| 339 | + - name: Merge all kubeconfigs into Karmada config |
| 340 | + ansible.builtin.shell: | |
| 341 | + export KUBECONFIG=$(find {{ temp_dir }} -name '*-k3s.yaml' | tr '\n' ':' | sed 's/:$//'):{{ karmada_config }} |
| 342 | + kubectl config view --flatten > /tmp/merged-karmada.yaml |
| 343 | + args: |
| 344 | + executable: /bin/bash |
| 345 | + when: found_configs.files | length > 0 |
| 346 | + |
| 347 | + - name: Validate merged kubeconfig |
| 348 | + ansible.builtin.shell: | |
| 349 | + kubectl --kubeconfig=/tmp/merged-karmada.yaml config view |
| 350 | + register: validate_result |
| 351 | + failed_when: validate_result.rc != 0 |
| 352 | + when: found_configs.files | length > 0 |
| 353 | + |
| 354 | + - name: Replace original Karmada config with merged one |
| 355 | + ansible.builtin.copy: |
| 356 | + src: "/tmp/merged-karmada.yaml" |
| 357 | + remote_src: yes |
| 358 | + dest: "{{ karmada_config }}" |
| 359 | + owner: "{{ ansible_user }}" |
| 360 | + group: "{{ ansible_user }}" |
| 361 | + mode: '0600' |
| 362 | + when: found_configs.files | length > 0 and validate_result.rc == 0 |
| 363 | + |
| 364 | + - name: Clean up temporary files and directory |
| 365 | + ansible.builtin.file: |
| 366 | + path: "{{ temp_dir }}" |
| 367 | + state: absent |
| 368 | + when: found_configs.files | length > 0 |
0 commit comments