mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-06 14:47:05 +02:00
Bump all dependencies, many small changes due to new golangci-lint version. Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
// Package util provides utility functions for the dashboard.
|
|
//
|
|
//nolint:revive
|
|
package util
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/grpc/metadata"
|
|
|
|
"github.com/siderolabs/talos/pkg/machinery/client"
|
|
)
|
|
|
|
// NodeContext contains the context.Context for a single node and the node name.
|
|
type NodeContext struct {
|
|
Ctx context.Context //nolint:containedctx
|
|
Node string
|
|
}
|
|
|
|
// NodeContexts returns a list of NodeContexts from the given context.
|
|
//
|
|
// It extracts the node names from the outgoing GRPC context metadata.
|
|
// If the node name is not present in the metadata, context will be returned as-is with an empty node name.
|
|
func NodeContexts(ctx context.Context) []NodeContext {
|
|
md, mdOk := metadata.FromOutgoingContext(ctx)
|
|
if !mdOk {
|
|
return []NodeContext{{Ctx: ctx}}
|
|
}
|
|
|
|
nodeVal := md.Get("node")
|
|
if len(nodeVal) > 0 {
|
|
return []NodeContext{{Ctx: ctx, Node: nodeVal[0]}}
|
|
}
|
|
|
|
nodesVal := md.Get("nodes")
|
|
if len(nodesVal) == 0 {
|
|
return []NodeContext{{Ctx: ctx}}
|
|
}
|
|
|
|
nodeContexts := make([]NodeContext, 0, len(nodesVal))
|
|
|
|
for _, node := range nodesVal {
|
|
nodeContexts = append(nodeContexts, NodeContext{Ctx: client.WithNode(ctx, node), Node: node})
|
|
}
|
|
|
|
return nodeContexts
|
|
}
|