Skip to content

Commit 898780c

Browse files
committed
fix cannot check the customized health prober of hosted addon
Signed-off-by: Zhiwei Yin <[email protected]>
1 parent 22cfea2 commit 898780c

File tree

3 files changed

+146
-11
lines changed

3 files changed

+146
-11
lines changed

pkg/addonmanager/controllers/agentdeploy/controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,9 @@ func (c *addonDeployController) sync(ctx context.Context, syncCtx factory.SyncCo
289289
getWorkByAddon: c.getWorksByAddonFn(index.ManifestWorkHookByHostedAddon),
290290
agentAddon: agentAddon},
291291
&healthCheckSyncer{
292-
getWorkByAddon: c.getWorksByAddonFn(index.ManifestWorkByAddon),
293-
agentAddon: agentAddon,
292+
getWorkByAddon: c.getWorksByAddonFn(index.ManifestWorkByAddon),
293+
getWorkByHostedAddon: c.getWorksByAddonFn(index.ManifestWorkByHostedAddon),
294+
agentAddon: agentAddon,
294295
},
295296
}
296297

pkg/addonmanager/controllers/agentdeploy/healthcheck_sync.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ import (
2020
)
2121

2222
type healthCheckSyncer struct {
23-
getWorkByAddon func(addonName, addonNamespace string) ([]*workapiv1.ManifestWork, error)
24-
agentAddon agent.AgentAddon
23+
getWorkByAddon func(addonName, addonNamespace string) ([]*workapiv1.ManifestWork, error)
24+
getWorkByHostedAddon func(addonName, addonNamespace string) ([]*workapiv1.ManifestWork, error)
25+
agentAddon agent.AgentAddon
2526
}
2627

2728
func (s *healthCheckSyncer) sync(ctx context.Context,
@@ -128,8 +129,16 @@ func (s *healthCheckSyncer) probeAddonStatusByWorks(
128129
}
129130
}
130131

131-
addonWorks, err := s.getWorkByAddon(addon.Name, addon.Namespace)
132-
if err != nil || len(addonWorks) == 0 {
132+
addonManifestWorks := []*workapiv1.ManifestWork{}
133+
var err error
134+
installMode, _ := s.agentAddon.GetAgentAddonOptions().HostedModeInfoFunc(addon, cluster)
135+
if installMode == constants.InstallModeHosted {
136+
addonManifestWorks, err = s.getWorkByHostedAddon(addon.Name, addon.Namespace)
137+
} else {
138+
addonManifestWorks, err = s.getWorkByAddon(addon.Name, addon.Namespace)
139+
}
140+
141+
if err != nil || len(addonManifestWorks) == 0 {
133142
meta.SetStatusCondition(&addon.Status.Conditions, metav1.Condition{
134143
Type: addonapiv1alpha1.ManagedClusterAddOnConditionAvailable,
135144
Status: metav1.ConditionUnknown,
@@ -140,7 +149,7 @@ func (s *healthCheckSyncer) probeAddonStatusByWorks(
140149
}
141150

142151
manifestConditions := []workapiv1.ManifestCondition{}
143-
for _, work := range addonWorks {
152+
for _, work := range addonManifestWorks {
144153
if !strings.HasPrefix(work.Name, constants.DeployWorkNamePrefix(addon.Name)) {
145154
continue
146155
}

pkg/addonmanager/controllers/agentdeploy/healthcheck_sync_test.go

Lines changed: 129 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"k8s.io/apimachinery/pkg/types"
1616
"k8s.io/client-go/tools/cache"
1717
"open-cluster-management.io/addon-framework/pkg/addonmanager/addontesting"
18+
"open-cluster-management.io/addon-framework/pkg/addonmanager/constants"
1819
"open-cluster-management.io/addon-framework/pkg/agent"
1920
"open-cluster-management.io/addon-framework/pkg/index"
2021
"open-cluster-management.io/addon-framework/pkg/utils"
@@ -53,8 +54,9 @@ func (t *healthCheckTestAgent) Manifests(cluster *clusterv1.ManagedCluster,
5354

5455
func (t *healthCheckTestAgent) GetAgentAddonOptions() agent.AgentAddonOptions {
5556
return agent.AgentAddonOptions{
56-
AddonName: t.name,
57-
HealthProber: t.health,
57+
AddonName: t.name,
58+
HealthProber: t.health,
59+
HostedModeInfoFunc: constants.GetHostedModeInfo,
5860
}
5961
}
6062

@@ -1106,6 +1108,128 @@ func TestHealthCheckReconcile(t *testing.T) {
11061108
Message: "test add-on is available.",
11071109
},
11081110
},
1111+
{
1112+
name: "Health check mode is workload availability and WorkProber check pass for hosted addon",
1113+
testAddon: &healthCheckTestAgent{name: "test",
1114+
health: &agent.HealthProber{Type: agent.HealthProberTypeWorkloadAvailability},
1115+
},
1116+
addon: addontesting.NewHostedModeAddon("test", "cluster1",
1117+
"hostingcluster", manifestAppliedCondition),
1118+
existingWork: []runtime.Object{
1119+
&v1.ManifestWork{
1120+
ObjectMeta: metav1.ObjectMeta{
1121+
Name: "addon-test-deploy-01",
1122+
Namespace: "hostingcluster",
1123+
Labels: map[string]string{
1124+
"open-cluster-management.io/addon-name": "test",
1125+
"open-cluster-management.io/addon-namespace": "cluster1",
1126+
},
1127+
},
1128+
Spec: v1.ManifestWorkSpec{},
1129+
Status: v1.ManifestWorkStatus{
1130+
ResourceStatus: v1.ManifestResourceStatus{
1131+
Manifests: []v1.ManifestCondition{
1132+
{
1133+
ResourceMeta: v1.ManifestResourceMeta{
1134+
Ordinal: 0,
1135+
Group: "apps",
1136+
Version: "",
1137+
Kind: "",
1138+
Resource: "deployments",
1139+
Name: "test-deployment",
1140+
Namespace: "default",
1141+
},
1142+
StatusFeedbacks: v1.StatusFeedbackResult{
1143+
Values: []v1.FeedbackValue{
1144+
{
1145+
Name: "Replicas",
1146+
Value: v1.FieldValue{
1147+
Integer: boolPtr(2),
1148+
},
1149+
},
1150+
{
1151+
Name: "ReadyReplicas",
1152+
Value: v1.FieldValue{
1153+
Integer: boolPtr(2),
1154+
},
1155+
},
1156+
},
1157+
},
1158+
},
1159+
{
1160+
ResourceMeta: v1.ManifestResourceMeta{
1161+
Ordinal: 0,
1162+
Group: "apps",
1163+
Version: "",
1164+
Kind: "",
1165+
Resource: "deployments",
1166+
Name: "test-deployment-replicas-not-set",
1167+
Namespace: "default",
1168+
},
1169+
StatusFeedbacks: v1.StatusFeedbackResult{
1170+
Values: []v1.FeedbackValue{
1171+
{
1172+
Name: "Replicas",
1173+
Value: v1.FieldValue{
1174+
Integer: boolPtr(1),
1175+
},
1176+
},
1177+
{
1178+
Name: "ReadyReplicas",
1179+
Value: v1.FieldValue{
1180+
Integer: boolPtr(1),
1181+
},
1182+
},
1183+
},
1184+
},
1185+
},
1186+
{
1187+
ResourceMeta: v1.ManifestResourceMeta{
1188+
Ordinal: 0,
1189+
Group: "apps",
1190+
Version: "",
1191+
Kind: "",
1192+
Resource: "daemonsets",
1193+
Name: "test-daemonset",
1194+
Namespace: "default",
1195+
},
1196+
StatusFeedbacks: v1.StatusFeedbackResult{
1197+
Values: []v1.FeedbackValue{
1198+
{
1199+
Name: "DesiredNumberScheduled",
1200+
Value: v1.FieldValue{
1201+
Integer: boolPtr(2),
1202+
},
1203+
},
1204+
{
1205+
Name: "NumberReady",
1206+
Value: v1.FieldValue{
1207+
Integer: boolPtr(2),
1208+
},
1209+
},
1210+
},
1211+
},
1212+
},
1213+
},
1214+
},
1215+
Conditions: []metav1.Condition{
1216+
{
1217+
Type: v1.WorkAvailable,
1218+
Status: metav1.ConditionTrue,
1219+
},
1220+
},
1221+
},
1222+
},
1223+
},
1224+
expectedErr: nil,
1225+
expectedHealthCheckMode: addonapiv1alpha1.HealthCheckModeCustomized,
1226+
expectAvailableCondition: metav1.Condition{
1227+
Type: addonapiv1alpha1.ManagedClusterAddOnConditionAvailable,
1228+
Status: metav1.ConditionTrue,
1229+
Reason: addonapiv1alpha1.AddonAvailableReasonProbeAvailable,
1230+
Message: "test add-on is available.",
1231+
},
1232+
},
11091233
}
11101234

11111235
for _, c := range cases {
@@ -1134,8 +1258,9 @@ func TestHealthCheckReconcile(t *testing.T) {
11341258
}
11351259

11361260
healthCheckSyncer := healthCheckSyncer{
1137-
getWorkByAddon: addonDeploymentController.getWorksByAddonFn(index.ManifestWorkByAddon),
1138-
agentAddon: addonDeploymentController.agentAddons[c.testAddon.name],
1261+
getWorkByAddon: addonDeploymentController.getWorksByAddonFn(index.ManifestWorkByAddon),
1262+
getWorkByHostedAddon: addonDeploymentController.getWorksByAddonFn(index.ManifestWorkByHostedAddon),
1263+
agentAddon: addonDeploymentController.agentAddons[c.testAddon.name],
11391264
}
11401265

11411266
addon, err := healthCheckSyncer.sync(context.TODO(), addontesting.NewFakeSyncContext(t), c.cluster, c.addon)

0 commit comments

Comments
 (0)