From a026a9a7fbe6fdfae0f44756720b33f7278fd865 Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Sat, 3 May 2025 22:59:47 +0200 Subject: [PATCH] hsic: more helper methods Signed-off-by: Kristoffer Dalby --- integration/control.go | 2 ++ integration/hsic/hsic.go | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/integration/control.go b/integration/control.go index 9dfe150c..22e7552b 100644 --- a/integration/control.go +++ b/integration/control.go @@ -21,6 +21,8 @@ type ControlServer interface { CreateUser(user string) (*v1.User, error) CreateAuthKey(user uint64, reusable bool, ephemeral bool) (*v1.PreAuthKey, error) ListNodes(users ...string) ([]*v1.Node, error) + NodesByUser() (map[string][]*v1.Node, error) + NodesByName() (map[string]*v1.Node, error) ListUsers() ([]*v1.User, error) MapUsers() (map[string]*v1.User, error) ApproveRoutes(uint64, []netip.Prefix) (*v1.Node, error) diff --git a/integration/hsic/hsic.go b/integration/hsic/hsic.go index 27e18697..e6762cf0 100644 --- a/integration/hsic/hsic.go +++ b/integration/hsic/hsic.go @@ -819,6 +819,38 @@ func (t *HeadscaleInContainer) ListNodes( return ret, nil } +func (t *HeadscaleInContainer) NodesByUser() (map[string][]*v1.Node, error) { + nodes, err := t.ListNodes() + if err != nil { + return nil, err + } + + var userMap map[string][]*v1.Node + for _, node := range nodes { + if _, ok := userMap[node.User.Name]; !ok { + mak.Set(&userMap, node.User.Name, []*v1.Node{node}) + } else { + userMap[node.User.Name] = append(userMap[node.User.Name], node) + } + } + + return userMap, nil +} + +func (t *HeadscaleInContainer) NodesByName() (map[string]*v1.Node, error) { + nodes, err := t.ListNodes() + if err != nil { + return nil, err + } + + var nameMap map[string]*v1.Node + for _, node := range nodes { + mak.Set(&nameMap, node.GetName(), node) + } + + return nameMap, nil +} + // ListUsers returns a list of users from Headscale. func (t *HeadscaleInContainer) ListUsers() ([]*v1.User, error) { command := []string{"headscale", "users", "list", "--output", "json"} @@ -973,7 +1005,7 @@ func (t *HeadscaleInContainer) ApproveRoutes(id uint64, routes []netip.Prefix) ( "headscale", "nodes", "approve-routes", "--output", "json", "--identifier", strconv.FormatUint(id, 10), - fmt.Sprintf("--routes=%q", strings.Join(util.PrefixesToString(routes), ",")), + fmt.Sprintf("--routes=%s", strings.Join(util.PrefixesToString(routes), ",")), } result, _, err := dockertestutil.ExecuteCommand(