Skip to content

Commit 5992d4a

Browse files
authored
Merge pull request #635 from vitobotta:abort-if-first-master-fails
Update version to 2.3.7
2 parents 9cca0da + 1612715 commit 5992d4a

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

src/hetzner-k3s.cr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require "./cluster/run"
1010

1111
module Hetzner::K3s
1212
class CLI < Admiral::Command
13-
VERSION = "2.3.6"
13+
VERSION = "2.3.7"
1414

1515
def self.print_banner
1616
puts " _ _ _ _____ ".colorize(:green)

src/kubernetes/installer.cr

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)