You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2019/10/09 10:16:14 UTC
[camel-k] branch master updated: remove integration delete action
and finalizer #995
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/master by this push:
new 279e673 remove integration delete action and finalizer #995
279e673 is described below
commit 279e673ec4e60c71cd1f812d64c8a6a371f190b6
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Oct 9 10:11:37 2019 +0200
remove integration delete action and finalizer #995
---
pkg/apis/camel/v1alpha1/integration_types.go | 2 -
pkg/cmd/run.go | 10 -
pkg/controller/integration/delete.go | 203 ---------------------
.../integration/integration_controller.go | 6 -
pkg/trait/owner.go | 35 +---
pkg/trait/owner_test.go | 15 +-
pkg/util/finalizer/finalizer.go | 81 --------
7 files changed, 11 insertions(+), 341 deletions(-)
diff --git a/pkg/apis/camel/v1alpha1/integration_types.go b/pkg/apis/camel/v1alpha1/integration_types.go
index e4082e9..2b0ba8e 100644
--- a/pkg/apis/camel/v1alpha1/integration_types.go
+++ b/pkg/apis/camel/v1alpha1/integration_types.go
@@ -166,8 +166,6 @@ const (
IntegrationPhaseRunning IntegrationPhase = "Running"
// IntegrationPhaseError --
IntegrationPhaseError IntegrationPhase = "Error"
- // IntegrationPhaseDeleting --
- IntegrationPhaseDeleting IntegrationPhase = "Deleting"
// IntegrationConditionKitAvailable --
IntegrationConditionKitAvailable IntegrationConditionType = "IntegrationKitAvailable"
diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go
index 97e4ff6..672c3bc 100644
--- a/pkg/cmd/run.go
+++ b/pkg/cmd/run.go
@@ -31,8 +31,6 @@ import (
"strings"
"syscall"
- "github.com/apache/camel-k/pkg/util/finalizer"
-
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
"github.com/apache/camel-k/pkg/client"
"github.com/apache/camel-k/pkg/gzip"
@@ -85,7 +83,6 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command {
cmd.Flags().BoolVar(&options.Compression, "compression", false, "Enable store source as a compressed binary blob")
cmd.Flags().StringSliceVar(&options.Resources, "resource", nil, "Add a resource")
cmd.Flags().StringSliceVar(&options.OpenAPIs, "open-api", nil, "Add an OpenAPI v2 spec")
- cmd.Flags().StringVar(&options.DeletionPolicy, "deletion-policy", "owner", "Policy used to cleanup child resources, default owner")
cmd.Flags().StringSliceVarP(&options.Volumes, "volume", "v", nil, "Mount a volume into the integration container. E.g \"-v pvcname:/container/path\"")
cmd.Flags().StringSliceVarP(&options.EnvVars, "env", "e", nil, "Set an environment variable in the integration container. E.g \"-e MY_VAR=my-value\"")
@@ -102,7 +99,6 @@ type runCmdOptions struct {
Logs bool
Sync bool
Dev bool
- DeletionPolicy string
IntegrationKit string
IntegrationName string
Profile string
@@ -376,12 +372,6 @@ func (o *runCmdOptions) updateIntegrationCode(c client.Client, sources []string)
})
}
- if o.DeletionPolicy == "label" {
- integration.Finalizers = []string{
- finalizer.CamelIntegrationFinalizer,
- }
- }
-
for _, item := range o.Dependencies {
integration.Spec.AddDependency(item)
}
diff --git a/pkg/controller/integration/delete.go b/pkg/controller/integration/delete.go
deleted file mode 100644
index c1d4ec7..0000000
--- a/pkg/controller/integration/delete.go
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package integration
-
-import (
- "context"
- "fmt"
- "strings"
-
- "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
- "github.com/apache/camel-k/pkg/util/finalizer"
- "github.com/apache/camel-k/pkg/util/kubernetes"
- "github.com/apache/camel-k/pkg/util/log"
-
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
-
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
- k8serrors "k8s.io/apimachinery/pkg/api/errors"
- k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
-)
-
-// NewDeleteAction creates a new monitoring action for an integration
-func NewDeleteAction() Action {
- return &deleteAction{}
-}
-
-type deleteAction struct {
- baseAction
-}
-
-func (action *deleteAction) Name() string {
- return "delete"
-}
-
-func (action *deleteAction) CanHandle(integration *v1alpha1.Integration) bool {
- return integration.Status.Phase == v1alpha1.IntegrationPhaseDeleting
-}
-
-func (action *deleteAction) Handle(ctx context.Context, integration *v1alpha1.Integration) (*v1alpha1.Integration, error) {
- l := log.Log.ForIntegration(integration)
-
- ok, err := finalizer.Exists(integration, finalizer.CamelIntegrationFinalizer)
- if err != nil {
- return nil, err
- }
- if !ok {
- return nil, nil
- }
-
- // Select all resources created by this integration
- selectors := []string{
- fmt.Sprintf("camel.apache.org/integration=%s", integration.Name),
- }
-
- l.Info("Collecting resources to delete")
- resources, err := kubernetes.LookUpResources(ctx, action.client, integration.Namespace, selectors)
- if err != nil {
- return nil, err
- }
-
- // If the ForegroundDeletion deletion is not set remove the finalizer and
- // delete child resources from a dedicated goroutine
- foreground, err := finalizer.Exists(integration, finalizer.ForegroundDeletion)
- if err != nil {
- return nil, err
- }
-
- if !foreground {
- //
- // Async
- //
- if err := action.removeFinalizer(ctx, integration); err != nil {
- return nil, err
- }
-
- go func() {
- if err := action.deleteChildResources(context.TODO(), &l, resources); err != nil {
- l.Error(err, "error deleting child resources")
- }
- }()
- } else {
- //
- // Sync
- //
- if err := action.deleteChildResources(ctx, &l, resources); err != nil {
- return nil, err
- }
- if err = action.removeFinalizer(ctx, integration); err != nil {
- return nil, err
- }
- }
-
- return nil, nil
-}
-
-func (action *deleteAction) removeFinalizer(ctx context.Context, integration *v1alpha1.Integration) error {
- _, err := finalizer.Remove(integration, finalizer.CamelIntegrationFinalizer)
- if err != nil {
- return err
- }
-
- return action.client.Update(ctx, integration)
-}
-
-func (action *deleteAction) deleteChildResources(ctx context.Context, l *log.Logger, resources []unstructured.Unstructured) error {
- l.Infof("Resources to delete: %d", len(resources))
-
- var err error
-
- resources, err = action.deleteChildResourceWithCondition(ctx, l, resources, func(u unstructured.Unstructured) bool {
- return u.GetKind() == "Service" && strings.HasPrefix(u.GetAPIVersion(), "serving.knative.dev/")
- })
- if err != nil {
- return err
- }
-
- resources, err = action.deleteChildResourceWithCondition(ctx, l, resources, func(u unstructured.Unstructured) bool {
- return u.GetKind() == "Deployment"
- })
- if err != nil {
- return err
- }
-
- resources, err = action.deleteChildResourceWithCondition(ctx, l, resources, func(u unstructured.Unstructured) bool {
- return u.GetKind() == "ReplicaSet"
- })
- if err != nil {
- return err
- }
-
- resources, err = action.deleteChildResourceWithCondition(ctx, l, resources, func(u unstructured.Unstructured) bool {
- return u.GetKind() == "Pod"
- })
- if err != nil {
- return err
- }
-
- // Delete remaining resources
- for _, resource := range resources {
- // pin the resource
- resource := resource
-
- if err := action.deleteChildResource(ctx, l, resource); err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (action *deleteAction) deleteChildResourceWithCondition(
- ctx context.Context, l *log.Logger, resources []unstructured.Unstructured, condition func(unstructured.Unstructured) bool) ([]unstructured.Unstructured, error) {
-
- remaining := resources[:0]
- for _, resource := range resources {
- // pin the resource
- resource := resource
-
- if condition(resource) {
- if err := action.deleteChildResource(ctx, l, resource); err != nil {
- return resources, err
- }
-
- continue
- }
-
- remaining = append(remaining, resource)
- }
-
- return remaining, nil
-}
-
-func (action *deleteAction) deleteChildResource(ctx context.Context, l *log.Logger, resource unstructured.Unstructured) error {
- l.Infof("Deleting child resource: %s:%s/%s", resource.GetAPIVersion(), resource.GetKind(), resource.GetName())
-
- err := action.client.Delete(ctx, &resource, k8sclient.PropagationPolicy(metav1.DeletePropagationOrphan))
- if err != nil {
- // The resource may have already been deleted
- if !k8serrors.IsNotFound(err) {
- l.Errorf(err, "cannot delete child resource: %s:%s/%s", resource.GetAPIVersion(), resource.GetKind(), resource.GetName())
- }
- } else {
- l.Infof("Child resource deleted: %s:%s/%s", resource.GetAPIVersion(), resource.GetKind(), resource.GetName())
- }
-
- return nil
-}
diff --git a/pkg/controller/integration/integration_controller.go b/pkg/controller/integration/integration_controller.go
index 0923515..a8c7935 100644
--- a/pkg/controller/integration/integration_controller.go
+++ b/pkg/controller/integration/integration_controller.go
@@ -228,11 +228,6 @@ func (r *ReconcileIntegration) Reconcile(request reconcile.Request) (reconcile.R
target := instance.DeepCopy()
targetLog := rlog.ForIntegration(target)
- // Delete phase
- if target.GetDeletionTimestamp() != nil {
- target.Status.Phase = v1alpha1.IntegrationPhaseDeleting
- }
-
if target.Status.Phase == v1alpha1.IntegrationPhaseNone || target.Status.Phase == v1alpha1.IntegrationPhaseWaitingForPlatform {
pl, err := platform.GetOrLookup(ctx, r.client, target.Namespace, target.Status.Platform)
if err != nil || pl.Status.Phase != v1alpha1.IntegrationPlatformPhaseReady {
@@ -262,7 +257,6 @@ func (r *ReconcileIntegration) Reconcile(request reconcile.Request) (reconcile.R
NewDeployAction(),
NewMonitorAction(),
NewErrorAction(),
- NewDeleteAction(),
}
for _, a := range actions {
diff --git a/pkg/trait/owner.go b/pkg/trait/owner.go
index a056fcb..bef7ab4 100644
--- a/pkg/trait/owner.go
+++ b/pkg/trait/owner.go
@@ -21,9 +21,6 @@ import (
"strings"
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
- "github.com/apache/camel-k/pkg/util/finalizer"
-
- "github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -79,30 +76,18 @@ func (t *ownerTrait) Apply(e *Environment) error {
}
}
- ok, err := finalizer.Exists(e.Integration, finalizer.CamelIntegrationFinalizer)
- if err != nil {
- return errors.Wrap(err, "failed to read finalizer"+finalizer.CamelIntegrationFinalizer)
- }
-
e.Resources.VisitMetaObject(func(res metav1.Object) {
- //
- // do not add owner reference if the finalizer is set
- // so resources are not automatically deleted by k8s
- // when owner is deleted
- //
- if !ok {
- references := []metav1.OwnerReference{
- {
- APIVersion: e.Integration.APIVersion,
- Kind: e.Integration.Kind,
- Name: e.Integration.Name,
- UID: e.Integration.UID,
- Controller: &controller,
- BlockOwnerDeletion: &blockOwnerDeletion,
- },
- }
- res.SetOwnerReferences(references)
+ references := []metav1.OwnerReference{
+ {
+ APIVersion: e.Integration.APIVersion,
+ Kind: e.Integration.Kind,
+ Name: e.Integration.Name,
+ UID: e.Integration.UID,
+ Controller: &controller,
+ BlockOwnerDeletion: &blockOwnerDeletion,
+ },
}
+ res.SetOwnerReferences(references)
// Transfer annotations
t.propagateLabelAndAnnotations(res, targetLabels, targetAnnotations)
diff --git a/pkg/trait/owner_test.go b/pkg/trait/owner_test.go
index 16410b4..8b57c0e 100644
--- a/pkg/trait/owner_test.go
+++ b/pkg/trait/owner_test.go
@@ -21,7 +21,6 @@ import (
"testing"
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
- "github.com/apache/camel-k/pkg/util/finalizer"
"github.com/stretchr/testify/assert"
@@ -29,19 +28,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
-func TestOwnerWithFinalizer(t *testing.T) {
- env := SetUpOwnerEnvironment(t)
- env.Integration.Finalizers = []string{finalizer.CamelIntegrationFinalizer}
-
- processTestEnv(t, env)
-
- assert.NotEmpty(t, env.ExecutedTraits)
- assert.NotNil(t, env.GetTrait(ID("owner")))
-
- ValidateOwnerResources(t, env, false)
-}
-
-func TestOwnerWithoutFinalizer(t *testing.T) {
+func TestOwner(t *testing.T) {
env := SetUpOwnerEnvironment(t)
processTestEnv(t, env)
diff --git a/pkg/util/finalizer/finalizer.go b/pkg/util/finalizer/finalizer.go
deleted file mode 100644
index cecc4b7..0000000
--- a/pkg/util/finalizer/finalizer.go
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-package finalizer
-
-import (
- "k8s.io/apimachinery/pkg/api/meta"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/apimachinery/pkg/util/sets"
-)
-
-const (
- // CamelIntegrationFinalizer --
- CamelIntegrationFinalizer = "finalizer.integration.camel.apache.org"
-
- // ForegroundDeletion --
- ForegroundDeletion = "foregroundDeletion"
-)
-
-// Add --
-func Add(obj runtime.Object, value string) error {
- accessor, err := meta.Accessor(obj)
- if err != nil {
- return err
- }
-
- finalizers := sets.NewString(accessor.GetFinalizers()...)
- finalizers.Insert(value)
- accessor.SetFinalizers(finalizers.List())
-
- return nil
-}
-
-// Exists --
-func Exists(obj runtime.Object, finalizer string) (bool, error) {
- fzs, err := GetAll(obj)
- if err != nil {
- return false, err
- }
- for _, fin := range fzs {
- if fin == finalizer {
- return true, nil
- }
- }
- return false, nil
-}
-
-// GetAll --
-func GetAll(obj runtime.Object) ([]string, error) {
- accessor, err := meta.Accessor(obj)
- if err != nil {
- return nil, err
- }
- return accessor.GetFinalizers(), nil
-}
-
-// Remove --
-func Remove(obj runtime.Object, value string) ([]string, error) {
- accessor, err := meta.Accessor(obj)
- if err != nil {
- return nil, err
- }
- finalizers := sets.NewString(accessor.GetFinalizers()...)
- finalizers.Delete(value)
- newFinalizers := finalizers.List()
- accessor.SetFinalizers(newFinalizers)
- return newFinalizers, nil
-}