Skip to content

Commit

Permalink
WIP: Add a manifest annotation to be used for object deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
jottofar committed Aug 20, 2020
1 parent 3401029 commit 15720a8
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
8 changes: 8 additions & 0 deletions lib/resourcebuilder/resourcebuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
securityclientv1 "github.com/openshift/client-go/security/clientset/versioned/typed/security/v1"
"github.com/openshift/cluster-version-operator/lib"
"github.com/openshift/cluster-version-operator/lib/resourceapply"
"github.com/openshift/cluster-version-operator/lib/resourcedelete"
"github.com/openshift/cluster-version-operator/lib/resourceread"
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
Expand All @@ -28,6 +29,7 @@ import (
rbacclientv1 "k8s.io/client-go/kubernetes/typed/rbac/v1"
rbacclientv1beta1 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1"
"k8s.io/client-go/rest"
"k8s.io/klog"
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
apiregistrationv1beta1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1"
apiregistrationclientv1 "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1"
Expand Down Expand Up @@ -105,8 +107,14 @@ func (b *builder) Do(ctx context.Context) error {
return b.checkDaemonSetHealth(ctx, typedObject)
case *appsv1.Deployment:
if b.modifier != nil {
klog.Infof("appsv1.Deployment modifier!!!!!!!!!!!!!!!!!!!!!!!!\n%v", b.modifier)
b.modifier(typedObject)
}
if deleted, err := resourcedelete.DeleteDeploymentv1(ctx, b.appsClientv1, typedObject); err != nil {
klog.Infof("appsv1.Deployment delete anno error %v !!!!!!!!!!!!!!!!!!!!!!!!", err)
} else if deleted {
klog.Infof("appsv1.Deployment found delete anno !!!!!!!!!!!!!!!!!!!!!!!!")
}
if err := b.modifyDeployment(ctx, typedObject); err != nil {
return err
}
Expand Down
42 changes: 42 additions & 0 deletions lib/resourcedelete/apps.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package resourcedelete

import (
"context"
"fmt"

appsv1 "k8s.io/api/apps/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
appsclientv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
"k8s.io/klog"
)

const DeleteAnnotation = "release.openshift.io/delete"

// DeleteDeploymentv1 checks ... and deletes the required deployment from the cluster.
func DeleteDeploymentv1(ctx context.Context, client appsclientv1.DeploymentsGetter, required *appsv1.Deployment) (bool, error) {
if annotations := required.GetAnnotations(); annotations != nil {
if value, ok := annotations[DeleteAnnotation]; ok {
if value != "true" {
return false, fmt.Errorf("Invalid %s annotation value: %s", DeleteAnnotation, value)
}
existing, err := client.Deployments(required.Namespace).Get(ctx, required.Name, metav1.GetOptions{})
if apierrors.IsNotFound(err) {
return true, nil
}
if err != nil {
return false, err
}
if deletionTime := existing.GetDeletionTimestamp(); deletionTime != nil {
klog.V(4).Infof("%s.%s resource is expected to be deleted by %s.", required.Namespace, required.Name, deletionTime.String())
} else {
if err := client.Deployments(required.Namespace).Delete(ctx, required.Name, metav1.DeleteOptions{}); err != nil {
klog.V(4).Infof("%s.%s resource delete requested.", required.Namespace, required.Name)
return false, err
}
}
return true, nil
}
}
return false, nil
}
12 changes: 12 additions & 0 deletions pkg/cvo/cvo.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"time"

"github.com/google/uuid"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -672,6 +673,17 @@ func NewResourceBuilder(config, burstConfig *rest.Config, clusterOperators cvoin
config: config,
burstConfig: burstConfig,
clusterOperators: clusterOperators,
modifier: func(obj metav1.Object) {
switch typedObject := obj.(type) {
case *appsv1.Deployment:
if typedObject.GetNamespace() == "openshift-service-catalog-removed" && typedObject.GetName() == "openshift-service-catalog-apiserver-remover" {
klog.Infof("modifier found openshift-service-catalog-removedi.openshift-service-catalog-apiserver-remover!!!!!!!!!!!!!")
annotations := make(map[string]string)
annotations["release.openshift.io/delete"] = "true"
typedObject.SetAnnotations(annotations)
}
}
},
}
}

Expand Down

0 comments on commit 15720a8

Please sign in to comment.