Skip to content

Commit ced1fdd

Browse files
committed
use managedclustraddon install namespace when addondeploymentconfig not set
Signed-off-by: zhujian <[email protected]>
1 parent fb5ba3a commit ced1fdd

File tree

4 files changed

+23
-48
lines changed

4 files changed

+23
-48
lines changed

pkg/addon/templateagent/decorator.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type namespaceDecorator struct {
2929
paths map[string][]string
3030
}
3131

32-
func newNamespaceDecorator(privateValues addonfactory.Values) *namespaceDecorator {
32+
func newNamespaceDecorator(defaultNs string, privateValues addonfactory.Values) *namespaceDecorator {
3333
decorator := &namespaceDecorator{
3434
paths: map[string][]string{
3535
"ClusterRoleBinding": {"subjects", "namespace"},
@@ -40,6 +40,8 @@ func newNamespaceDecorator(privateValues addonfactory.Values) *namespaceDecorato
4040
namespace, ok := privateValues[InstallNamespacePrivateValueKey]
4141
if ok {
4242
decorator.installNamespace = namespace.(string)
43+
} else {
44+
decorator.installNamespace = defaultNs
4345
}
4446

4547
return decorator

pkg/addon/templateagent/decorator_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
)
2020

2121
func TestNamespaceDecorator(t *testing.T) {
22+
defaultNs := "ocm-addon"
2223
tests := []struct {
2324
name string
2425
namespace string
@@ -29,7 +30,7 @@ func TestNamespaceDecorator(t *testing.T) {
2930
name: "no namespace set",
3031
object: testingcommon.NewUnstructured("v1", "Pod", "default", "test"),
3132
validateObject: func(t *testing.T, obj *unstructured.Unstructured) {
32-
testingcommon.AssertEqualNameNamespace(t, obj.GetName(), obj.GetNamespace(), "test", "default")
33+
testingcommon.AssertEqualNameNamespace(t, obj.GetName(), obj.GetNamespace(), "test", defaultNs)
3334
},
3435
},
3536
{
@@ -153,7 +154,7 @@ func TestNamespaceDecorator(t *testing.T) {
153154
values[InstallNamespacePrivateValueKey] = tc.namespace
154155
}
155156

156-
d := newNamespaceDecorator(values)
157+
d := newNamespaceDecorator(defaultNs, values)
157158
result, err := d.decorate(tc.object)
158159
if err != nil {
159160
t.Fatal(err)

pkg/addon/templateagent/template_agent.go

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,14 @@ func (a *CRDTemplateAgentAddon) renderObjects(
189189
return objects, err
190190
}
191191

192-
object, err = a.decorateObject(template, object, presetValues, privateValues)
192+
object, err = a.decorateObject(addon, template, object, presetValues, privateValues)
193193
if err != nil {
194194
return objects, err
195195
}
196196
objects = append(objects, object)
197197
}
198198

199-
additionalObjects, err := a.injectAdditionalObjects(template, presetValues, privateValues)
199+
additionalObjects, err := a.injectAdditionalObjects(addon, template, presetValues, privateValues)
200200
if err != nil {
201201
return objects, err
202202
}
@@ -206,14 +206,16 @@ func (a *CRDTemplateAgentAddon) renderObjects(
206206
}
207207

208208
func (a *CRDTemplateAgentAddon) decorateObject(
209+
addon *addonapiv1alpha1.ManagedClusterAddOn,
209210
template *addonapiv1alpha1.AddOnTemplate,
210211
obj *unstructured.Unstructured,
211212
orderedValues orderedValues,
212-
privateValues addonfactory.Values) (*unstructured.Unstructured, error) {
213+
privateValues addonfactory.Values,
214+
) (*unstructured.Unstructured, error) {
213215
decorators := []decorator{
214216
newDeploymentDecorator(a.logger, a.addonName, template, orderedValues, privateValues),
215217
newDaemonSetDecorator(a.logger, a.addonName, template, orderedValues, privateValues),
216-
newNamespaceDecorator(privateValues),
218+
newNamespaceDecorator(addon.Spec.InstallNamespace, privateValues),
217219
}
218220

219221
var err error
@@ -228,6 +230,7 @@ func (a *CRDTemplateAgentAddon) decorateObject(
228230
}
229231

230232
func (a *CRDTemplateAgentAddon) injectAdditionalObjects(
233+
addon *addonapiv1alpha1.ManagedClusterAddOn,
231234
template *addonapiv1alpha1.AddOnTemplate,
232235
orderedValues orderedValues,
233236
privateValues addonfactory.Values) ([]runtime.Object, error) {
@@ -237,7 +240,7 @@ func (a *CRDTemplateAgentAddon) injectAdditionalObjects(
237240

238241
decorators := []decorator{
239242
// decorate the namespace of the additional objects
240-
newNamespaceDecorator(privateValues),
243+
newNamespaceDecorator(addon.Spec.InstallNamespace, privateValues),
241244
}
242245

243246
var objs []runtime.Object
@@ -296,47 +299,12 @@ func (a *CRDTemplateAgentAddon) getDesiredAddOnTemplateInner(
296299
return template.DeepCopy(), nil
297300
}
298301

299-
// TemplateAgentRegistrationNamespaceFunc reads deployment/daemonset resources in the manifests and use that namespace
302+
// TemplateAgentRegistrationNamespaceFunc reads the managedclusteraddon.spec.installnamespace
300303
// as the default registration namespace. If addonDeploymentConfig is set, uses the namespace in it.
301304
func (a *CRDTemplateAgentAddon) TemplateAgentRegistrationNamespaceFunc(
302305
addon *addonapiv1alpha1.ManagedClusterAddOn) (string, error) {
303-
template, err := a.getDesiredAddOnTemplateInner(addon.Name, addon.Status.ConfigReferences)
304-
if err != nil {
305-
return "", err
306-
}
307-
if template == nil {
308-
return "", fmt.Errorf("addon %s template not found in status", addon.Name)
309-
}
310-
311-
// pick the namespace of the first deployment, if there is no deployment, pick the namespace of the first daemonset
312-
var desiredNS = "open-cluster-management-agent-addon"
313-
var firstDeploymentNamespace, firstDaemonSetNamespace string
314-
for _, manifest := range template.Spec.AgentSpec.Workload.Manifests {
315-
object := &unstructured.Unstructured{}
316-
if err := object.UnmarshalJSON(manifest.Raw); err != nil {
317-
a.logger.Error(err, "failed to extract the object")
318-
continue
319-
}
320-
321-
if firstDeploymentNamespace == "" {
322-
if _, err = utils.ConvertToDeployment(object); err == nil {
323-
firstDeploymentNamespace = object.GetNamespace()
324-
break
325-
}
326-
}
327-
if firstDaemonSetNamespace == "" {
328-
if _, err = utils.ConvertToDaemonSet(object); err == nil {
329-
firstDaemonSetNamespace = object.GetNamespace()
330-
}
331-
}
332-
}
333-
334-
if firstDeploymentNamespace != "" {
335-
desiredNS = firstDeploymentNamespace
336-
} else if firstDaemonSetNamespace != "" {
337-
desiredNS = firstDaemonSetNamespace
338-
}
339306

307+
desiredNS := addon.Spec.InstallNamespace
340308
overrideNs, err := utils.AgentInstallNamespaceFromDeploymentConfigFunc(
341309
utils.NewAddOnDeploymentConfigGetter(a.addonClient))(addon)
342310
if err != nil {

pkg/addon/templateagent/template_agent_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ func TestAddonTemplateAgentManifests(t *testing.T) {
151151
}
152152
}
153153

154+
defaultInstallNs := "ocm-addon"
154155
cases := []struct {
155156
name string
156157
addonTemplatePath string
@@ -474,7 +475,7 @@ func TestAddonTemplateAgentManifests(t *testing.T) {
474475
if err != nil {
475476
t.Fatal(err)
476477
}
477-
if daemonSet.Namespace != "open-cluster-management-agent-addon-ds" { // first daemonset ns
478+
if daemonSet.Namespace != defaultInstallNs {
478479
t.Errorf("unexpected namespace %s", daemonSet.Namespace)
479480
}
480481
validatePodTemplate(t, daemonSet.Spec.Template,
@@ -496,13 +497,13 @@ func TestAddonTemplateAgentManifests(t *testing.T) {
496497
if err != nil {
497498
t.Fatal(err)
498499
}
499-
if clusterRoleBinding.Subjects[0].Namespace != "open-cluster-management-agent-addon-ds" {
500+
if clusterRoleBinding.Subjects[0].Namespace != defaultInstallNs {
500501
t.Errorf("clusterRolebinding namespace does not match, got %s", clusterRoleBinding.Subjects[0].Namespace)
501502
}
502503
},
503504
validateAgentOptions: func(t *testing.T, o agent.AgentAddonOptions,
504505
mca *addonapiv1alpha1.ManagedClusterAddOn) {
505-
validateAgentOptions(t, o, mca, "open-cluster-management-agent-addon-ds")
506+
validateAgentOptions(t, o, mca, defaultInstallNs)
506507
},
507508
},
508509
{
@@ -640,6 +641,9 @@ func TestAddonTemplateAgentManifests(t *testing.T) {
640641
Name: addonName,
641642
Namespace: clusterName,
642643
},
644+
Spec: addonapiv1alpha1.ManagedClusterAddOnSpec{
645+
InstallNamespace: defaultInstallNs,
646+
},
643647
},
644648
)
645649

0 commit comments

Comments
 (0)