Skip to content

Commit 5bbfb67

Browse files
committed
refactor: Merge remote-tracking branch 'origin/main' into dkoshkin/feat-image-registry
2 parents ff58ab5 + e447ee6 commit 5bbfb67

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1401
-809
lines changed

cmd/main.go

Lines changed: 12 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,13 @@ import (
2424
"sigs.k8s.io/controller-runtime/pkg/manager"
2525
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
2626

27-
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/apis"
2827
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers"
29-
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers/mutation"
3028
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/server"
3129
awsclusterconfig "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/clusterconfig"
32-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/mutation/region"
30+
awsmutation "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/mutation"
3331
dockerclusterconfig "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/docker/clusterconfig"
34-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/docker/mutation/customimage"
35-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/lifecycle/cni/calico"
36-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/lifecycle/nfd"
37-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/lifecycle/servicelbgc"
38-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/auditpolicy"
39-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/etcd"
40-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/extraapiservercertsans"
41-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/httpproxy"
42-
imageregistrycredentials "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/imageregistries/credentials"
43-
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/kubernetesimagerepository"
32+
dockermutation "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/docker/mutation"
33+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/lifecycle"
4434
)
4535

4636
// Flags.
@@ -88,16 +78,14 @@ func main() {
8878
pflag.CommandLine.StringVar(&mgrOptions.PprofBindAddress, "profiler-address", "",
8979
"Bind address to expose the pprof profiler (e.g. localhost:6060)")
9080

91-
calicoCNIConfig := &calico.CalicoCNIConfig{}
92-
nfdConfig := &nfd.NFDConfig{}
93-
9481
runtimeWebhookServerOpts := server.NewServerOptions()
9582

83+
genericLifecycleHandlers := lifecycle.New()
84+
9685
// Initialize and parse command line flags.
9786
initFlags(pflag.CommandLine)
9887
runtimeWebhookServerOpts.AddFlags(pflag.CommandLine)
99-
nfdConfig.AddFlags("nfd", pflag.CommandLine)
100-
calicoCNIConfig.AddFlags("calicocni", pflag.CommandLine)
88+
genericLifecycleHandlers.AddFlags(pflag.CommandLine)
10189
pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
10290
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
10391
pflag.Parse()
@@ -106,7 +94,7 @@ func main() {
10694

10795
// Validates logs flags using Kubernetes component-base machinery and applies them
10896
if err := logsv1.ValidateAndApply(logOptions, nil); err != nil {
109-
setupLog.Error(err, "unable to start extension")
97+
setupLog.Error(err, "unable to apply logging configuration")
11098
os.Exit(1)
11199
}
112100

@@ -121,61 +109,22 @@ func main() {
121109
os.Exit(1)
122110
}
123111

124-
// Handlers for lifecycle hooks.
125-
genericLifecycleHandlers := []handlers.Named{
126-
calico.New(mgr.GetClient(), calicoCNIConfig),
127-
nfd.New(mgr.GetClient(), nfdConfig),
128-
servicelbgc.New(mgr.GetClient()),
129-
}
130-
131-
// This genericMetaPatchHandlers combines all other patch and variable handlers under a single handler.
132-
// It allows to specify configuration under a single variable.
133-
genericMetaPatchHandlers := []mutation.MetaMutater{
134-
auditpolicy.NewPatch(),
135-
etcd.NewMetaPatch(),
136-
extraapiservercertsans.NewMetaPatch(),
137-
httpproxy.NewMetaPatch(mgr.GetClient()),
138-
kubernetesimagerepository.NewMetaPatch(),
139-
imageregistrycredentials.NewMetaPatch(mgr.GetClient()),
140-
}
141-
142-
// awsMetaPatchHandlers combines all AWS patch and variable handlers under a single handler.
112+
// awsMetaHandlers combines all AWS patch and variable handlers under a single handler.
143113
// It allows to specify configuration under a single variable.
144-
awsMetaPatchHandlers := append(
145-
[]mutation.MetaMutater{
146-
region.NewMetaPatch(),
147-
},
148-
genericMetaPatchHandlers...,
149-
)
150-
151114
awsMetaHandlers := []handlers.Named{
152115
awsclusterconfig.NewVariable(),
153-
mutation.NewMetaGeneratePatchesHandler(
154-
"awsClusterConfigPatch",
155-
apis.CAPADecoder(),
156-
awsMetaPatchHandlers...),
116+
awsmutation.MetaPatchHandler(mgr),
157117
}
158118

159-
// dockerMetaPatchHandlers combines all Docker patch and variable handlers under a single handler.
119+
// dockerMetaHandlers combines all Docker patch and variable handlers under a single handler.
160120
// It allows to specify configuration under a single variable.
161-
dockerMetaPatchHandlers := append(
162-
[]mutation.MetaMutater{
163-
customimage.NewMetaPatch(),
164-
},
165-
genericMetaPatchHandlers...,
166-
)
167-
168121
dockerMetaHandlers := []handlers.Named{
169122
dockerclusterconfig.NewVariable(),
170-
mutation.NewMetaGeneratePatchesHandler(
171-
"dockerClusterConfigPatch",
172-
apis.CAPDDecoder(),
173-
dockerMetaPatchHandlers...,
174-
),
123+
dockermutation.MetaPatchHandler(mgr),
175124
}
176125

177126
var allHandlers []handlers.Named
178-
allHandlers = append(allHandlers, genericLifecycleHandlers...)
127+
allHandlers = append(allHandlers, genericLifecycleHandlers.AllHandlers(mgr)...)
179128
allHandlers = append(allHandlers, awsMetaHandlers...)
180129
allHandlers = append(allHandlers, dockerMetaHandlers...)
181130

common/pkg/testutils/capitest/patches.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ func ValidateGeneratePatches[T mutation.GeneratePatches](
4141
) {
4242
t.Helper()
4343

44-
t.Parallel()
45-
4644
for testIdx := range testDefs {
4745
tt := testDefs[testIdx]
4846

@@ -98,10 +96,27 @@ func ValidateGeneratePatches[T mutation.GeneratePatches](
9896
}
9997
}
10098

101-
// v returns a runtimehooksv1.Variable with the passed name and value.
102-
func VariableWithValue(name string, value any) runtimehooksv1.Variable {
99+
// VariableWithValue returns a runtimehooksv1.Variable with the passed name and value.
100+
func VariableWithValue(
101+
variableName string,
102+
value any,
103+
variablePath ...string,
104+
) runtimehooksv1.Variable {
105+
if len(variablePath) > 0 {
106+
rootValue := make(map[string]any, 1)
107+
nestedValue := rootValue
108+
109+
for _, p := range variablePath[:len(variablePath)-1] {
110+
nestedValue[p] = make(map[string]any, 1)
111+
nestedValue = nestedValue[p].(map[string]any)
112+
}
113+
114+
nestedValue[variablePath[len(variablePath)-1]] = value
115+
value = rootValue
116+
}
117+
103118
return runtimehooksv1.Variable{
104-
Name: name,
119+
Name: variableName,
105120
Value: apiextensionsv1.JSON{Raw: serializer.ToJSON(value)},
106121
}
107122
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright 2023 D2iQ, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package mutation
5+
6+
import (
7+
"sigs.k8s.io/controller-runtime/pkg/manager"
8+
9+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/apis"
10+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers"
11+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers/mutation"
12+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/mutation/region"
13+
genericmutation "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation"
14+
)
15+
16+
// MetaPatchHandler returns a meta patch handler for mutating CAPD clusters.
17+
func MetaPatchHandler(mgr manager.Manager) handlers.Named {
18+
patchHandlers := append(
19+
[]mutation.MetaMutater{
20+
region.NewMetaPatch(),
21+
},
22+
genericmutation.MetaMutaters(mgr)...,
23+
)
24+
25+
return mutation.NewMetaGeneratePatchesHandler(
26+
"awsClusterConfigPatch",
27+
apis.CAPADecoder(),
28+
patchHandlers...,
29+
)
30+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// Copyright 2023 D2iQ, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package mutation
5+
6+
import (
7+
"testing"
8+
9+
"k8s.io/client-go/rest"
10+
"sigs.k8s.io/controller-runtime/pkg/client"
11+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
12+
"sigs.k8s.io/controller-runtime/pkg/manager"
13+
14+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers/mutation"
15+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/mutation/region"
16+
regiontests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/mutation/region/tests"
17+
auditpolicytests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/auditpolicy/tests"
18+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/etcd"
19+
etcdtests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/etcd/tests"
20+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/extraapiservercertsans"
21+
extraapiservercertsanstests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/extraapiservercertsans/tests"
22+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/httpproxy"
23+
httpproxytests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/httpproxy/tests"
24+
imageregistrycredentials "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/imageregistries/credentials"
25+
imageregistrycredentialstests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/imageregistries/credentials/tests"
26+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/kubernetesimagerepository"
27+
kubernetesimagerepositorytests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/mutation/kubernetesimagerepository/tests"
28+
)
29+
30+
func metaPatchGeneratorFunc(mgr manager.Manager) func() mutation.GeneratePatches {
31+
return func() mutation.GeneratePatches {
32+
return MetaPatchHandler(mgr).(mutation.GeneratePatches)
33+
}
34+
}
35+
36+
func TestGeneratePatches(t *testing.T) {
37+
t.Parallel()
38+
39+
mgr, _ := manager.New(
40+
&rest.Config{},
41+
manager.Options{
42+
NewClient: func(_ *rest.Config, _ client.Options) (client.Client, error) {
43+
return fake.NewClientBuilder().Build(), nil
44+
},
45+
},
46+
)
47+
48+
regiontests.TestGeneratePatches(
49+
t,
50+
metaPatchGeneratorFunc(mgr),
51+
"clusterConfig",
52+
region.VariableName,
53+
)
54+
55+
auditpolicytests.TestGeneratePatches(
56+
t,
57+
metaPatchGeneratorFunc(mgr),
58+
)
59+
60+
httpproxytests.TestGeneratePatches(
61+
t,
62+
metaPatchGeneratorFunc(mgr),
63+
"clusterConfig",
64+
httpproxy.VariableName,
65+
)
66+
67+
etcdtests.TestGeneratePatches(
68+
t,
69+
metaPatchGeneratorFunc(mgr),
70+
"clusterConfig",
71+
etcd.VariableName,
72+
)
73+
74+
extraapiservercertsanstests.TestGeneratePatches(
75+
t,
76+
metaPatchGeneratorFunc(mgr),
77+
"clusterConfig",
78+
extraapiservercertsans.VariableName,
79+
)
80+
81+
kubernetesimagerepositorytests.TestGeneratePatches(
82+
t,
83+
metaPatchGeneratorFunc(mgr),
84+
"clusterConfig",
85+
kubernetesimagerepository.VariableName,
86+
)
87+
88+
imageregistrycredentialstests.TestGeneratePatches(
89+
t,
90+
metaPatchGeneratorFunc(mgr),
91+
mgr.GetClient(),
92+
"clusterConfig",
93+
"imageRegistries",
94+
imageregistrycredentials.VariableName,
95+
)
96+
}

pkg/handlers/aws/mutation/region/inject.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ var (
4343
)
4444

4545
func NewPatch() *awsRegionPatchHandler {
46-
return newAWSRegionPatchHandler(variableName)
46+
return newAWSRegionPatchHandler(VariableName)
4747
}
4848

4949
func NewMetaPatch() *awsRegionPatchHandler {
50-
return newAWSRegionPatchHandler(clusterconfig.MetaVariableName, variableName)
50+
return newAWSRegionPatchHandler(clusterconfig.MetaVariableName, VariableName)
5151
}
5252

5353
func newAWSRegionPatchHandler(

pkg/handlers/aws/mutation/region/inject_test.go

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,16 @@ package region
66
import (
77
"testing"
88

9-
. "github.com/onsi/gomega"
10-
runtimehooksv1 "sigs.k8s.io/cluster-api/exp/runtime/hooks/api/v1alpha1"
11-
129
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers/mutation"
13-
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/testutils/capitest"
14-
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/testutils/capitest/request"
10+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/aws/mutation/region/tests"
1511
)
1612

1713
func TestGeneratePatches(t *testing.T) {
18-
capitest.ValidateGeneratePatches(
14+
t.Parallel()
15+
16+
tests.TestGeneratePatches(
1917
t,
2018
func() mutation.GeneratePatches { return NewPatch() },
21-
capitest.PatchTestDef{
22-
Name: "unset variable",
23-
},
24-
capitest.PatchTestDef{
25-
Name: "region set",
26-
Vars: []runtimehooksv1.Variable{
27-
capitest.VariableWithValue(
28-
variableName,
29-
"a-specific-region",
30-
),
31-
},
32-
RequestItem: request.NewAWSClusterTemplateRequestItem("1234"),
33-
ExpectedPatchMatchers: []capitest.JSONPatchMatcher{{
34-
Operation: "add",
35-
Path: "/spec/template/spec/region",
36-
ValueMatcher: Equal("a-specific-region"),
37-
}},
38-
},
19+
VariableName,
3920
)
4021
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright 2023 D2iQ, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package tests
5+
6+
import (
7+
"testing"
8+
9+
"github.com/onsi/gomega"
10+
runtimehooksv1 "sigs.k8s.io/cluster-api/exp/runtime/hooks/api/v1alpha1"
11+
12+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers/mutation"
13+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/testutils/capitest"
14+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/testutils/capitest/request"
15+
)
16+
17+
func TestGeneratePatches(
18+
t *testing.T,
19+
generatorFunc func() mutation.GeneratePatches,
20+
variableName string,
21+
variablePath ...string,
22+
) {
23+
t.Helper()
24+
25+
capitest.ValidateGeneratePatches(
26+
t,
27+
generatorFunc,
28+
capitest.PatchTestDef{
29+
Name: "unset variable",
30+
},
31+
capitest.PatchTestDef{
32+
Name: "region set",
33+
Vars: []runtimehooksv1.Variable{
34+
capitest.VariableWithValue(
35+
variableName,
36+
"a-specific-region",
37+
variablePath...,
38+
),
39+
},
40+
RequestItem: request.NewAWSClusterTemplateRequestItem("1234"),
41+
ExpectedPatchMatchers: []capitest.JSONPatchMatcher{{
42+
Operation: "add",
43+
Path: "/spec/template/spec/region",
44+
ValueMatcher: gomega.Equal("a-specific-region"),
45+
}},
46+
},
47+
)
48+
}

0 commit comments

Comments
 (0)