From 6cab5091eadd1be3e0c866959da21759eb52dfb3 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Sat, 4 Apr 2026 12:04:25 -0700 Subject: [PATCH] Add storage-provisioner health check to minikube Ansible role The storage-provisioner is a bare Pod with no controller. If the node restarts via Docker Desktop (rather than `minikube start`), kubelet restores static pods but bare pods are lost. Detect this and re-run `minikube start` to restore addons. Co-Authored-By: Claude Opus 4.6 (1M context) --- ansible/roles/minikube/tasks/main.yml | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ansible/roles/minikube/tasks/main.yml b/ansible/roles/minikube/tasks/main.yml index c09d420..e79f4de 100644 --- a/ansible/roles/minikube/tasks/main.yml +++ b/ansible/roles/minikube/tasks/main.yml @@ -77,6 +77,37 @@ 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 +# The storage-provisioner is a bare Pod (no controller). If the node restarts +# via Docker Desktop rather than `minikube start`, kubelet brings back static +# pods (apiserver, etcd) but bare pods like storage-provisioner are lost. +# `minikube start` on a running cluster is safe and re-applies all addons. +- name: Check storage-provisioner pod is running + ansible.builtin.command: + cmd: kubectl -n kube-system get pod storage-provisioner -o jsonpath='{.status.phase}' + register: minikube_storage_provisioner + changed_when: false + failed_when: false + when: minikube_final_status.rc == 0 + +- name: Re-run minikube start to restore addons + 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 }} + when: + - minikube_final_status.rc == 0 + - minikube_storage_provisioner.stdout | default('') != 'Running' + changed_when: true + # Configure containerd to use zot registry as pull-through cache # With docker driver, use host.minikube.internal to reach the host # Zot runs on indri:5050 and caches images from docker.io, ghcr.io, quay.io