You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.8 KiB

  1. ---
  2. - name: Set external kube-apiserver endpoint
  3. set_fact:
  4. # noqa: jinja[spacing]
  5. external_apiserver_address: >-
  6. {%- if loadbalancer_apiserver is defined and loadbalancer_apiserver.address is defined -%}
  7. {{ loadbalancer_apiserver.address }}
  8. {%- elif kubeconfig_localhost_ansible_host is defined and kubeconfig_localhost_ansible_host -%}
  9. {{ hostvars[groups['kube_control_plane'][0]].ansible_host }}
  10. {%- else -%}
  11. {{ kube_apiserver_access_address }}
  12. {%- endif -%}
  13. # noqa: jinja[spacing]
  14. external_apiserver_port: >-
  15. {%- if loadbalancer_apiserver is defined and loadbalancer_apiserver.address is defined and loadbalancer_apiserver.port is defined -%}
  16. {{ loadbalancer_apiserver.port | default(kube_apiserver_port) }}
  17. {%- else -%}
  18. {{ kube_apiserver_port }}
  19. {%- endif -%}
  20. tags:
  21. - facts
  22. - name: Create kube config dir for current/ansible become user
  23. file:
  24. path: "{{ ansible_env.HOME | default('/root') }}/.kube"
  25. mode: "0700"
  26. state: directory
  27. - name: Copy admin kubeconfig to current/ansible become user home
  28. copy:
  29. src: "{{ kube_config_dir }}/admin.conf"
  30. dest: "{{ ansible_env.HOME | default('/root') }}/.kube/config"
  31. remote_src: true
  32. mode: "0600"
  33. backup: true
  34. - name: Create kube artifacts dir
  35. file:
  36. path: "{{ artifacts_dir }}"
  37. mode: "0750"
  38. state: directory
  39. delegate_to: localhost
  40. connection: local
  41. become: false
  42. run_once: true
  43. when: kubeconfig_localhost
  44. - name: Wait for k8s apiserver
  45. wait_for:
  46. host: "{{ kube_apiserver_access_address }}"
  47. port: "{{ kube_apiserver_port }}"
  48. timeout: 180
  49. - name: Get admin kubeconfig from remote host
  50. slurp:
  51. src: "{{ kube_config_dir }}/admin.conf"
  52. run_once: true
  53. register: raw_admin_kubeconfig
  54. when: kubeconfig_localhost
  55. - name: Convert kubeconfig to YAML
  56. set_fact:
  57. admin_kubeconfig: "{{ raw_admin_kubeconfig.content | b64decode | from_yaml }}"
  58. when: kubeconfig_localhost
  59. - name: Override username in kubeconfig
  60. set_fact:
  61. final_admin_kubeconfig: "{{ admin_kubeconfig | combine(override_cluster_name, recursive=true) | combine(override_context, recursive=true) | combine(override_user, recursive=true) }}"
  62. vars:
  63. cluster_infos: "{{ admin_kubeconfig['clusters'][0]['cluster'] }}"
  64. user_certs: "{{ admin_kubeconfig['users'][0]['user'] }}"
  65. username: "kubernetes-admin-{{ cluster_name }}"
  66. context: "kubernetes-admin-{{ cluster_name }}@{{ cluster_name }}"
  67. override_cluster_name: "{{ {'clusters': [{'cluster': (cluster_infos | combine({'server': 'https://' + external_apiserver_address + ':' + (external_apiserver_port | string)})), 'name': cluster_name}]} }}"
  68. override_context: "{{ {'contexts': [{'context': {'user': username, 'cluster': cluster_name}, 'name': context}], 'current-context': context} }}"
  69. override_user: "{{ {'users': [{'name': username, 'user': user_certs}]} }}"
  70. when: kubeconfig_localhost
  71. - name: Write admin kubeconfig on ansible host
  72. copy:
  73. content: "{{ final_admin_kubeconfig | to_nice_yaml(indent=2) }}"
  74. dest: "{{ artifacts_dir }}/admin.conf"
  75. mode: "0600"
  76. delegate_to: localhost
  77. connection: local
  78. become: false
  79. run_once: true
  80. when: kubeconfig_localhost
  81. - name: Copy kubectl binary to ansible host
  82. fetch:
  83. src: "{{ bin_dir }}/kubectl"
  84. dest: "{{ artifacts_dir }}/kubectl"
  85. flat: true
  86. validate_checksum: false
  87. register: copy_binary_result
  88. until: copy_binary_result is not failed
  89. retries: 20
  90. become: false
  91. run_once: true
  92. when: kubectl_localhost
  93. - name: Create helper script kubectl.sh on ansible host
  94. copy:
  95. content: |
  96. #!/bin/bash
  97. ${BASH_SOURCE%/*}/kubectl --kubeconfig=${BASH_SOURCE%/*}/admin.conf "$@"
  98. dest: "{{ artifacts_dir }}/kubectl.sh"
  99. mode: "0755"
  100. become: false
  101. run_once: true
  102. delegate_to: localhost
  103. connection: local
  104. when: kubectl_localhost and kubeconfig_localhost