github.com/cilium/cilium@v1.16.2/operator/pkg/secretsync/cell.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package secretsync
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/cilium/hive/cell"
    10  	"github.com/sirupsen/logrus"
    11  	ctrlRuntime "sigs.k8s.io/controller-runtime"
    12  )
    13  
    14  // Cell manages K8s Secret synchronization from application namespaces
    15  // into dedicated Cilium secrets namespace.
    16  //
    17  // Subsystems that are interested in having K8s Secrets synced
    18  // (e.g. Gateway API, Ingress, ...) can register themselves via
    19  // SecretSyncRegistrationOut.
    20  //
    21  // This way, multiple use-cases are sharing the same reconciler.
    22  // This potentially prevents multiple reconcilers from interfering
    23  // with each other.
    24  //
    25  // Example:
    26  //
    27  // cell.Provide(func registerSecretSyncRegistration(...) secretsync.SecretSyncRegistrationOut {...})
    28  var Cell = cell.Module(
    29  	"secret-sync",
    30  	"Syncs TLS secrets into a dedicated secrets namespace",
    31  
    32  	cell.Invoke(initSecretSyncReconciliation),
    33  )
    34  
    35  type secretSyncParams struct {
    36  	cell.In
    37  
    38  	Logger    logrus.FieldLogger
    39  	Lifecycle cell.Lifecycle
    40  
    41  	CtrlRuntimeManager ctrlRuntime.Manager
    42  	Registrations      []*SecretSyncRegistration `group:"secretSyncRegistrations"`
    43  }
    44  
    45  // SecretSyncRegistrationOut can be used by other subsystems
    46  // to register their need to have K8s Secrets synced into a
    47  // dedicated secrets namespace.
    48  type SecretSyncRegistrationOut struct {
    49  	cell.Out
    50  
    51  	SecretSyncRegistration *SecretSyncRegistration `group:"secretSyncRegistrations"`
    52  }
    53  
    54  func initSecretSyncReconciliation(params secretSyncParams) error {
    55  	if params.CtrlRuntimeManager == nil {
    56  		params.Logger.Debug("Skipping secret sync initialization due to uninitialized controller-runtime")
    57  		return nil
    58  	}
    59  
    60  	reconciler := NewSecretSyncReconciler(params.CtrlRuntimeManager.GetClient(), params.Logger, params.Registrations)
    61  
    62  	if !reconciler.hasRegistrations() {
    63  		params.Logger.Debug("Skipping secret sync initialization as no registrations are available")
    64  		return nil
    65  	}
    66  
    67  	if err := reconciler.SetupWithManager(params.CtrlRuntimeManager); err != nil {
    68  		return fmt.Errorf("failed to setup secret sync reconciler: %w", err)
    69  	}
    70  
    71  	return nil
    72  }