[management] Let embedding binaries extend the command tree (#7483)

The management binary is embedded by downstream builds that override
server construction via SetNewServer, but the cobra command tree itself
was closed: rootCmd is unexported and fully assembled in init, with no
way to attach additional subcommands. Customize hands the built root
command to a caller-supplied function before Execute, so an embedding
binary can add its own commands next to — or under — the built-in ones,
such as extra administrative helpers beneath the existing admin group.
This commit is contained in:
Brad Ison
2026-09-09 15:36:37 +02:00
committed by GitHub
parent 269cbadfeb
commit 27991aab98
2 changed files with 51 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
package cmd
import (
"testing"
"github.com/spf13/cobra"
)
// TestCustomize verifies an embedding binary can extend the command tree: a
// top-level command attached through the hook, and a subcommand attached under
// the built-in admin group, are both resolvable exactly as Execute would
// resolve them.
func TestCustomize(t *testing.T) {
topLevel := &cobra.Command{Use: "some-extra", RunE: func(*cobra.Command, []string) error { return nil }}
nested := &cobra.Command{Use: "cluster", RunE: func(*cobra.Command, []string) error { return nil }}
Customize(func(root *cobra.Command) {
root.AddCommand(topLevel)
for _, c := range root.Commands() {
if c.Name() == "admin" {
c.AddCommand(nested)
return
}
}
t.Fatal("admin command not found in the root tree")
})
t.Cleanup(func() {
rootCmd.RemoveCommand(topLevel)
for _, c := range rootCmd.Commands() {
if c.Name() == "admin" {
c.RemoveCommand(nested)
}
}
})
if found, _, err := rootCmd.Find([]string{"some-extra"}); err != nil || found != topLevel {
t.Fatalf("top-level command not resolvable: found=%v err=%v", found, err)
}
if found, _, err := rootCmd.Find([]string{"admin", "cluster"}); err != nil || found != nested {
t.Fatalf("nested admin subcommand not resolvable: found=%v err=%v", found, err)
}
}