@@ -148,10 +148,8 @@ class Kubernetes::Installer
148148 log_line " Waiting for the control plane to be ready..." , log_prefix: " Instance #{ first_master.name } "
149149 sleep 10 .seconds unless /No change detected/ =~ output
150150
151- kubeconfig_manager.save_kubeconfig(masters, first_master, load_balancer)
152- sleep 5 .seconds
153-
154- wait_for_control_plane
151+ # Save kubeconfig and validate the first master is working properly
152+ validate_first_master_setup!
155153 end
156154
157155 private def deploy_to_master (instance : Hetzner ::Instance )
@@ -187,6 +185,35 @@ class Kubernetes::Installer
187185 end
188186 end
189187
188+ private def validate_first_master_setup!
189+ # Determine master terminology based on cluster size
190+ master_terminology = masters.size > 1 ? " first master" : " master"
191+ log_prefix = masters.size > 1 ? " First Master Validation" : " Master Validation"
192+
193+ begin
194+ # Save kubeconfig first
195+ kubeconfig_manager.save_kubeconfig(masters, first_master, load_balancer)
196+ sleep 5 .seconds
197+
198+ # Validate the master setup using existing wait_for_control_plane method
199+ log_line " Validating #{ master_terminology } setup..." , log_prefix: " Instance #{ first_master.name } "
200+
201+ wait_for_control_plane
202+
203+ log_line " ✅ #{ master_terminology.capitalize } validation successful" , log_prefix: log_prefix
204+
205+ rescue ex : Exception | Tasker ::Timeout
206+ error_message = ex.is_a?(Tasker ::Timeout ) ? " Timeout waiting for control plane to be ready" : ex.message
207+ log_line " ❌ Critical error during #{ master_terminology } validation: #{ error_message } " , log_prefix: log_prefix
208+ log_line " This indicates a problem with the configuration affecting the #{ master_terminology } ." , log_prefix: log_prefix
209+ if masters.size > 1
210+ log_line " Aborting early to avoid affecting remaining masters." , log_prefix: log_prefix
211+ end
212+ log_line " Please check your configuration and try again." , log_prefix: log_prefix
213+ exit 1
214+ end
215+ end
216+
190217 private def first_master : Hetzner ::Instance
191218 @first_master ||= begin
192219 token = K3s .k3s_token(settings, masters)
0 commit comments