瀏覽代碼

fix: ablity to create multiple clusters at once

Kamesh Sampath 4 年之前
父節點
當前提交
e29ced815a
共有 6 個文件被更改,包括 89 次插入56 次删除
  1. 1 0
      .envrc
  2. 5 4
      README.md
  3. 16 11
      defaults/main.yml
  4. 0 3
      tasks/main.yml
  5. 52 34
      tasks/minikube_create.yml
  6. 15 4
      tasks/minikube_destroy.yml

+ 1 - 0
.envrc

@@ -0,0 +1 @@
+export MINIKUBE_DRIVER=hyperkit

+ 5 - 4
README.md

@@ -22,13 +22,14 @@ __NOTE__: For Windows its recommended to use Windows Subsystem for Linux (WSL)
 | minikube_profile_name| Name of the minikube cluster| minikube |
 | minikube_create|  If True creates the cluster | True |
 | minikube_destroy| If True destroys the cluster | True |
-| minikube_version| The minikube version | v1.12.1 |
-| minikube_home_dir| The directory where KinD files will be stored | $HOME/.minikube |
-| minikube_driver| The minikube driver | docker|
+| minikube_version| The minikube version | v1.23.2 |
+| minikube_home_dir| The directory where minikube files will be stored | $HOME/.minikube |
+| minikube_driver| The minikube driver | hyperkit |
 | minikube_memory| The memory to use for minikube | 8g |
 | minikube_cpus| The cpus to use for minikube | 4 |
 | minikube_disk_size| The disk size to use for minikube | 50g |
-| minikube_addons| the addons to enable bu default | registry and registry-aliases |
+| minikube_addons| the addons to enable by default | registry and registry-aliases |
+| kubernetes-version| The kubernetes version to use | stable |
 
 ## Creating a minikube cluster
 

+ 16 - 11
defaults/main.yml

@@ -1,14 +1,19 @@
 ---
-minikube_version: v1.12.1
+minikube_version: v1.23.2
 minikube_home_dir: "{{ansible_env.HOME}}/.minikube"
 minikube_create: True
-minikube_driver: docker
-minikube_profile_name: minikube
-minikube_memory: 8g
-minikube_cpus: 4
-minikube_disk_size: 50g
-minikube_addons:
- - registry
- - registry-aliases
-minikube_destroy: False
-minikube_service_cluster_ip_range: 10.96.10.0/27
+minikube_driver: hyperkit
+minikube_default_memory: 8g
+minikube_default_cpus: 4
+minikube_default_disk_size: 50g
+minikube_kubernetes_version: stable
+minikube_service_cluster_ip_range: 10.96.10.0/27
+minikube_profiles: 
+  minikube:
+    create: yes
+    destroy: no
+    addons:
+     - registry
+     - registry-aliases
+     - metallb
+profile_name_query: 'valid[*].Name'

+ 0 - 3
tasks/main.yml

@@ -4,18 +4,15 @@
 ###################################
 - name: 'Check minikube Pre-req'
   include_tasks: minikube_pre_reqs.yml
-  when: minikube_create
 
 ###################################
 # Create
 ###################################
 - name: 'Create minikube {{ minikube_profile_name }} Cluster'
   include_tasks: minikube_create.yml
-  when: minikube_create
 
 ###################################
 # Destroy
 ###################################
 - name: 'Destroy minikube {{ minikube_profile_name }} Cluster'
   include_tasks: minikube_destroy.yml
-  when: minikube_destroy | default(False)

+ 52 - 34
tasks/minikube_create.yml

@@ -1,65 +1,83 @@
 ---
 - name: "Check if {{ minikube_profile_name }} already exists"
-  command:
+  ansible.builtin.command:
     argv:
-      - "{{ minikube_binary }}"
-      - "profile"
-      - "list"
+      - minikube
+      - profile
+      - list
+      - --light=true
+      - --output=json
   register: profile_check_result
   changed_when: False
   ignore_errors: true
 
+- name: "Set minikube profile JSON Facts"
+  set_fact:
+    minikube_profiles_json: "{{ profile_check_result.stdout | from_json }}"
+
 - name: Set if no profiles exist
   set_fact:
-    no_profiles: "{{ profile_check_result.stderr | regex_search('No minikube profile was found.*$') }}"
-  when: profile_check_result.stderr is defined
+    no_profiles: "{{ minikube_profiles_json.valid | length == 0 }}"
 
-- name: Set existing profile name
+- name: "Existing minikube profiles"
+  debug:
+    msg: "{{ minikube_profiles_json | json_query(profile_name_query) }}"
+  
+- name: "Set profiles to be created"
   set_fact:
-    profile_name: '{{ profile_check_result.stdout_lines | join("~") | regex_search(minikube_profile_name) }}'
+    minikube_profiles: "{{ minikube_profiles | combine( { item.key:{'create': ((not item.value.destroy) and ( item.key not in profile_names or no_profiles )) }}, recursive=True ) }}"
+  loop: "{{ minikube_profiles | dict2items }}"
+  loop_control:
+    label: "{{ item.key }}"
+  vars:
+    profile_names: "{{ minikube_profiles_json | json_query(profile_name_query) }}"
 
-# - debug: msg="{{ profile_name }}"
+- name: "Debug::Minikube Clusters Config"
+  debug:
+    var: minikube_profiles
 
-- name: "Create minikube with profile {{ minikube_profile_name }}"
+- name: "Create minikube Kubernetes Cluster"
   command:
     argv:
       - "{{ minikube_binary }}"
       - -p
-      - "{{ minikube_profile_name }}"
+      - "{{ item.key }}"
       - start
       # TODO #2 load the start up parameters from CLI
-      - --memory={{ minikube_memory }}
-      - --cpus={{ minikube_cpus }}
-      - --disk-size={{ minikube_disk_size }}
-      - --delete-on-failure=true
-      - --driver={{ minikube_driver }}
-      - --insecure-registry="10.0.0.0/24"
-      - --service-cluster-ip-range={{ minikube_service_cluster_ip_range }}
+      - "--memory={{ item.value.memory  | default(minikube_default_memory) }}"
+      - "--cpus={{ item.value.cpus | default(minikube_default_cpus) }}"
+      - "--disk-size={{ item.value.disk_size | default(minikube_default_disk_size) }}"
+      - "--delete-on-failure=true"
+      - "--driver={{ minikube_driver }}"
+      - "--insecure-registry=10.0.0.0/24"
+      - --kubernetes-version={{ kubernetes_version | default(minikube_kubernetes_version) }}
+      - "--service-cluster-ip-range={{ item.value.service_cluster_ip_range | default(minikube_service_cluster_ip_range) }}"
   register: minikube_start_result
-  when: (no_profiles is defined and no_profiles | length > 0) or (profile_name is defined and profile_name | length == 0)
-
-# - debug: msg="{{ minikube_start_result }}"
+  loop: "{{ minikube_profiles | dict2items }}"
+  loop_control:
+    label: "{{ item.key }}"
+  when: (item.value.create | bool) and not ( item.value.destroy | bool )
 
-- name: "Fail when not started"
+- name: "Fail when cluster not started"
   fail:
     msg: "Unable to start minikube"
-  when: minikube_start_result.rc is defined and minikube_start_result.rc != 0
-
-- name: "Set profile as current profile"
-  command:
-    argv:
-      - "{{ minikube_binary }}"
-      - profile
-      - "{{ minikube_profile_name }}"
-  changed_when: False
+  when: minikube_start_result.changed and item.rc != 0
+  loop: "{{ minikube_start_result.results }}"
+  loop_control:
+    label: "{{ item.item.key }}"
 
 - name: "Enabling addon"
-  command:
+  ansible.builtin.command:
     argv:
       - "{{ minikube_binary }}"
+      - -p
+      - "{{ item.0.key }}"
       - addons
       - enable
-      - "{{ item }}"
-  loop: "{{ minikube_addons }}"
+      - "{{ item.1 }}"
+  loop: "{{ minikube_profiles | dict2items | subelements('value.addons',skip_missing=True)}}"
   register: addons_enable_result
   changed_when: False
+  loop_control:
+    label: "Enabling addon '{{ item.1}}' on '{{ item.0.key }}'"
+  when: (item.0.value.create | bool) and not ( item.0.value.destroy | bool )

+ 15 - 4
tasks/minikube_destroy.yml

@@ -1,15 +1,26 @@
 ---
-- name: "Delete minikube cluster {{ minikube_profile_name }}"
-  command:
+- name: "Delete minikube cluster"
+  ansible.builtin.command:
     argv:
       - "{{ minikube_binary }}"
       - -p
-      - "{{ minikube_profile_name }}"
+      - "{{ item.key }}"
       - delete
   register: delete_test_res
   changed_when: False
+  loop: "{{ minikube_profiles | dict2items }}"
+  loop_control:
+    label: "{{ item.key }}"
+  when: (item.value.destroy | bool ) and not ( item.value.create | bool)
+
+- name: "Debug Delete Cluster"
+  debug:
+    var: delete_test_res
 
 - name: Fail when not cleaned
   fail:
     msg: "Error while deleting minikube resources"
-  when: delete_test_res.rc != 0
+  when: delete_test_res.changed and item.rc != 0
+  loop: "{{ delete_test_res.results }}"
+  loop_control:
+    label: "{{ item.item.key }}"