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  }