github.com/cilium/cilium@v1.16.2/pkg/k8s/apis/cell.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package apis
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/cilium/hive/cell"
    10  	"github.com/sirupsen/logrus"
    11  	"github.com/spf13/pflag"
    12  
    13  	"github.com/cilium/cilium/pkg/k8s/apis/cilium.io/client"
    14  	k8sClient "github.com/cilium/cilium/pkg/k8s/client"
    15  )
    16  
    17  // SkipCRDCreation specifies whether the CustomResourceDefinition will be
    18  // created by the daemon
    19  const SkipCRDCreation = "skip-crd-creation"
    20  
    21  // RegisterCRDsCell is a cell that creates all the Cilium CRDs.
    22  var RegisterCRDsCell = cell.Module(
    23  	"create-crds",
    24  	"Create Cilium CRDs",
    25  
    26  	cell.Config(defaultConfig),
    27  
    28  	cell.Invoke(createCRDs),
    29  
    30  	cell.ProvidePrivate(
    31  		newCiliumGroupCRDs,
    32  	),
    33  )
    34  
    35  type RegisterCRDsConfig struct {
    36  	// SkipCRDCreation disables creation of the CustomResourceDefinition
    37  	// for the operator
    38  	SkipCRDCreation bool
    39  }
    40  
    41  var defaultConfig = RegisterCRDsConfig{}
    42  
    43  func (c RegisterCRDsConfig) Flags(flags *pflag.FlagSet) {
    44  	flags.Bool(SkipCRDCreation, false, "When true, Kubernetes Custom Resource Definitions will not be created")
    45  }
    46  
    47  // RegisterCRDsFunc is a function that register all the CRDs for a k8s group
    48  type RegisterCRDsFunc func(k8sClient.Clientset) error
    49  
    50  type params struct {
    51  	cell.In
    52  
    53  	Logger    logrus.FieldLogger
    54  	Lifecycle cell.Lifecycle
    55  
    56  	Clientset k8sClient.Clientset
    57  
    58  	Config            RegisterCRDsConfig
    59  	RegisterCRDsFuncs []RegisterCRDsFunc `group:"register-crd-funcs"`
    60  }
    61  
    62  func createCRDs(p params) {
    63  	p.Lifecycle.Append(cell.Hook{
    64  		OnStart: func(ctx cell.HookContext) error {
    65  			// Register the CRDs after validating that we are running on a supported
    66  			// version of K8s.
    67  			if !p.Clientset.IsEnabled() || p.Config.SkipCRDCreation {
    68  				p.Logger.Info("Skipping creation of CRDs")
    69  				return nil
    70  			}
    71  
    72  			for _, f := range p.RegisterCRDsFuncs {
    73  				if err := f(p.Clientset); err != nil {
    74  					return fmt.Errorf("unable to create CRDs: %w", err)
    75  				}
    76  			}
    77  
    78  			return nil
    79  		},
    80  	})
    81  }
    82  
    83  type registerCRDsFuncOut struct {
    84  	cell.Out
    85  
    86  	Func RegisterCRDsFunc `group:"register-crd-funcs"`
    87  }
    88  
    89  func newCiliumGroupCRDs() registerCRDsFuncOut {
    90  	return registerCRDsFuncOut{
    91  		Func: client.RegisterCRDs,
    92  	}
    93  }