minikube_create.yml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. ---
  2. - name: "Query existing minikube clusters"
  3. ansible.builtin.command:
  4. argv:
  5. - minikube
  6. - profile
  7. - list
  8. - --light=true
  9. - --output=json
  10. register: profile_check_result
  11. changed_when: False
  12. ignore_errors: true
  13. # - debug:
  14. # var: profile_check_result
  15. - name: "Set minikube profile JSON Facts"
  16. set_fact:
  17. minikube_profiles_json: "{{ profile_check_result.stdout | from_json }}"
  18. when: not profile_check_result.failed
  19. # - name: "Existing minikube profiles JSON"
  20. # debug:
  21. # var: minikube_profiles_json
  22. # when: not profile_check_result.failed
  23. - name: "Set if no profiles exist"
  24. set_fact:
  25. no_profiles: "{{ profile_check_result.failed or minikube_profiles_json.valid | length == 0 }}"
  26. - name: "Existing minikube profiles"
  27. debug:
  28. msg: "{{ minikube_profiles_json | json_query(profile_name_query) }}"
  29. when: not profile_check_result.failed
  30. - name: "Set profiles to be created"
  31. set_fact:
  32. minikube_profiles: "{{ minikube_profiles | combine( { item.key:{'create': ((item.value.create and not item.value.destroy) and ( item.key not in profile_names or no_profiles )) }}, recursive=True ) }}"
  33. loop: "{{ minikube_profiles | dict2items }}"
  34. loop_control:
  35. label: "{{ item.key }}"
  36. vars:
  37. profile_names: "{{ minikube_profiles_json | json_query(profile_name_query) }}"
  38. when: minikube_profiles_json is defined
  39. - name: "Debug::Minikube Clusters Config"
  40. debug:
  41. var: minikube_profiles
  42. - name: "Create Kubeconfig dir"
  43. file:
  44. state: directory
  45. path: "{{ kubeconfig_dir }}"
  46. - name: "Create minikube Kubernetes Cluster"
  47. command:
  48. argv:
  49. - "{{ minikube_binary }}"
  50. - -p
  51. - "{{ item.key }}"
  52. - start
  53. # TODO #2 load the start up parameters from CLI
  54. - "--memory={{ item.value.memory | default(minikube_default_memory) }}"
  55. - "--cpus={{ item.value.cpus | default(minikube_default_cpus) }}"
  56. - "--disk-size={{ item.value.disk_size | default(minikube_default_disk_size) }}"
  57. - "--delete-on-failure=true"
  58. - "--driver={{ minikube_driver }}"
  59. - "--insecure-registry=10.0.0.0/24"
  60. - --kubernetes-version={{ kubernetes_version | default(minikube_kubernetes_version) }}
  61. - "--service-cluster-ip-range={{ item.value.service_cluster_ip_range | default(minikube_service_cluster_ip_range) }}"
  62. register: minikube_start_result
  63. loop: "{{ minikube_profiles | dict2items }}"
  64. loop_control:
  65. label: "{{ item.key }}"
  66. environment:
  67. KUBECONFIG: "{{ kubeconfig_dir }}/{{ item.key }}.kubeconfig"
  68. when: (item.value.create | bool) and not ( item.value.destroy | bool )
  69. - name: "minikube start result"
  70. debug:
  71. var: minikube_start_result
  72. - name: "Fail when cluster not started"
  73. fail:
  74. msg: "Unable to start minikube"
  75. when: item.changed and minikube_start_result.changed and item.rc != 0
  76. loop: "{{ minikube_start_result.results }}"
  77. loop_control:
  78. label: "{{ item.item.key }}"
  79. - name: "Check if local .kube directory exists"
  80. stat:
  81. path: "{{ kubeconfig_dir }}"
  82. register: kubeconfig_dir_result
  83. # - debug:
  84. # var: kubeconfig_dir_result
  85. - name: "Merge Kubconfig"
  86. set_fact:
  87. kubeconfig: "{{ lookup('fileglob', kubeconfig_dir +'/*.kubeconfig') | regex_replace(',',':') }}"
  88. when: kubeconfig_dir_result.stat.exists
  89. - name: "Merge and Flatten Kubeconfig"
  90. local_action:
  91. module: ansible.builtin.command
  92. argv:
  93. - kubectl
  94. - config
  95. - view
  96. - --flatten
  97. register: merged_kubeconfig
  98. environment:
  99. KUBECONFIG: "{{ kubeconfig }}"
  100. when: kubeconfig_dir_result.stat.exists
  101. - name: "Save work Kubeconfig"
  102. local_action:
  103. module: ansible.builtin.copy
  104. dest: "{{ kubeconfig_dir }}/config"
  105. content: "{{ merged_kubeconfig.stdout | from_yaml | to_nice_yaml(indent=2) }}"
  106. when: kubeconfig_dir_result.stat.exists
  107. - name: "Enabling addon"
  108. ansible.builtin.command:
  109. argv:
  110. - "{{ minikube_binary }}"
  111. - -p
  112. - "{{ item.0.key }}"
  113. - addons
  114. - enable
  115. - "{{ item.1 }}"
  116. loop: "{{ minikube_profiles | dict2items | subelements('value.addons',skip_missing=True)}}"
  117. register: addons_enable_result
  118. changed_when: False
  119. loop_control:
  120. label: "Enabling addon '{{ item.1}}' on '{{ item.0.key }}'"
  121. when: ( ( item.0.value.create | bool ) and not ( item.0.value.destroy | bool ) ) or force_enable_addon
  122. environment:
  123. KUBECONFIG: "{{ playbook_dir }}/.kube/{{ item.0.key }}.kubeconfig"