···691691692692 label := string(labelAttr[0].Value)
693693694694+ // Skip metadata objects when listing secrets
695695+ if strings.HasSuffix(label, metadataKeySuffix) {
696696+ continue
697697+ }
698698+694699 // Extract the base path (remove key suffix)
695700 path := label
696701 if strings.Contains(label, "/") {
+7-7
internal/mirror/manager.go
···32323333// AgentManagerInterface defines the interface for HSM agent management used by mirror
3434type AgentManagerInterface interface {
3535- CreateSingleGRPCClient(ctx context.Context, deviceName, namespace string, logger logr.Logger) (hsm.Client, error)
3535+ CreateGRPCClient(ctx context.Context, deviceName, namespace string, logger logr.Logger) (hsm.Client, error)
3636}
37373838// MirrorManager handles multi-device HSM mirroring and conflict resolution
···127127 logger.Info("Checking device for secrets", "device", deviceName, "secretCount", len(secretPaths))
128128129129 // Create gRPC client for this device (agents are in operator namespace)
130130- grpcClient, err := mm.agentManager.CreateSingleGRPCClient(ctx, deviceName, operatorNamespace, logger)
130130+ grpcClient, err := mm.agentManager.CreateGRPCClient(ctx, deviceName, operatorNamespace, logger)
131131 if err != nil {
132132 logger.Error(err, "Failed to create gRPC client", "device", deviceName)
133133 // Mark all secrets as having an error on this device
···527527528528// readSecretWithMetadata reads both secret data and metadata from a device
529529func (mm *MirrorManager) readSecretWithMetadata(ctx context.Context, deviceName, secretPath, namespace string, logger logr.Logger) (hsm.SecretData, *hsm.SecretMetadata, error) {
530530- grpcClient, err := mm.agentManager.CreateSingleGRPCClient(ctx, deviceName, namespace, logger)
530530+ grpcClient, err := mm.agentManager.CreateGRPCClient(ctx, deviceName, namespace, logger)
531531 if err != nil {
532532 return nil, nil, fmt.Errorf("failed to create gRPC client: %w", err)
533533 }
···559559560560// writeSecretWithMetadata writes both secret data and metadata to a device
561561func (mm *MirrorManager) writeSecretWithMetadata(ctx context.Context, deviceName, secretPath string, data hsm.SecretData, metadata *hsm.SecretMetadata, namespace string, logger logr.Logger) error {
562562- grpcClient, err := mm.agentManager.CreateSingleGRPCClient(ctx, deviceName, namespace, logger)
562562+ grpcClient, err := mm.agentManager.CreateGRPCClient(ctx, deviceName, namespace, logger)
563563 if err != nil {
564564 return fmt.Errorf("failed to create gRPC client: %w", err)
565565 }
···583583584584// writeMetadataOnly updates only the metadata for an existing secret
585585func (mm *MirrorManager) writeMetadataOnly(ctx context.Context, deviceName, secretPath string, metadata *hsm.SecretMetadata, namespace string, logger logr.Logger) error {
586586- grpcClient, err := mm.agentManager.CreateSingleGRPCClient(ctx, deviceName, namespace, logger)
586586+ grpcClient, err := mm.agentManager.CreateGRPCClient(ctx, deviceName, namespace, logger)
587587 if err != nil {
588588 return fmt.Errorf("failed to create gRPC client: %w", err)
589589 }
···688688 for _, deviceName := range devices {
689689 deviceLogger := logger.WithValues("device", deviceName)
690690691691- hsmClient, err := mm.agentManager.CreateSingleGRPCClient(ctx, deviceName, operatorNamespace, deviceLogger)
691691+ hsmClient, err := mm.agentManager.CreateGRPCClient(ctx, deviceName, operatorNamespace, deviceLogger)
692692 if err != nil {
693693 deviceLogger.Info("Failed to connect to device for discovery, skipping", "error", err)
694694 continue
···767767 if len(devices) > 0 {
768768 // Try to connect to at least one device to verify agents are actually ready
769769 for _, deviceName := range devices {
770770- grpcClient, err := mm.agentManager.CreateSingleGRPCClient(ctx, deviceName, mm.operatorNamespace, logger)
770770+ grpcClient, err := mm.agentManager.CreateGRPCClient(ctx, deviceName, mm.operatorNamespace, logger)
771771 if err != nil {
772772 logger.V(1).Info("Agent not ready yet", "device", deviceName, "error", err)
773773 continue
+1-1
internal/mirror/manager_test.go
···3232// MockAgentManager is a mock implementation of AgentManagerInterface for testing
3333type MockAgentManager struct{}
34343535-func (m *MockAgentManager) CreateSingleGRPCClient(ctx context.Context, deviceName, namespace string, logger logr.Logger) (hsm.Client, error) {
3535+func (m *MockAgentManager) CreateGRPCClient(ctx context.Context, deviceName, namespace string, logger logr.Logger) (hsm.Client, error) {
3636 // Return a mock client for testing
3737 return hsm.NewMockClient(), nil
3838}
+1-1
internal/modes/manager/manager.go
···331331332332 // Start API server if enabled
333333 if enableAPI {
334334- apiServer := api.NewServer(mgr.GetClient(), agentManager, ctrl.Log.WithName("api"))
334334+ apiServer := api.NewServer(mgr.GetClient(), agentManager, operatorNamespace, ctrl.Log.WithName("api"))
335335336336 // Start API server in a separate goroutine
337337 go func() {