/
mco_oba.go
138 lines (123 loc) · 3.73 KB
/
mco_oba.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Copyright (c) Red Hat, Inc.
// Copyright Contributors to the Open Cluster Management project
// Licensed under the Apache License 2.0
package utils
import (
"context"
"fmt"
"strings"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog"
)
const (
ManagedClusterAddOnDisabledMessage = "enableMetrics is set to False"
OBMAddonEnabledMessage = "Cluster metrics sent successfully"
ManagedClusterAddOnEnabledMessage = "observability-controller add-on is available"
)
func CheckOBAStatus(opt TestOptions, namespace, status string) error {
dynClient := NewKubeClientDynamic(
opt.HubCluster.ClusterServerURL,
opt.KubeConfig,
opt.HubCluster.KubeContext)
oba, err := dynClient.Resource(NewMCOAddonGVR()).
Namespace(namespace).
Get(context.TODO(), "observability-addon", metav1.GetOptions{})
if err != nil {
return err
}
obaStatus := fmt.Sprint(oba.Object["status"])
if strings.Contains(obaStatus, status) {
return nil
} else {
return fmt.Errorf("observability-addon is not ready for managed cluster %q with status %q: %v", namespace, obaStatus, oba.Object)
}
}
func CheckOBADeleted(opt TestOptions, namespace string) error {
dynClient := NewKubeClientDynamic(
opt.HubCluster.ClusterServerURL,
opt.KubeConfig,
opt.HubCluster.KubeContext)
_, err := dynClient.Resource(NewMCOAddonGVR()).Namespace(namespace).Get(context.TODO(), "observability-addon", metav1.GetOptions{})
if err == nil || !errors.IsNotFound(err) {
return fmt.Errorf("observability-addon is not properly deleted for managed cluster %s", namespace)
}
return nil
}
func CheckManagedClusterAddonsStatus(opt TestOptions, namespace, status string) error {
dynClient := NewKubeClientDynamic(
opt.HubCluster.ClusterServerURL,
opt.KubeConfig,
opt.HubCluster.KubeContext)
mca, err := dynClient.Resource(NewMCOManagedClusterAddonsGVR()).
Namespace(namespace).
Get(context.TODO(), "observability-controller", metav1.GetOptions{})
if err != nil {
return err
}
if mca.Object["status"] != nil && strings.Contains(fmt.Sprint(mca.Object["status"]), status) {
return nil
} else {
return fmt.Errorf("observability-controller is disabled for managed cluster %s", namespace)
}
}
func CheckAllOBAsEnabled(opt TestOptions) error {
clusters, err := ListManagedClusters(opt)
if err != nil {
return err
}
klog.V(1).Infof("Check OBA status for managedclusters: %v", clusters)
for _, cluster := range clusters {
// skip the check for local-cluster
if cluster == "local-cluster" {
klog.V(1).Infof("Skip OBA status for managedcluster: %v", cluster)
continue
}
err = CheckOBAStatus(opt, cluster, OBMAddonEnabledMessage)
if err != nil {
klog.V(1).Infof("Error checking OBA status for cluster %q: %v", cluster, err)
return err
}
}
return nil
}
func CheckAllOBADisabled(opt TestOptions) error {
clusters, err := ListManagedClusters(opt)
if err != nil {
return err
}
for _, cluster := range clusters {
// skip the check for local-cluster
if cluster == "local-cluster" {
klog.V(1).Infof("Skip OBA status for managedcluster: %v", cluster)
continue
}
err = CheckOBAStatus(opt, cluster, ManagedClusterAddOnDisabledMessage)
if err != nil {
return err
}
err = CheckManagedClusterAddonsStatus(opt, cluster, ManagedClusterAddOnDisabledMessage)
if err != nil {
return err
}
}
return nil
}
func CheckAllOBAsDeleted(opt TestOptions) error {
clusters, err := ListManagedClusters(opt)
if err != nil {
return err
}
for _, cluster := range clusters {
// skip the check for local-cluster
if cluster == "local-cluster" {
klog.V(1).Infof("Skip OBA status for managedcluster: %v", cluster)
continue
}
err = CheckOBADeleted(opt, cluster)
if err != nil {
return err
}
}
return nil
}