97 lines
3.6 KiB
YAML
97 lines
3.6 KiB
YAML
---
|
|
# Minikube installation and cluster setup for indri
|
|
# Requires podman machine to be running (see podman role)
|
|
#
|
|
# NOTE: Similar to podman, minikube start may have issues when run via SSH.
|
|
# If cluster fails to start, manually run on indri:
|
|
# minikube start --driver=podman --container-runtime=cri-o \
|
|
# --cpus=4 --memory=7800 --disk-size=200g \
|
|
# --apiserver-names=k8s.tail8d86e.ts.net --apiserver-names=indri \
|
|
# --apiserver-port=6443 --listen-address=0.0.0.0
|
|
|
|
- name: Install minikube via homebrew
|
|
community.general.homebrew:
|
|
name: minikube
|
|
state: present
|
|
|
|
- name: Install kubectl via homebrew
|
|
community.general.homebrew:
|
|
name: kubectl
|
|
state: present
|
|
|
|
- name: Check if minikube cluster exists
|
|
ansible.builtin.command:
|
|
cmd: minikube status --format={% raw %}'{{.Host}}'{% endraw %}
|
|
register: minikube_status
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Start minikube cluster
|
|
ansible.builtin.command:
|
|
cmd: >
|
|
minikube start
|
|
--driver={{ minikube_driver }}
|
|
--container-runtime={{ minikube_container_runtime }}
|
|
--cpus={{ minikube_cpus }}
|
|
--memory={{ minikube_memory }}
|
|
--disk-size={{ minikube_disk_size }}
|
|
{% for name in minikube_apiserver_names %}
|
|
--apiserver-names={{ name }}
|
|
{% endfor %}
|
|
--apiserver-port={{ minikube_apiserver_port }}
|
|
--listen-address={{ minikube_listen_address }}
|
|
register: minikube_start
|
|
changed_when: minikube_start.rc == 0
|
|
failed_when: false # Don't fail - may need manual intervention like podman
|
|
when: minikube_status.rc != 0 or 'Running' not in minikube_status.stdout
|
|
|
|
- name: Check minikube status after start attempt
|
|
ansible.builtin.command:
|
|
cmd: minikube status --format={% raw %}'{{.Host}}'{% endraw %}
|
|
register: minikube_final_status
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Warn if minikube failed to start
|
|
ansible.builtin.debug:
|
|
msg: "WARNING: minikube may not have started properly. Run 'minikube start' manually on indri if needed. Status: {{ minikube_final_status.stdout | default('unknown') }}"
|
|
when: minikube_final_status.rc != 0 or 'Running' not in minikube_final_status.stdout
|
|
|
|
# Configure CRI-O to use zot as pull-through cache
|
|
- name: Copy zot mirror config to temp location
|
|
ansible.builtin.copy:
|
|
src: zot-mirror.conf
|
|
dest: /tmp/zot-mirror.conf
|
|
mode: "0644"
|
|
when: minikube_final_status.rc == 0 and 'Running' in minikube_final_status.stdout
|
|
|
|
- name: Check if zot mirror config exists in minikube
|
|
ansible.builtin.command:
|
|
cmd: minikube ssh --native-ssh=false "cat /etc/containers/registries.conf.d/zot-mirror.conf 2>/dev/null || echo ''"
|
|
register: minikube_existing_zot_config
|
|
changed_when: false
|
|
when: minikube_final_status.rc == 0 and 'Running' in minikube_final_status.stdout
|
|
|
|
- name: Read local zot mirror config
|
|
ansible.builtin.slurp:
|
|
src: /tmp/zot-mirror.conf
|
|
register: minikube_local_zot_config
|
|
when: minikube_final_status.rc == 0 and 'Running' in minikube_final_status.stdout
|
|
|
|
- name: Apply zot mirror config to minikube
|
|
ansible.builtin.shell:
|
|
cmd: |
|
|
set -o pipefail
|
|
cat /tmp/zot-mirror.conf | minikube ssh --native-ssh=false "sudo tee /etc/containers/registries.conf.d/zot-mirror.conf > /dev/null"
|
|
executable: /bin/bash
|
|
changed_when: true
|
|
when:
|
|
- minikube_final_status.rc == 0
|
|
- "'Running' in minikube_final_status.stdout"
|
|
- minikube_existing_zot_config.stdout != (minikube_local_zot_config.content | b64decode)
|
|
notify: Restart CRI-O in minikube
|
|
|
|
- name: Clean up temp config file
|
|
ansible.builtin.file:
|
|
path: /tmp/zot-mirror.conf
|
|
state: absent
|