metropolis/node: add version to status
This implements submitting the Node's version to its' Status report to
the control plane.
This version is then displayed to the user in metroctl.
Change-Id: I70eadb9a7001b6e50931245e8a6274da2fbdc5bc
Reviewed-on: https://review.monogon.dev/c/monogon/+/2334
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/cli/metroctl/BUILD.bazel b/metropolis/cli/metroctl/BUILD.bazel
index e3044d5..40d97b7 100644
--- a/metropolis/cli/metroctl/BUILD.bazel
+++ b/metropolis/cli/metroctl/BUILD.bazel
@@ -51,6 +51,7 @@
"//metropolis/pkg/logtree",
"//metropolis/proto/api",
"//metropolis/proto/common",
+ "//version",
"@com_github_adrg_xdg//:xdg",
"@com_github_spf13_cobra//:cobra",
"@io_k8s_apimachinery//pkg/apis/meta/v1:meta",
diff --git a/metropolis/cli/metroctl/table_node.go b/metropolis/cli/metroctl/table_node.go
index 07f994c..baa8776 100644
--- a/metropolis/cli/metroctl/table_node.go
+++ b/metropolis/cli/metroctl/table_node.go
@@ -9,6 +9,7 @@
"source.monogon.dev/metropolis/node/core/identity"
apb "source.monogon.dev/metropolis/proto/api"
cpb "source.monogon.dev/metropolis/proto/common"
+ "source.monogon.dev/version"
)
func nodeEntry(n *apb.Node) clitable.Entry {
@@ -49,6 +50,10 @@
}
res.Add("tpm", tpm)
+ if n.Status.Version != nil {
+ res.Add("version", version.Semver(n.Status.Version))
+ }
+
tshs := n.TimeSinceHeartbeat.GetSeconds()
res.Add("heartbeat", fmt.Sprintf("%ds", tshs))
diff --git a/metropolis/cli/metroctl/test/BUILD.bazel b/metropolis/cli/metroctl/test/BUILD.bazel
index 382c73f..36f5a2d 100644
--- a/metropolis/cli/metroctl/test/BUILD.bazel
+++ b/metropolis/cli/metroctl/test/BUILD.bazel
@@ -1,5 +1,7 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
+# TODO(q3k): clean this up to just a go_test.
+
go_test(
name = "metroctl_test",
srcs = ["test.go"],
@@ -16,6 +18,8 @@
"//metropolis/pkg/cmd",
"//metropolis/test/launch/cluster",
"//metropolis/test/util",
+ "//metropolis/version",
+ "//version",
],
)
@@ -29,5 +33,7 @@
"//metropolis/pkg/cmd",
"//metropolis/test/launch/cluster",
"//metropolis/test/util",
+ "//metropolis/version",
+ "//version",
],
)
diff --git a/metropolis/cli/metroctl/test/test.go b/metropolis/cli/metroctl/test/test.go
index 0145cfe..969b4cc 100644
--- a/metropolis/cli/metroctl/test/test.go
+++ b/metropolis/cli/metroctl/test/test.go
@@ -15,6 +15,8 @@
"source.monogon.dev/metropolis/pkg/cmd"
"source.monogon.dev/metropolis/test/launch/cluster"
"source.monogon.dev/metropolis/test/util"
+ mversion "source.monogon.dev/metropolis/version"
+ "source.monogon.dev/version"
)
// resolveMetroctl resolves metroctl filesystem path. It will return a correct
@@ -238,10 +240,10 @@
line := scanner.Text()
t.Logf("Line: %q", line)
- var onid, ostate, onaddr, onstatus, onroles, ontpm string
+ var onid, ostate, onaddr, onstatus, onroles, ontpm, onver string
var ontimeout int
- _, err = fmt.Sscanf(line, "%s%s%s%s%s%s%ds", &onid, &ostate, &onaddr, &onstatus, &onroles, &ontpm, &ontimeout)
+ _, err = fmt.Sscanf(line, "%s%s%s%s%s%s%s%ds", &onid, &ostate, &onaddr, &onstatus, &onroles, &ontpm, &onver, &ontimeout)
if err != nil {
return fmt.Errorf("while parsing metroctl output: %v", err)
}
@@ -263,6 +265,9 @@
if want, got := "yes", ontpm; want != got {
return fmt.Errorf("node tpm mismatch: wanted %q, got %q", want, got)
}
+ if want, got := version.Semver(mversion.Version), onver; want != got {
+ return fmt.Errorf("node version mismatch: wanted %q, got %q", want, got)
+ }
if ontimeout < 0 || ontimeout > 30 {
return fmt.Errorf("node timeout mismatch")
}