diff --git a/internal/bootstrap/bootstrap.go b/internal/bootstrap/bootstrap.go index 1cf9c54..ca40a17 100644 --- a/internal/bootstrap/bootstrap.go +++ b/internal/bootstrap/bootstrap.go @@ -77,6 +77,9 @@ func (r Runner) Run() error { if err := utils.RunCommandInDir(generatedDir, "talosctl", "bootstrap", "--talosconfig=./clusterconfig/talosconfig", "--endpoints="+r.Config.Talos.BootstrapEndpoint, "--nodes="+r.Config.Talos.BootstrapNode); err != nil { return err } + if err := utils.RunCommandInDir(generatedDir, "talosctl", "health", "--talosconfig=./clusterconfig/talosconfig", "--endpoints="+r.Config.Talos.BootstrapEndpoint, "--nodes="+r.Config.Talos.BootstrapNode, "--wait-timeout=2m"); err != nil { + return err + } if err := utils.RunCommandInDir(generatedDir, "talosctl", "kubeconfig", "--talosconfig=./clusterconfig/talosconfig", "--nodes="+r.Config.Talos.KubeconfigNode, "."); err != nil { return err } @@ -93,10 +96,10 @@ func waitForTalosReboot(dir string, cfg config.Config) error { deadline := time.Now().Add(5 * time.Minute) offline := false for time.Now().Before(deadline) { - err := utils.RunCommandQuietInDir(dir, "talosctl", "get", "machinestatus", "--talosconfig=./clusterconfig/talosconfig", "--endpoints="+cfg.Talos.BootstrapEndpoint, "--nodes="+cfg.Talos.BootstrapNode) + output, err := utils.RunCommandQuietOutputInDir(dir, "talosctl", "get", "machinestatus", "--output=json", "--talosconfig=./clusterconfig/talosconfig", "--endpoints="+cfg.Talos.BootstrapEndpoint, "--nodes="+cfg.Talos.BootstrapNode) if err != nil { offline = true - } else if offline { + } else if offline && strings.Contains(string(output), `"stage": "running"`) { return nil } time.Sleep(2 * time.Second) diff --git a/internal/utils/helpers.go b/internal/utils/helpers.go index 6626618..f29946f 100644 --- a/internal/utils/helpers.go +++ b/internal/utils/helpers.go @@ -44,10 +44,10 @@ func RunCommandInDir(dir string, name string, args ...string) error { return cmd.Run() } -func RunCommandQuietInDir(dir string, name string, args ...string) error { +func RunCommandQuietOutputInDir(dir string, name string, args ...string) ([]byte, error) { cmd := exec.Command(name, args...) cmd.Dir = dir - return cmd.Run() + return cmd.Output() } func RunCommandOutput(name string, args ...string) ([]byte, error) {