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 }