-
+
Visit the Admin Console to configure and install {title}
diff --git a/web/src/components/wizard/InstallationStep.tsx b/web/src/components/wizard/InstallationStep.tsx
index 88cef80578..42f75bc548 100644
--- a/web/src/components/wizard/InstallationStep.tsx
+++ b/web/src/components/wizard/InstallationStep.tsx
@@ -68,7 +68,7 @@ const InstallationStep: React.FC = ({ onNext }) => {
@@ -77,7 +77,7 @@ const InstallationStep: React.FC
= ({ onNext }) => {
{(infraStatusResponse?.components || []).map((component, index) => (
word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ')}
status={component.status?.state}
themeColor={themeColor}
/>
diff --git a/web/src/components/wizard/SetupStep.tsx b/web/src/components/wizard/SetupStep.tsx
index b1908898e6..789c6e7818 100644
--- a/web/src/components/wizard/SetupStep.tsx
+++ b/web/src/components/wizard/SetupStep.tsx
@@ -142,7 +142,7 @@ const SetupStep: React.FC = ({ onNext }) => {
{text.setupTitle}
-
Configure the installation settings.
+
Set up the host for this installation.
{isLoading ? (
diff --git a/web/src/components/wizard/installation/InstallationProgress.tsx b/web/src/components/wizard/installation/InstallationProgress.tsx
index 73e79e1be5..51f3040fa4 100644
--- a/web/src/components/wizard/installation/InstallationProgress.tsx
+++ b/web/src/components/wizard/installation/InstallationProgress.tsx
@@ -13,6 +13,11 @@ const InstallationProgress: React.FC = ({
themeColor,
status
}) => {
+ const displayMessage = () => {
+ if (!currentMessage) return 'Preparing installation…';
+ return status === 'Running' ? `${currentMessage}…` : currentMessage;
+ };
+
return (
@@ -25,7 +30,7 @@ const InstallationProgress: React.FC = ({
/>
- {currentMessage || 'Preparing installation...'}
+ {displayMessage()}
);
diff --git a/web/src/components/wizard/tests/SetupStep.test.tsx b/web/src/components/wizard/tests/SetupStep.test.tsx
index 2ced28379e..b136c74e78 100644
--- a/web/src/components/wizard/tests/SetupStep.test.tsx
+++ b/web/src/components/wizard/tests/SetupStep.test.tsx
@@ -79,7 +79,7 @@ describe("SetupStep", () => {
// Wait for loading to complete
await screen.findByText("Loading configuration...");
- await screen.findByText("Configure the installation settings.");
+ await screen.findByText("Set up the host for the installation.");
// Wait for the linux-setup element to appear
await screen.findByTestId("linux-setup");
@@ -156,7 +156,7 @@ describe("SetupStep", () => {
// Wait for loading to complete
await screen.findByText("Loading configuration...");
- await screen.findByText("Configure the installation settings.");
+ await screen.findByText("Set up the host for the installation.");
// Wait for the linux-setup element to appear
await screen.findByTestId("linux-setup");
@@ -250,7 +250,7 @@ describe("SetupStep", () => {
// Wait for loading to complete
await screen.findByText("Loading configuration...");
- await screen.findByText("Configure the installation settings.");
+ await screen.findByText("Set up the host for the installation.");
// Wait for the linux-setup element to appear
await screen.findByTestId("linux-setup");
From 21eb505250f1d52b2cc3cde699b4666bc4b037b9 Mon Sep 17 00:00:00 2001
From: Alex Parker <7272359+ajp-io@users.noreply.github.com>
Date: Tue, 17 Jun 2025 14:46:14 -0400
Subject: [PATCH 2/7] test fixes
---
.../components/wizard/installation/StatusIndicator.tsx | 2 +-
web/src/components/wizard/tests/InstallationStep.test.tsx | 8 ++++----
web/src/components/wizard/tests/SetupStep.test.tsx | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/web/src/components/wizard/installation/StatusIndicator.tsx b/web/src/components/wizard/installation/StatusIndicator.tsx
index 64374f6a45..08c7dd0662 100644
--- a/web/src/components/wizard/installation/StatusIndicator.tsx
+++ b/web/src/components/wizard/installation/StatusIndicator.tsx
@@ -26,7 +26,7 @@ const StatusIndicator: React.FC = ({ title, status, themeC
case 'Running':
Icon = Loader2;
statusColor = themeColor;
- statusText = 'Installing...';
+ statusText = 'Installing…';
break;
default:
Icon = AlertTriangle;
diff --git a/web/src/components/wizard/tests/InstallationStep.test.tsx b/web/src/components/wizard/tests/InstallationStep.test.tsx
index bc1b54a18b..327fd48561 100644
--- a/web/src/components/wizard/tests/InstallationStep.test.tsx
+++ b/web/src/components/wizard/tests/InstallationStep.test.tsx
@@ -11,7 +11,7 @@ const server = setupServer(
// Mock installation status endpoint
http.get("*/api/install/infra/status", () => {
return HttpResponse.json({
- status: { state: "Running", description: "Installing..." },
+ status: { state: "Running", description: "Installing…" },
components: [
{ name: "Runtime", status: { state: "Pending" } },
{ name: "Disaster Recovery", status: { state: "Pending" } }
@@ -57,11 +57,11 @@ describe("InstallationStep", () => {
expect(screen.getByText("Installing infrastructure components")).toBeInTheDocument();
// Check progress and status indicators
- expect(screen.getByText("Preparing installation...")).toBeInTheDocument();
+ expect(screen.getByText("Preparing installation…")).toBeInTheDocument();
// Wait for progress update
await waitFor(() => {
- expect(screen.getByText("Installing...")).toBeInTheDocument();
+ expect(screen.getByText("Installing…")).toBeInTheDocument();
});
// Verify Runtime component
@@ -121,7 +121,7 @@ describe("InstallationStep", () => {
const drContainer = screen.getByTestId("status-indicator-disaster-recovery");
expect(drContainer).toBeInTheDocument();
expect(within(drContainer).getByTestId("status-title")).toHaveTextContent("Disaster Recovery");
- expect(within(drContainer).getByTestId("status-text")).toHaveTextContent("Installing...");
+ expect(within(drContainer).getByTestId("status-text")).toHaveTextContent("Installing…");
// Next button should still be disabled
expect(screen.getByText("Next: Finish")).toBeDisabled();
diff --git a/web/src/components/wizard/tests/SetupStep.test.tsx b/web/src/components/wizard/tests/SetupStep.test.tsx
index b136c74e78..3c7ca6b1f1 100644
--- a/web/src/components/wizard/tests/SetupStep.test.tsx
+++ b/web/src/components/wizard/tests/SetupStep.test.tsx
@@ -79,7 +79,7 @@ describe("SetupStep", () => {
// Wait for loading to complete
await screen.findByText("Loading configuration...");
- await screen.findByText("Set up the host for the installation.");
+ await screen.findByText("Set up the host for this installation.");
// Wait for the linux-setup element to appear
await screen.findByTestId("linux-setup");
@@ -156,7 +156,7 @@ describe("SetupStep", () => {
// Wait for loading to complete
await screen.findByText("Loading configuration...");
- await screen.findByText("Set up the host for the installation.");
+ await screen.findByText("Set up the host for this installation.");
// Wait for the linux-setup element to appear
await screen.findByTestId("linux-setup");
@@ -250,7 +250,7 @@ describe("SetupStep", () => {
// Wait for loading to complete
await screen.findByText("Loading configuration...");
- await screen.findByText("Set up the host for the installation.");
+ await screen.findByText("Set up the host for this installation.");
// Wait for the linux-setup element to appear
await screen.findByTestId("linux-setup");
From 6f80eadbb7481c5b23203191e657988012aced49 Mon Sep 17 00:00:00 2001
From: Alex Parker <7272359+ajp-io@users.noreply.github.com>
Date: Tue, 17 Jun 2025 15:50:45 -0400
Subject: [PATCH 3/7] ellipsis updates
---
api/internal/managers/infra/install.go | 2 +-
.../wizard/installation/InstallationProgress.tsx | 4 ++--
.../components/wizard/installation/StatusIndicator.tsx | 2 +-
web/src/components/wizard/tests/InstallationStep.test.tsx | 8 ++++----
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/api/internal/managers/infra/install.go b/api/internal/managers/infra/install.go
index d96df50e56..e48c494154 100644
--- a/api/internal/managers/infra/install.go
+++ b/api/internal/managers/infra/install.go
@@ -267,7 +267,7 @@ func (m *infraManager) installAddOns(ctx context.Context, license *kotsv1beta1.L
// if in progress, update the overall status to reflect the current component
if progress.Status.State == types.StateRunning {
- m.setStatusDesc(fmt.Sprintf("%s %s", progress.Status.Description, progress.Name))
+ m.setStatusDesc(fmt.Sprintf("%s %s...", progress.Status.Description, progress.Name))
}
// update the status for the current component
diff --git a/web/src/components/wizard/installation/InstallationProgress.tsx b/web/src/components/wizard/installation/InstallationProgress.tsx
index 51f3040fa4..9de440abf8 100644
--- a/web/src/components/wizard/installation/InstallationProgress.tsx
+++ b/web/src/components/wizard/installation/InstallationProgress.tsx
@@ -14,8 +14,8 @@ const InstallationProgress: React.FC = ({
status
}) => {
const displayMessage = () => {
- if (!currentMessage) return 'Preparing installation…';
- return status === 'Running' ? `${currentMessage}…` : currentMessage;
+ if (!currentMessage) return 'Preparing installation...';
+ return status === 'Running' ? `${currentMessage}` : currentMessage;
};
return (
diff --git a/web/src/components/wizard/installation/StatusIndicator.tsx b/web/src/components/wizard/installation/StatusIndicator.tsx
index 08c7dd0662..64374f6a45 100644
--- a/web/src/components/wizard/installation/StatusIndicator.tsx
+++ b/web/src/components/wizard/installation/StatusIndicator.tsx
@@ -26,7 +26,7 @@ const StatusIndicator: React.FC = ({ title, status, themeC
case 'Running':
Icon = Loader2;
statusColor = themeColor;
- statusText = 'Installing…';
+ statusText = 'Installing...';
break;
default:
Icon = AlertTriangle;
diff --git a/web/src/components/wizard/tests/InstallationStep.test.tsx b/web/src/components/wizard/tests/InstallationStep.test.tsx
index 327fd48561..bc1b54a18b 100644
--- a/web/src/components/wizard/tests/InstallationStep.test.tsx
+++ b/web/src/components/wizard/tests/InstallationStep.test.tsx
@@ -11,7 +11,7 @@ const server = setupServer(
// Mock installation status endpoint
http.get("*/api/install/infra/status", () => {
return HttpResponse.json({
- status: { state: "Running", description: "Installing…" },
+ status: { state: "Running", description: "Installing..." },
components: [
{ name: "Runtime", status: { state: "Pending" } },
{ name: "Disaster Recovery", status: { state: "Pending" } }
@@ -57,11 +57,11 @@ describe("InstallationStep", () => {
expect(screen.getByText("Installing infrastructure components")).toBeInTheDocument();
// Check progress and status indicators
- expect(screen.getByText("Preparing installation…")).toBeInTheDocument();
+ expect(screen.getByText("Preparing installation...")).toBeInTheDocument();
// Wait for progress update
await waitFor(() => {
- expect(screen.getByText("Installing…")).toBeInTheDocument();
+ expect(screen.getByText("Installing...")).toBeInTheDocument();
});
// Verify Runtime component
@@ -121,7 +121,7 @@ describe("InstallationStep", () => {
const drContainer = screen.getByTestId("status-indicator-disaster-recovery");
expect(drContainer).toBeInTheDocument();
expect(within(drContainer).getByTestId("status-title")).toHaveTextContent("Disaster Recovery");
- expect(within(drContainer).getByTestId("status-text")).toHaveTextContent("Installing…");
+ expect(within(drContainer).getByTestId("status-text")).toHaveTextContent("Installing...");
// Next button should still be disabled
expect(screen.getByText("Next: Finish")).toBeDisabled();
From cb50122be125ecc624b08c02f7a254edc5d72401 Mon Sep 17 00:00:00 2001
From: Alex Parker <7272359+ajp-io@users.noreply.github.com>
Date: Tue, 17 Jun 2025 15:54:50 -0400
Subject: [PATCH 4/7] fixes
---
web/src/components/wizard/CompletionStep.tsx | 6 ++----
.../wizard/installation/InstallationProgress.tsx | 7 +------
2 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/web/src/components/wizard/CompletionStep.tsx b/web/src/components/wizard/CompletionStep.tsx
index 536eee8466..0faa4f1d3a 100644
--- a/web/src/components/wizard/CompletionStep.tsx
+++ b/web/src/components/wizard/CompletionStep.tsx
@@ -6,10 +6,8 @@ import { useBranding } from "../../contexts/BrandingContext";
import { CheckCircle, ExternalLink } from "lucide-react";
const CompletionStep: React.FC = () => {
- const { config } = useConfig();
+ const { config, prototypeSettings } = useConfig();
const { title } = useBranding();
- const { prototypeSettings } = useConfig();
- const themeColor = prototypeSettings.themeColor;
return (
@@ -17,7 +15,7 @@ const CompletionStep: React.FC = () => {
-
+
Visit the Admin Console to configure and install {title}
diff --git a/web/src/components/wizard/installation/InstallationProgress.tsx b/web/src/components/wizard/installation/InstallationProgress.tsx
index 9de440abf8..73e79e1be5 100644
--- a/web/src/components/wizard/installation/InstallationProgress.tsx
+++ b/web/src/components/wizard/installation/InstallationProgress.tsx
@@ -13,11 +13,6 @@ const InstallationProgress: React.FC = ({
themeColor,
status
}) => {
- const displayMessage = () => {
- if (!currentMessage) return 'Preparing installation...';
- return status === 'Running' ? `${currentMessage}` : currentMessage;
- };
-
return (
@@ -30,7 +25,7 @@ const InstallationProgress: React.FC = ({
/>
- {displayMessage()}
+ {currentMessage || 'Preparing installation...'}
);
From a0850863b01bfdc851af09d05776daeed6d6f911 Mon Sep 17 00:00:00 2001
From: Alex Parker <7272359+ajp-io@users.noreply.github.com>
Date: Tue, 17 Jun 2025 16:22:11 -0400
Subject: [PATCH 5/7] ellipses everywhere
---
api/internal/managers/infra/install.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/api/internal/managers/infra/install.go b/api/internal/managers/infra/install.go
index e48c494154..48c6110e33 100644
--- a/api/internal/managers/infra/install.go
+++ b/api/internal/managers/infra/install.go
@@ -179,7 +179,7 @@ func (m *infraManager) installK0s(ctx context.Context, rc runtimeconfig.RuntimeC
}
}()
- m.setStatusDesc(fmt.Sprintf("Installing %s", componentName))
+ m.setStatusDesc(fmt.Sprintf("Installing %s...", componentName))
logFn := m.logFn("k0s")
@@ -209,7 +209,7 @@ func (m *infraManager) installK0s(ctx context.Context, rc runtimeconfig.RuntimeC
return nil, fmt.Errorf("create kube client: %w", err)
}
- m.setStatusDesc(fmt.Sprintf("Waiting for %s", componentName))
+ m.setStatusDesc(fmt.Sprintf("Waiting for %s...", componentName))
logFn("waiting for node to be ready")
if err := m.waitForNode(ctx, kcli); err != nil {
@@ -358,7 +358,7 @@ func (m *infraManager) installExtensions(ctx context.Context, hcli helm.Client)
}
}()
- m.setStatusDesc(fmt.Sprintf("Installing %s", componentName))
+ m.setStatusDesc(fmt.Sprintf("Installing %s...", componentName))
logFn := m.logFn("extensions")
logFn("installing extensions")
From f13ef0771d3535a1f3343aeb32b1ca2c5ed1a05d Mon Sep 17 00:00:00 2001
From: Alex Parker <7272359+ajp-io@users.noreply.github.com>
Date: Tue, 17 Jun 2025 20:30:15 -0400
Subject: [PATCH 6/7] fix merge conflict
---
cmd/installer/cli/install.go | 22 +++++++++----------
e2e/scripts/restore-installation-airgap.exp | 2 +-
e2e/scripts/restore-installation.exp | 2 +-
.../restore-multi-node-airgap-phase1.exp | 2 +-
e2e/scripts/restore-multi-node-phase1.exp | 2 +-
e2e/scripts/resume-restore.exp | 2 +-
6 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/cmd/installer/cli/install.go b/cmd/installer/cli/install.go
index 853ddfbc23..b729732e3e 100644
--- a/cmd/installer/cli/install.go
+++ b/cmd/installer/cli/install.go
@@ -779,7 +779,7 @@ func initializeInstall(ctx context.Context, flags InstallCmdFlags, rc runtimecon
func installAndStartCluster(ctx context.Context, flags InstallCmdFlags, rc runtimeconfig.RuntimeConfig, mutate func(*k0sv1beta1.ClusterConfig) error) (*k0sv1beta1.ClusterConfig, error) {
loading := spinner.Start()
- loading.Infof("Installing node")
+ loading.Infof("Installing runtime")
logrus.Debugf("creating k0s configuration file")
eucfg, err := helpers.ParseEndUserConfig(flags.overrides)
@@ -789,36 +789,36 @@ func installAndStartCluster(ctx context.Context, flags InstallCmdFlags, rc runti
cfg, err := k0s.WriteK0sConfig(ctx, flags.networkInterface, flags.airgapBundle, rc.PodCIDR(), rc.ServiceCIDR(), eucfg, mutate)
if err != nil {
- loading.ErrorClosef("Failed to install node")
+ loading.ErrorClosef("Failed to install runtime")
return nil, fmt.Errorf("create config file: %w", err)
}
logrus.Debugf("creating systemd unit files")
if err := hostutils.CreateSystemdUnitFiles(ctx, logrus.StandardLogger(), rc, false); err != nil {
- loading.ErrorClosef("Failed to install node")
+ loading.ErrorClosef("Failed to install runtime")
return nil, fmt.Errorf("create systemd unit files: %w", err)
}
logrus.Debugf("installing k0s")
if err := k0s.Install(rc); err != nil {
- loading.ErrorClosef("Failed to install node")
+ loading.ErrorClosef("Failed to install runtime")
return nil, fmt.Errorf("install cluster: %w", err)
}
logrus.Debugf("waiting for k0s to be ready")
if err := k0s.WaitForK0s(); err != nil {
- loading.ErrorClosef("Failed to install node")
+ loading.ErrorClosef("Failed to install runtime")
return nil, fmt.Errorf("wait for k0s: %w", err)
}
- loading.Infof("Waiting for node")
- logrus.Debugf("waiting for node to be ready")
+ loading.Infof("Waiting for runtime")
+ logrus.Debugf("waiting for runtime to be ready")
if err := waitForNode(ctx); err != nil {
- loading.ErrorClosef("Node failed to become ready")
- return nil, fmt.Errorf("wait for node: %w", err)
+ loading.ErrorClosef("Runtime failed to become ready")
+ return nil, fmt.Errorf("wait for runtime: %w", err)
}
- loading.Closef("Node is ready")
+ loading.Closef("Runtime is ready")
return cfg, nil
}
@@ -834,7 +834,7 @@ func installAddons(ctx context.Context, kcli client.Client, mcli metadata.Interf
loading = spinner.Start()
loading.Infof("Installing %s", progress.Name)
case apitypes.StateSucceeded:
- loading.Closef("%s is ready", progress.Name)
+ loading.Closef("%s is ready", strings.ToUpper(progress.Name[:1])+progress.Name[1:])
case apitypes.StateFailed:
loading.ErrorClosef("Failed to install %s", progress.Name)
}
diff --git a/e2e/scripts/restore-installation-airgap.exp b/e2e/scripts/restore-installation-airgap.exp
index 6b9199094a..e5c7493556 100755
--- a/e2e/scripts/restore-installation-airgap.exp
+++ b/e2e/scripts/restore-installation-airgap.exp
@@ -92,7 +92,7 @@ expect {
}
expect {
- -timeout 300 "Disaster Recovery is ready" {}
+ -timeout 300 "Disaster recovery is ready" {}
timeout {
puts "\n\nFailed to wait for Disaster Recovery to be ready."
exit 1
diff --git a/e2e/scripts/restore-installation.exp b/e2e/scripts/restore-installation.exp
index 2dd8877c7d..a1b80b46b1 100755
--- a/e2e/scripts/restore-installation.exp
+++ b/e2e/scripts/restore-installation.exp
@@ -92,7 +92,7 @@ expect {
}
expect {
- -timeout 300 "Disaster Recovery is ready" {}
+ -timeout 300 "Disaster recovery is ready" {}
timeout {
puts "\n\nFailed to wait for Disaster Recovery to be ready."
exit 1
diff --git a/e2e/scripts/restore-multi-node-airgap-phase1.exp b/e2e/scripts/restore-multi-node-airgap-phase1.exp
index 8d359cfbbc..f2255b7077 100755
--- a/e2e/scripts/restore-multi-node-airgap-phase1.exp
+++ b/e2e/scripts/restore-multi-node-airgap-phase1.exp
@@ -80,7 +80,7 @@ expect {
}
expect {
- -timeout 300 "Disaster Recovery is ready" {}
+ -timeout 300 "Disaster recovery is ready" {}
timeout {
puts "\n\nFailed to wait for Disaster Recovery to be ready."
exit 1
diff --git a/e2e/scripts/restore-multi-node-phase1.exp b/e2e/scripts/restore-multi-node-phase1.exp
index 4408a281db..28fd183c6c 100755
--- a/e2e/scripts/restore-multi-node-phase1.exp
+++ b/e2e/scripts/restore-multi-node-phase1.exp
@@ -80,7 +80,7 @@ expect {
}
expect {
- -timeout 300 "Disaster Recovery is ready" {}
+ -timeout 300 "Disaster recovery is ready" {}
timeout {
puts "\n\nFailed to wait for Disaster Recovery to be ready."
exit 1
diff --git a/e2e/scripts/resume-restore.exp b/e2e/scripts/resume-restore.exp
index cdf667eff7..23944b2d8a 100755
--- a/e2e/scripts/resume-restore.exp
+++ b/e2e/scripts/resume-restore.exp
@@ -113,7 +113,7 @@ expect {
}
expect {
- -timeout 300 "Disaster Recovery is ready" {}
+ -timeout 300 "Disaster recovery is ready" {}
timeout {
puts "\n\nFailed to wait for Disaster Recovery to be ready."
exit 1
From 7ebbfcd43308c147ec40ad5a2f9074e149e891e6 Mon Sep 17 00:00:00 2001
From: Alex Parker <7272359+ajp-io@users.noreply.github.com>
Date: Tue, 17 Jun 2025 21:04:03 -0400
Subject: [PATCH 7/7] fix casing in dr is ready
---
cmd/installer/cli/restore.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/installer/cli/restore.go b/cmd/installer/cli/restore.go
index 5b08701af2..b150650466 100644
--- a/cmd/installer/cli/restore.go
+++ b/cmd/installer/cli/restore.go
@@ -462,7 +462,7 @@ func installAddonsForRestore(ctx context.Context, kcli client.Client, mcli metad
loading = spinner.Start()
loading.Infof("Installing %s", progress.Name)
case apitypes.StateSucceeded:
- loading.Closef("%s is ready", progress.Name)
+ loading.Closef("%s is ready", strings.ToUpper(progress.Name[:1])+progress.Name[1:])
case apitypes.StateFailed:
loading.ErrorClosef("Failed to install %s", progress.Name)
}