···33# To re-generate a bundle for another specific version without changing the standard setup, you can:
44# - use the VERSION as arg of the bundle target (e.g make bundle VERSION=0.0.2)
55# - use environment variables to overwrite this value (e.g export VERSION=0.0.2)
66-VERSION ?= 0.6.35
66+VERSION ?= 0.6.36
7788# CHANNELS define the bundle channels used in the bundle.
99# Add a new line here if you would like to change its default config. (E.g CHANNELS = "candidate,fast,stable")
+3-3
cmd/hsm-operator/main.go
···5050 i := 0
5151 for i < len(args) {
5252 arg := args[i]
5353- if strings.HasPrefix(arg, "--mode=") {
5454- modeArg = strings.TrimPrefix(arg, "--mode=")
5353+ if after, ok := strings.CutPrefix(arg, "--mode="); ok {
5454+ modeArg = after
5555 globalArgs = append(globalArgs, arg)
5656 i++
5757 } else if arg == "--mode" && i+1 < len(args) {
···126126 os.Exit(1)
127127 }
128128 case "agent":
129129- if err := agent.Run(modeSpecificArgs); err != nil {
129129+ if err := agent.Run(modeSpecificArgs, logLevel); err != nil {
130130 setupLog.Error(err, "Agent mode failed")
131131 os.Exit(1)
132132 }
+2-2
helm/hsm-secrets-operator/Chart.yaml
···22name: hsm-secrets-operator
33description: A Kubernetes operator that bridges Pico HSM binary data storage with Kubernetes Secrets
44type: application
55-version: 0.6.35
66-appVersion: v0.6.35
55+version: 0.6.36
66+appVersion: v0.6.36
77icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/kubernetes/icon/color/kubernetes-icon-color.svg
88home: https://github.com/evanjarrett/hsm-secrets-operator
99sources:
+14-6
internal/agent/pcscd_manager.go
···3434 ctx context.Context
3535 cancel context.CancelFunc
3636 logger logr.Logger
3737+ debug bool // Enable pcscd debug output (-d flag)
3738}
38393940// NewPCSCDManager creates a new PCSCD manager instance.
4040-func NewPCSCDManager(logger logr.Logger) *PCSCDManager {
4141+// If debug is true, pcscd will be started with -d flag for verbose output.
4242+func NewPCSCDManager(logger logr.Logger, debug bool) *PCSCDManager {
4143 ctx, cancel := context.WithCancel(context.Background())
4244 return &PCSCDManager{
4345 ctx: ctx,
4446 cancel: cancel,
4547 logger: logger.WithName("pcscd-manager"),
4848+ debug: debug,
4649 }
4750}
4851···6366 p.logger.Error(err, "Failed to create runtime directory", "dir", dir)
6467 return fmt.Errorf("failed to create runtime directory %s: %w", dir, err)
6568 }
6666- p.logger.V(1).Info("Runtime directory ready", "dir", dir)
6969+ p.logger.Info("Runtime directory ready", "dir", dir)
6770 }
68716972 // Clean up stale socket file from previous runs
···7376 p.logger.Error(err, "Failed to remove stale socket", "path", socketPath)
7477 return fmt.Errorf("failed to remove stale socket %s: %w", socketPath, err)
7578 }
7676- p.logger.V(1).Info("Cleaned up stale socket", "path", socketPath)
7979+ p.logger.Info("Cleaned up stale socket", "path", socketPath)
77807881 // Start pcscd with:
7982 // -f: foreground mode (don't daemonize)
8080- // -d: debug output (helps troubleshooting)
8383+ // -d: debug output (conditional on debug flag)
8184 // --disable-polkit: disable PolicyKit (no D-Bus in container)
8282- p.cmd = exec.CommandContext(p.ctx, "/usr/sbin/pcscd", "-f", "-d", "--disable-polkit")
8585+ args := []string{"-f", "--disable-polkit"}
8686+ if p.debug {
8787+ args = append(args, "-d")
8888+ p.logger.Info("Starting pcscd with debug output enabled")
8989+ }
9090+ p.cmd = exec.CommandContext(p.ctx, "/usr/sbin/pcscd", args...)
83918492 // Pipe output to parent process for centralized logging
8593 p.cmd.Stdout = os.Stdout
···169177 // /var/run/pcscd is the legacy path (symlink on normal systems, but not in FROM scratch)
170178 socketPaths := []string{"/run/pcscd/pcscd.comm", "/var/run/pcscd/pcscd.comm"}
171179172172- p.logger.V(1).Info("Waiting for pcscd to be ready", "paths", socketPaths)
180180+ p.logger.Info("Waiting for pcscd to be ready", "paths", socketPaths)
173181174182 for i := range maxAttempts {
175183 // Check if the socket exists at either location
+5-5
internal/agent/pcscd_manager_test.go
···29293030func TestNewPCSCDManager(t *testing.T) {
3131 logger := zap.New(zap.UseDevMode(true))
3232- mgr := NewPCSCDManager(logger)
3232+ mgr := NewPCSCDManager(logger, false)
33333434 if mgr == nil {
3535 t.Fatal("NewPCSCDManager returned nil")
···6969func TestPCSCDManager_MultipleStartAttempts(t *testing.T) {
7070 // Test that calling Start() multiple times fails appropriately
7171 logger := zap.New(zap.UseDevMode(true))
7272- mgr := NewPCSCDManager(logger)
7272+ mgr := NewPCSCDManager(logger, false)
73737474 // Mock the cmd to prevent actual pcscd start
7575 // In real implementation, we'd need dependency injection or interface
···9494func TestPCSCDManager_StopWithoutStart(t *testing.T) {
9595 // Test that Stop() is safe to call even if Start() was never called
9696 logger := zap.New(zap.UseDevMode(true))
9797- mgr := NewPCSCDManager(logger)
9797+ mgr := NewPCSCDManager(logger, false)
98989999 // Should not panic or error
100100 err := mgr.Stop()
···106106func TestPCSCDManager_ContextCancellation(t *testing.T) {
107107 // Test that cancelling the context affects the manager
108108 logger := zap.New(zap.UseDevMode(true))
109109- mgr := NewPCSCDManager(logger)
109109+ mgr := NewPCSCDManager(logger, false)
110110111111 // Verify context is not cancelled initially
112112 select {
···153153 }
154154155155 logger := getPCSCDTestLogger()
156156- mgr := NewPCSCDManager(logger)
156156+ mgr := NewPCSCDManager(logger, false)
157157158158 // Start pcscd
159159 if err := mgr.Start(); err != nil {
+5-3
internal/modes/agent/agent.go
···5050}
51515252// Run starts the agent mode
5353-func Run(args []string) error {
5353+func Run(args []string, logLevel string) error {
5454 // Create a new flag set for agent-specific flags
5555 fs := flag.NewFlagSet("agent", flag.ContinueOnError)
5656···143143144144 if usePKCS11 {
145145 // Start pcscd daemon before initializing PKCS#11 client
146146- setupLog.Info("Starting pcscd daemon for hardware HSM support")
147147- pcscdMgr := agent.NewPCSCDManager(setupLog)
146146+ // Enable debug output when log level is debug
147147+ debugMode := logLevel == "debug"
148148+ setupLog.Info("Starting pcscd daemon for hardware HSM support", "debug", debugMode)
149149+ pcscdMgr := agent.NewPCSCDManager(setupLog, debugMode)
148150 if err := pcscdMgr.Start(); err != nil {
149151 return fmt.Errorf("failed to start pcscd: %w", err)
150152 }