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