Skip to content

Commit c603c5f

Browse files
author
Per Goncalves da Silva
committed
Make targetNamespaces optional
Signed-off-by: Per Goncalves da Silva <[email protected]>
1 parent 1171691 commit c603c5f

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

internal/operator-controller/rukpak/convert/registryv1.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ func (c Converter) Convert(rv1 render.RegistryV1, installNamespace string, targe
261261
return nil, fmt.Errorf("webhookDefinitions are not supported")
262262
}
263263

264-
objs, err := c.BundleRenderer.Render(rv1, installNamespace, targetNamespaces)
264+
objs, err := c.BundleRenderer.Render(rv1, installNamespace, render.WithTargetNamespaces(targetNamespaces...))
265265
if err != nil {
266266
return nil, err
267267
}

internal/operator-controller/rukpak/render/render.go

+18-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55

66
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
78
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
89
"sigs.k8s.io/controller-runtime/pkg/client"
910

@@ -69,27 +70,41 @@ type Options struct {
6970

7071
func (o *Options) apply(opts ...Option) *Options {
7172
for _, opt := range opts {
72-
opt(o)
73+
if opt != nil {
74+
opt(o)
75+
}
7376
}
7477
return o
7578
}
7679

7780
type Option func(*Options)
7881

82+
func WithTargetNamespaces(namespaces ...string) Option {
83+
return func(o *Options) {
84+
o.TargetNamespaces = namespaces
85+
}
86+
}
87+
88+
func WithUniqueNameGenerator(generator UniqueNameGenerator) Option {
89+
return func(o *Options) {
90+
o.UniqueNameGenerator = generator
91+
}
92+
}
93+
7994
type BundleRenderer struct {
8095
BundleValidator BundleValidator
8196
ResourceGenerators []ResourceGenerator
8297
}
8398

84-
func (r BundleRenderer) Render(rv1 RegistryV1, installNamespace string, watchNamespaces []string, opts ...Option) ([]client.Object, error) {
99+
func (r BundleRenderer) Render(rv1 RegistryV1, installNamespace string, opts ...Option) ([]client.Object, error) {
85100
// validate bundle
86101
if err := r.BundleValidator.Validate(&rv1); err != nil {
87102
return nil, err
88103
}
89104

90105
genOpts := (&Options{
91106
InstallNamespace: installNamespace,
92-
TargetNamespaces: watchNamespaces,
107+
TargetNamespaces: []string{metav1.NamespaceAll},
93108
UniqueNameGenerator: DefaultUniqueNameGenerator,
94109
}).apply(opts...)
95110

internal/operator-controller/rukpak/render/render_test.go

+32-5
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ func Test_BundleRenderer_ValidatesBundle(t *testing.T) {
2929
},
3030
},
3131
}
32-
objs, err := renderer.Render(render.RegistryV1{}, "", nil)
32+
objs, err := renderer.Render(render.RegistryV1{}, "")
3333
require.Nil(t, objs)
3434
require.Error(t, err)
3535
require.Contains(t, err.Error(), "this bundle is invalid")
3636
}
3737

3838
func Test_BundleRenderer_CreatesCorrectDefaultOptions(t *testing.T) {
3939
expectedInstallNamespace := "install-namespace"
40-
expectedTargetNamespaces := []string{"ns-one", "ns-two"}
40+
expectedTargetNamespaces := []string{""}
4141
expectedUniqueNameGenerator := render.DefaultUniqueNameGenerator
4242

4343
renderer := render.BundleRenderer{
@@ -51,7 +51,34 @@ func Test_BundleRenderer_CreatesCorrectDefaultOptions(t *testing.T) {
5151
},
5252
}
5353

54-
_, _ = renderer.Render(render.RegistryV1{}, expectedInstallNamespace, expectedTargetNamespaces)
54+
_, _ = renderer.Render(render.RegistryV1{}, expectedInstallNamespace)
55+
}
56+
57+
func Test_BundleRenderer_AppliesUserOptions(t *testing.T) {
58+
isOptionApplied := false
59+
_, _ = render.BundleRenderer{}.Render(render.RegistryV1{}, "install-namespace", func(options *render.Options) {
60+
isOptionApplied = true
61+
})
62+
require.True(t, isOptionApplied)
63+
}
64+
65+
func Test_WithTargetNamespaces(t *testing.T) {
66+
opts := &render.Options{
67+
TargetNamespaces: []string{"target-namespace"},
68+
}
69+
render.WithTargetNamespaces("a", "b", "c")(opts)
70+
require.Equal(t, []string{"a", "b", "c"}, opts.TargetNamespaces)
71+
}
72+
73+
func Test_WithUniqueNameGenerator(t *testing.T) {
74+
opts := &render.Options{
75+
UniqueNameGenerator: render.DefaultUniqueNameGenerator,
76+
}
77+
render.WithUniqueNameGenerator(func(s string, i interface{}) (string, error) {
78+
return "a man needs a name", nil
79+
})(opts)
80+
generatedName, _ := opts.UniqueNameGenerator("", nil)
81+
require.Equal(t, "a man needs a name", generatedName)
5582
}
5683

5784
func Test_BundleRenderer_CallsResourceGenerators(t *testing.T) {
@@ -65,7 +92,7 @@ func Test_BundleRenderer_CallsResourceGenerators(t *testing.T) {
6592
},
6693
},
6794
}
68-
objs, err := renderer.Render(render.RegistryV1{}, "", nil)
95+
objs, err := renderer.Render(render.RegistryV1{}, "")
6996
require.NoError(t, err)
7097
require.Equal(t, []client.Object{&corev1.Namespace{}, &corev1.Service{}, &appsv1.Deployment{}}, objs)
7198
}
@@ -81,7 +108,7 @@ func Test_BundleRenderer_ReturnsResourceGeneratorErrors(t *testing.T) {
81108
},
82109
},
83110
}
84-
objs, err := renderer.Render(render.RegistryV1{}, "", nil)
111+
objs, err := renderer.Render(render.RegistryV1{}, "")
85112
require.Nil(t, objs)
86113
require.Error(t, err)
87114
require.Contains(t, err.Error(), "generator error")

0 commit comments

Comments
 (0)