github.com/verrazzano/verrazzano@v1.7.0/application-operator/mcagent/mcagent_deregister.go (about) 1 // Copyright (c) 2022, 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package mcagent 5 6 import ( 7 "context" 8 9 "github.com/verrazzano/verrazzano/application-operator/constants" 10 clustersapi "github.com/verrazzano/verrazzano/cluster-operator/apis/clusters/v1alpha1" 11 corev1 "k8s.io/api/core/v1" 12 apierrors "k8s.io/apimachinery/pkg/api/errors" 13 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 14 "sigs.k8s.io/controller-runtime/pkg/client" 15 ) 16 17 // syncMCAgentDeleteResources deletes the managed cluster resources if the correlating admin VMC gets deleted 18 func (s *Syncer) syncDeregistration() error { 19 if shouldDeregister, err := s.verifyDeregister(); err != nil || !shouldDeregister { 20 return err 21 } 22 23 s.Log.Infof("Verrazzano Managed Cluster %s/%s has been deleted, cleaning up managed cluster resources", constants.VerrazzanoMultiClusterNamespace, s.ManagedClusterName) 24 mcAgentSec := corev1.Secret{ 25 ObjectMeta: metav1.ObjectMeta{ 26 Name: constants.MCAgentSecret, 27 Namespace: constants.VerrazzanoSystemNamespace, 28 }, 29 } 30 err := s.LocalClient.Delete(context.TODO(), &mcAgentSec) 31 if client.IgnoreNotFound(err) != nil { 32 s.Log.Errorf("Failed to delete the managed cluster agent secret %s/%s: %v", constants.MCAgentSecret, constants.VerrazzanoSystemNamespace, err) 33 return err 34 } 35 36 mcRegSec := corev1.Secret{ 37 ObjectMeta: metav1.ObjectMeta{ 38 Name: constants.MCRegistrationSecret, 39 Namespace: constants.VerrazzanoSystemNamespace, 40 }, 41 } 42 err = s.LocalClient.Delete(context.TODO(), &mcRegSec) 43 if client.IgnoreNotFound(err) != nil { 44 s.Log.Errorf("Failed to delete the managed cluster registration secret %s/%s: %v", constants.MCRegistrationSecret, constants.VerrazzanoSystemNamespace, err) 45 return err 46 } 47 return nil 48 } 49 50 func (s *Syncer) verifyDeregister() (bool, error) { 51 vmcName := client.ObjectKey{Name: s.ManagedClusterName, Namespace: constants.VerrazzanoMultiClusterNamespace} 52 vmc := clustersapi.VerrazzanoManagedCluster{} 53 54 if s.AdminClient == nil { 55 return true, nil 56 } 57 err := s.AdminClient.Get(s.Context, vmcName, &vmc) 58 if client.IgnoreNotFound(err) != nil && !apierrors.IsUnauthorized(err) { 59 s.Log.Errorf("Failed to get the VMC resources %s/%s from the admin cluster: %v", constants.VerrazzanoMultiClusterNamespace, s.ManagedClusterName, err) 60 return false, err 61 } 62 if err == nil && vmc.DeletionTimestamp.IsZero() { 63 s.Log.Debugf("VMC resource %s/%s has been found and is not being deleted, skipping the MC Agent deregistration", constants.VerrazzanoMultiClusterNamespace, s.ManagedClusterName) 64 return false, err 65 } 66 return true, nil 67 }