Skip to content

Commit

Permalink
operator: cleanup CRD registration
Browse files Browse the repository at this point in the history
Cleanup CRD registration at operator startup by removing boilerplate
functions.

Signed-off-by: Marco Hofstetter <marco.hofstetter@isovalent.com>
  • Loading branch information
mhofstetter authored and nbusseneau committed Feb 14, 2023
1 parent dfee9b4 commit af68df7
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 202 deletions.
223 changes: 28 additions & 195 deletions pkg/k8s/apis/cilium.io/client/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,20 +92,20 @@ func CreateCustomResourceDefinitions(clientset apiextensionsclient.Interface) er
g, _ := errgroup.WithContext(context.Background())

resourceToCreateFnMapping := map[string]crdCreationFn{
synced.CRDResourceName(k8sconstv2.CNPName): createCNPCRD,
synced.CRDResourceName(k8sconstv2.CCNPName): createCCNPCRD,
synced.CRDResourceName(k8sconstv2.CNName): createNodeCRD,
synced.CRDResourceName(k8sconstv2.CIDName): createIdentityCRD,
synced.CRDResourceName(k8sconstv2.CEPName): createCEPCRD,
synced.CRDResourceName(k8sconstv2.CEWName): createCEWCRD,
synced.CRDResourceName(k8sconstv2.CLRPName): createCLRPCRD,
synced.CRDResourceName(k8sconstv2.CEGPName): createCEGPCRD,
synced.CRDResourceName(k8sconstv2alpha1.CESName): createCESCRD,
synced.CRDResourceName(k8sconstv2.CCECName): createCCECCRD,
synced.CRDResourceName(k8sconstv2.CECName): createCECCRD,
synced.CRDResourceName(k8sconstv2alpha1.BGPPName): createBGPPCRD,
synced.CRDResourceName(k8sconstv2alpha1.LBIPPoolName): createLBIPPoolCRD,
synced.CRDResourceName(k8sconstv2alpha1.CNCName): createCNCCRD,
synced.CRDResourceName(k8sconstv2.CNPName): createCRD(CNPCRDName, k8sconstv2.CNPName),
synced.CRDResourceName(k8sconstv2.CCNPName): createCRD(CCNPCRDName, k8sconstv2.CCNPName),
synced.CRDResourceName(k8sconstv2.CNName): createCRD(CNCRDName, k8sconstv2.CNName),
synced.CRDResourceName(k8sconstv2.CIDName): createCRD(CIDCRDName, k8sconstv2.CIDName),
synced.CRDResourceName(k8sconstv2.CEPName): createCRD(CEPCRDName, k8sconstv2.CEPName),
synced.CRDResourceName(k8sconstv2.CEWName): createCRD(CEWCRDName, k8sconstv2.CEWName),
synced.CRDResourceName(k8sconstv2.CLRPName): createCRD(CLRPCRDName, k8sconstv2.CLRPName),
synced.CRDResourceName(k8sconstv2.CEGPName): createCRD(CEGPCRDName, k8sconstv2.CEGPName),
synced.CRDResourceName(k8sconstv2alpha1.CESName): createCRD(CESCRDName, k8sconstv2alpha1.CESName),
synced.CRDResourceName(k8sconstv2.CCECName): createCRD(CCECCRDName, k8sconstv2.CCECName),
synced.CRDResourceName(k8sconstv2.CECName): createCRD(CECCRDName, k8sconstv2.CECName),
synced.CRDResourceName(k8sconstv2alpha1.BGPPName): createCRD(BGPPCRDName, k8sconstv2alpha1.BGPPName),
synced.CRDResourceName(k8sconstv2alpha1.LBIPPoolName): createCRD(LBIPPoolCRDName, k8sconstv2alpha1.LBIPPoolName),
synced.CRDResourceName(k8sconstv2alpha1.CNCName): createCRD(CNCCRDName, k8sconstv2alpha1.CNCName),
}
for _, r := range synced.AllCRDResourceNames() {
fn, ok := resourceToCreateFnMapping[r]
Expand Down Expand Up @@ -218,177 +218,18 @@ func GetPregeneratedCRD(crdName string) apiextensionsv1.CustomResourceDefinition
return ciliumCRD
}

// createCNPCRD creates and updates the CiliumNetworkPolicies CRD. It should be called
// on agent startup but is idempotent and safe to call again.
func createCNPCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CNPCRDName)
// createCRD creates and updates a CRD.
// It should be called on agent startup but is idempotent and safe to call again.
func createCRD(crdVersionedName string, crdMetaName string) func(clientset apiextensionsclient.Interface) error {
return func(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(crdVersionedName)

return createUpdateCRD(
clientset,
CNPCRDName,
constructV1CRD(k8sconstv2.CNPName, ciliumCRD),
newDefaultPoller(),
)
}

// createCCNPCRD creates and updates the CiliumClusterwideNetworkPolicy CRD. It
// should be called on agent startup but is idempotent and safe to call again.
func createCCNPCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CCNPCRDName)

return createUpdateCRD(
clientset,
CCNPCRDName,
constructV1CRD(k8sconstv2.CCNPName, ciliumCRD),
newDefaultPoller(),
)
}

// createCEPCRD creates and updates the CiliumEndpoint CRD. It should be called
// on agent startup but is idempotent and safe to call again.
func createCEPCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CEPCRDName)

return createUpdateCRD(
clientset,
CEPCRDName,
constructV1CRD(k8sconstv2.CEPName, ciliumCRD),
newDefaultPoller(),
)
}

// createNodeCRD creates and updates the CiliumNode CRD. It should be called on
// agent startup but is idempotent and safe to call again.
func createNodeCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CNCRDName)

return createUpdateCRD(
clientset,
CNCRDName,
constructV1CRD(k8sconstv2.CNName, ciliumCRD),
newDefaultPoller(),
)
}

// createCEWCRD creates and updates the CiliumExternalWorkload CRD. It should be called on
// agent startup but is idempotent and safe to call again.
func createCEWCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CEWCRDName)

return createUpdateCRD(
clientset,
CEWCRDName,
constructV1CRD(k8sconstv2.CEWName, ciliumCRD),
newDefaultPoller(),
)
}

// createIdentityCRD creates and updates the CiliumIdentity CRD. It should be
// called on agent startup but is idempotent and safe to call again.
func createIdentityCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CIDCRDName)

return createUpdateCRD(
clientset,
CIDCRDName,
constructV1CRD(k8sconstv2.CIDName, ciliumCRD),
newDefaultPoller(),
)
}

func createCLRPCRD(clientset apiextensionsclient.Interface) error {
cLrpCRD := GetPregeneratedCRD(CLRPCRDName)

return createUpdateCRD(
clientset,
CLRPCRDName,
constructV1CRD(k8sconstv2.CLRPName, cLrpCRD),
newDefaultPoller(),
)
}

func createCEGPCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CEGPCRDName)

return createUpdateCRD(
clientset,
CEGPCRDName,
constructV1CRD(k8sconstv2.CEGPName, ciliumCRD),
newDefaultPoller(),
)
}

// createCESCRD creates and updates the CiliumEndpointSlice CRD. It should be
// called on agent startup but is idempotent and safe to call again.
func createCESCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CESCRDName)

return createUpdateCRD(
clientset,
CESCRDName,
constructV1CRD(k8sconstv2alpha1.CESName, ciliumCRD),
newDefaultPoller(),
)
}

func createCCECCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CCECCRDName)

return createUpdateCRD(
clientset,
CCECCRDName,
constructV1CRD(k8sconstv2.CCECName, ciliumCRD),
newDefaultPoller(),
)
}

func createCECCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CECCRDName)

return createUpdateCRD(
clientset,
CECCRDName,
constructV1CRD(k8sconstv2.CECName, ciliumCRD),
newDefaultPoller(),
)
}

// createBGPPCRD creates and updates the CiliumBGPPeeringPolicy CRD. It should be
// called on agent startup but is idempotent and safe to call again.
func createBGPPCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(BGPPCRDName)

return createUpdateCRD(
clientset,
BGPPCRDName,
constructV1CRD(k8sconstv2alpha1.BGPPName, ciliumCRD),
newDefaultPoller(),
)
}

// createLBIPPoolCRD creates and updates the CiliumLoadBalancerIPPool CRD. It should be
// called on agent startup but is idempotent and safe to call again.
func createLBIPPoolCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(LBIPPoolCRDName)

return createUpdateCRD(
clientset,
LBIPPoolCRDName,
constructV1CRD(k8sconstv2alpha1.LBIPPoolName, ciliumCRD),
newDefaultPoller(),
)
}

// createCNCCRD creates and updates the CiliumNodeConfig CRD.
func createCNCCRD(clientset apiextensionsclient.Interface) error {
ciliumCRD := GetPregeneratedCRD(CNCCRDName)

return createUpdateCRD(
clientset,
CNCCRDName,
constructV1CRD(k8sconstv2alpha1.CNCName, ciliumCRD),
newDefaultPoller(),
)
return createUpdateCRD(
clientset,
constructV1CRD(crdMetaName, ciliumCRD),
newDefaultPoller(),
)
}
}

// createUpdateCRD ensures the CRD object is installed into the K8s cluster. It
Expand All @@ -399,22 +240,15 @@ func createCNCCRD(clientset apiextensionsclient.Interface) error {
// code.
func createUpdateCRD(
clientset apiextensionsclient.Interface,
crdName string,
crd *apiextensionsv1.CustomResourceDefinition,
poller poller,
) error {
scopedLog := log.WithField("name", crdName)
scopedLog := log.WithField("name", crd.Name)

if !k8sversion.Capabilities().APIExtensionsV1CRD {
log.Infof("K8s apiserver does not support v1 CRDs, falling back to v1beta1")

return createUpdateV1beta1CRD(
scopedLog,
clientset.ApiextensionsV1beta1(),
crdName,
crd,
poller,
)
return createUpdateV1beta1CRD(scopedLog, clientset.ApiextensionsV1beta1(), crd, poller)
}

v1CRDClient := clientset.ApiextensionsV1()
Expand Down Expand Up @@ -442,7 +276,7 @@ func createUpdateCRD(
if err := updateV1CRD(scopedLog, crd, clusterCRD, v1CRDClient, poller); err != nil {
return err
}
if err := waitForV1CRD(scopedLog, crdName, clusterCRD, v1CRDClient, poller); err != nil {
if err := waitForV1CRD(scopedLog, clusterCRD, v1CRDClient, poller); err != nil {
return err
}

Expand Down Expand Up @@ -564,7 +398,6 @@ func updateV1CRD(

func waitForV1CRD(
scopedLog *logrus.Entry,
crdName string,
crd *apiextensionsv1.CustomResourceDefinition,
client v1client.CustomResourceDefinitionsGetter,
poller poller,
Expand Down
8 changes: 4 additions & 4 deletions pkg/k8s/apis/cilium.io/client/register_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (s *CiliumV2RegisterSuite) TestCreateUpdateCRD(c *C) {
crd := s.getV1TestCRD()
client := fake.NewSimpleClientset()
c.Assert(k8sversion.Force(v1Support.Major+"."+v1Support.Minor), IsNil)
return createUpdateCRD(client, crd.ObjectMeta.Name, crd, newFakePoller())
return createUpdateCRD(client, crd, newFakePoller())
},
wantErr: false,
},
Expand All @@ -101,7 +101,7 @@ func (s *CiliumV2RegisterSuite) TestCreateUpdateCRD(c *C) {
crd := s.getV1TestCRD()
client := fake.NewSimpleClientset()
c.Assert(k8sversion.Force(v1beta1Support.Major+"."+v1beta1Support.Minor), IsNil)
return createUpdateCRD(client, crd.ObjectMeta.Name, crd, newFakePoller())
return createUpdateCRD(client, crd, newFakePoller())
},
wantErr: false,
},
Expand All @@ -128,7 +128,7 @@ func (s *CiliumV2RegisterSuite) TestCreateUpdateCRD(c *C) {
)
c.Assert(err, IsNil)

return createUpdateCRD(client, crd.ObjectMeta.Name, crd, newFakePoller())
return createUpdateCRD(client, crd, newFakePoller())
},
wantErr: false,
},
Expand Down Expand Up @@ -168,7 +168,7 @@ func (s *CiliumV2RegisterSuite) TestCreateUpdateCRD(c *C) {
crd := s.getV1TestCRD()
crd.ObjectMeta.Name = crdToInstall.ObjectMeta.Name

return createUpdateCRD(client, crd.ObjectMeta.Name, crd, newFakePoller())
return createUpdateCRD(client, crd, newFakePoller())
},
wantErr: false,
},
Expand Down
4 changes: 1 addition & 3 deletions pkg/k8s/apis/cilium.io/client/v1beta1.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
func createUpdateV1beta1CRD(
scopedLog *logrus.Entry,
client v1beta1client.CustomResourceDefinitionsGetter,
crdName string,
crd *apiextensionsv1.CustomResourceDefinition,
poller poller,
) error {
Expand Down Expand Up @@ -57,7 +56,7 @@ func createUpdateV1beta1CRD(
if err := updateV1beta1CRD(scopedLog, v1beta1CRD, clusterCRD, client, poller); err != nil {
return err
}
if err := waitForV1beta1CRD(scopedLog, crdName, clusterCRD, client, poller); err != nil {
if err := waitForV1beta1CRD(scopedLog, clusterCRD, client, poller); err != nil {
return err
}

Expand Down Expand Up @@ -166,7 +165,6 @@ func updateV1beta1CRD(

func waitForV1beta1CRD(
scopedLog *logrus.Entry,
crdName string,
crd *apiextensionsv1beta1.CustomResourceDefinition,
client v1beta1client.CustomResourceDefinitionsGetter,
poller poller,
Expand Down

0 comments on commit af68df7

Please sign in to comment.