diff --git a/internal/controller/function_controller.go b/internal/controller/function_controller.go index 5367039..339692a 100644 --- a/internal/controller/function_controller.go +++ b/internal/controller/function_controller.go @@ -36,7 +36,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/predicate" @@ -45,8 +44,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" ) -const functionFinalizer = "function.functions.dev/finalizer" - // FunctionReconciler reconciles a Function object type FunctionReconciler struct { client.Client @@ -120,16 +117,6 @@ func (r *FunctionReconciler) reconcile(ctx context.Context, function *v1alpha1.F } defer repo.Cleanup() - if err := r.ensureFinalizer(ctx, function); err != nil { - return fmt.Errorf("setting up finalizers failed: %w", err) - } - - if function.GetDeletionTimestamp() != nil { - if err := r.handleDeletion(ctx, function, metadata.Name); err != nil { - return fmt.Errorf("deleting function failed: %w", err) - } - } - if err := r.ensureDeployment(ctx, function, repo, metadata); err != nil { return fmt.Errorf("deploying function failed: %w", err) } @@ -172,56 +159,6 @@ func (r *FunctionReconciler) prepareSource(ctx context.Context, function *v1alph return repo, &metadata, nil } -// ensureFinalizer adds the finalizer to the function if it doesn't exist -func (r *FunctionReconciler) ensureFinalizer(ctx context.Context, function *v1alpha1.Function) error { - if controllerutil.ContainsFinalizer(function, functionFinalizer) { - return nil - } - - logger := log.FromContext(ctx) - logger.Info("Adding Finalizer for Function") - - if ok := controllerutil.AddFinalizer(function, functionFinalizer); !ok { - return fmt.Errorf("failed to add finalizer for function") - } - - if err := r.Update(ctx, function); err != nil { - return fmt.Errorf("failed to add finalizer for function: %w", err) - } - - return nil -} - -// handleDeletion performs cleanup operations when a function is being deleted -func (r *FunctionReconciler) handleDeletion(ctx context.Context, function *v1alpha1.Function, functionName string) error { - if !controllerutil.ContainsFinalizer(function, functionFinalizer) { - return nil - } - - logger := log.FromContext(ctx) - logger.Info("Performing Finalizer Operations for Function before delete CR") - - // Mark function as terminating - function.MarkTerminating() - - // Perform all operations required before removing the finalizer - if err := r.Finalize(ctx, functionName, function.Namespace); err != nil { - function.MarkFinalizeFailed(err) - return fmt.Errorf("failed to perform finalizer for function: %w", err) - } - - logger.Info("Removing Finalizer for Function after successfully perform the operations") - if ok := controllerutil.RemoveFinalizer(function, functionFinalizer); !ok { - return fmt.Errorf("failed to remove finalizer for function") - } - - if err := r.Update(ctx, function); err != nil { - return fmt.Errorf("failed to remove finalizer for function: %w", err) - } - - return nil -} - // ensureDeployment ensures the function is deployed and up-to-date func (r *FunctionReconciler) ensureDeployment(ctx context.Context, function *v1alpha1.Function, repo *git.Repository, metadata *funcfn.Function) error { logger := log.FromContext(ctx) @@ -449,12 +386,3 @@ func (r *FunctionReconciler) isMiddlewareLatest(ctx context.Context, metadata *f return latestMiddleware == functionMiddleware, nil } - -func (r *FunctionReconciler) Finalize(ctx context.Context, name, namespace string) error { - err := r.FuncCliManager.Delete(ctx, name, namespace) - if err != nil { - return fmt.Errorf("failed to finalize function: %w", err) - } - - return nil -} diff --git a/internal/controller/function_controller_test.go b/internal/controller/function_controller_test.go index a61d95a..2649551 100644 --- a/internal/controller/function_controller_test.go +++ b/internal/controller/function_controller_test.go @@ -32,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" "knative.dev/func/pkg/functions" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/reconcile" functionsdevv1alpha1 "github.com/functions-dev/func-operator/api/v1alpha1" @@ -66,12 +65,6 @@ var _ = Describe("Function Controller", func() { err := k8sClient.Get(ctx, typeNamespacedName, resource) Expect(err).NotTo(HaveOccurred()) - By("Remove finalizer to allow deletion") - if controllerutil.ContainsFinalizer(resource, functionFinalizer) { - controllerutil.RemoveFinalizer(resource, functionFinalizer) - Expect(k8sClient.Update(ctx, resource)).To(Succeed()) - } - By("Cleanup the specific resource instance Function") Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) diff --git a/internal/funccli/Manager_mock.go b/internal/funccli/Manager_mock.go index 2b0a1c6..fdb408e 100644 --- a/internal/funccli/Manager_mock.go +++ b/internal/funccli/Manager_mock.go @@ -38,69 +38,6 @@ func (_m *MockManager) EXPECT() *MockManager_Expecter { return &MockManager_Expecter{mock: &_m.Mock} } -// Delete provides a mock function for the type MockManager -func (_mock *MockManager) Delete(ctx context.Context, name string, namespace string) error { - ret := _mock.Called(ctx, name, namespace) - - if len(ret) == 0 { - panic("no return value specified for Delete") - } - - var r0 error - if returnFunc, ok := ret.Get(0).(func(context.Context, string, string) error); ok { - r0 = returnFunc(ctx, name, namespace) - } else { - r0 = ret.Error(0) - } - return r0 -} - -// MockManager_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete' -type MockManager_Delete_Call struct { - *mock.Call -} - -// Delete is a helper method to define mock.On call -// - ctx context.Context -// - name string -// - namespace string -func (_e *MockManager_Expecter) Delete(ctx interface{}, name interface{}, namespace interface{}) *MockManager_Delete_Call { - return &MockManager_Delete_Call{Call: _e.mock.On("Delete", ctx, name, namespace)} -} - -func (_c *MockManager_Delete_Call) Run(run func(ctx context.Context, name string, namespace string)) *MockManager_Delete_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 string - if args[1] != nil { - arg1 = args[1].(string) - } - var arg2 string - if args[2] != nil { - arg2 = args[2].(string) - } - run( - arg0, - arg1, - arg2, - ) - }) - return _c -} - -func (_c *MockManager_Delete_Call) Return(err error) *MockManager_Delete_Call { - _c.Call.Return(err) - return _c -} - -func (_c *MockManager_Delete_Call) RunAndReturn(run func(ctx context.Context, name string, namespace string) error) *MockManager_Delete_Call { - _c.Call.Return(run) - return _c -} - // Deploy provides a mock function for the type MockManager func (_mock *MockManager) Deploy(ctx context.Context, repoPath string, namespace string, opts DeployOptions) error { ret := _mock.Called(ctx, repoPath, namespace, opts) diff --git a/internal/funccli/manager.go b/internal/funccli/manager.go index f504414..c12574c 100644 --- a/internal/funccli/manager.go +++ b/internal/funccli/manager.go @@ -31,7 +31,6 @@ type Manager interface { Describe(ctx context.Context, name, namespace string) (funcfn.Instance, error) Deploy(ctx context.Context, repoPath string, namespace string, opts DeployOptions) error - Delete(ctx context.Context, name, namespace string) error GetCurrentVersion(ctx context.Context) (string, error) GetLatestMiddlewareVersion(ctx context.Context, runtime, invoke string) (string, error) @@ -235,15 +234,6 @@ func (m *managerImpl) Deploy(ctx context.Context, repoPath string, namespace str return nil } -func (m *managerImpl) Delete(ctx context.Context, name, namespace string) error { - out, err := m.Run(ctx, "", "delete", "--namespace", namespace, name) - if err != nil { - return fmt.Errorf("failed to delete function: %q. %w", out, err) - } - - return nil -} - func (m *managerImpl) GetLatestMiddlewareVersion(ctx context.Context, runtime string, invoke string) (string, error) { versions := struct { MiddlewareVersions map[string]map[string]string `json:"middlewareVersions,omitempty"`