Skip to content

Commit 4e49a31

Browse files
author
Arvind Thirumurugan
committed
check addonmanager label for ownership
1 parent 99b6929 commit 4e49a31

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

cmd/crdinstaller/main.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ import (
2525
"os"
2626
"path/filepath"
2727

28+
apierrors "k8s.io/apimachinery/pkg/api/errors"
2829
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2930
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3031
"k8s.io/apimachinery/pkg/runtime"
3132
"k8s.io/apimachinery/pkg/runtime/serializer"
33+
"k8s.io/apimachinery/pkg/types"
3234
"k8s.io/klog/v2"
3335
ctrl "sigs.k8s.io/controller-runtime"
3436
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -202,14 +204,29 @@ func installCRDs(ctx context.Context, client client.Client, crdPath, mode string
202204
return fmt.Errorf("unexpected type from %s, expected CustomResourceDefinition but got %s", path, gvk)
203205
}
204206

205-
// Create or update using the typed CRD.
206-
existingCRD := &apiextensionsv1.CustomResourceDefinition{
207+
var existingCRD apiextensionsv1.CustomResourceDefinition
208+
if err := client.Get(ctx, types.NamespacedName{Name: crd.Name}, &existingCRD); err != nil {
209+
if !apierrors.IsNotFound(err) {
210+
return fmt.Errorf("failed to get existing CRD %s: %w", crd.Name, err)
211+
}
212+
}
213+
214+
labels := existingCRD.GetLabels()
215+
if labels != nil {
216+
if _, exists := labels["addonmanager.kubernetes.io/mode"]; exists {
217+
klog.Infof("CRD %s is still managed by the addon manager, skipping installation", crd.Name)
218+
continue
219+
}
220+
}
221+
222+
// Reset existing CRD to create or update it.
223+
existingCRD = apiextensionsv1.CustomResourceDefinition{
207224
ObjectMeta: metav1.ObjectMeta{
208225
Name: crd.Name,
209226
},
210227
}
211228

212-
createOrUpdateRes, err := controllerutil.CreateOrUpdate(ctx, client, existingCRD, func() error {
229+
createOrUpdateRes, err := controllerutil.CreateOrUpdate(ctx, client, &existingCRD, func() error {
213230
// Copy spec from our decoded CRD to the object we're creating/updating.
214231
existingCRD.Spec = crd.Spec
215232
existingCRD.SetLabels(crd.Labels)

0 commit comments

Comments
 (0)