Skip to content

Commit d54e829

Browse files
authored
refactor StackSetController config in a separate struct (#689)
Signed-off-by: Noor Malik <[email protected]>
1 parent 7f7db14 commit d54e829

File tree

3 files changed

+100
-99
lines changed

3 files changed

+100
-99
lines changed

cmd/stackset-controller/main.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,23 @@ func main() {
7676
log.SetLevel(log.DebugLevel)
7777
}
7878

79+
stackSetConfig := controller.StackSetConfig{
80+
Namespace: config.Namespace,
81+
ControllerID: config.ControllerID,
82+
83+
ClusterDomains: config.ClusterDomains,
84+
BackendWeightsAnnotationKey: config.BackendWeightsAnnotationKey,
85+
SyncIngressAnnotations: config.SyncIngressAnnotations,
86+
87+
ReconcileWorkers: config.ReconcileWorkers,
88+
Interval: config.Interval,
89+
90+
RouteGroupSupportEnabled: config.RouteGroupSupportEnabled,
91+
ConfigMapSupportEnabled: config.ConfigMapSupportEnabled,
92+
SecretSupportEnabled: config.SecretSupportEnabled,
93+
PcsSupportEnabled: config.PCSSupportEnabled,
94+
}
95+
7996
ctx, cancel := context.WithCancel(context.Background())
8097
kubeConfig, err := configureKubeConfig(config.APIServer, defaultClientGOTimeout, ctx.Done())
8198
if err != nil {
@@ -89,18 +106,8 @@ func main() {
89106

90107
controller, err := controller.NewStackSetController(
91108
client,
92-
config.Namespace,
93-
config.ControllerID,
94-
config.ReconcileWorkers,
95-
config.BackendWeightsAnnotationKey,
96-
config.ClusterDomains,
97109
prometheus.DefaultRegisterer,
98-
config.Interval,
99-
config.RouteGroupSupportEnabled,
100-
config.SyncIngressAnnotations,
101-
config.ConfigMapSupportEnabled,
102-
config.SecretSupportEnabled,
103-
config.PCSSupportEnabled,
110+
stackSetConfig,
104111
)
105112
if err != nil {
106113
log.Fatalf("Failed to create Stackset controller: %v", err)

controller/stackset.go

Lines changed: 64 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -50,28 +50,35 @@ var configurationResourceNameError = "ConfigurationResource name must be prefixe
5050
// stackset resources and starts and maintains other controllers per
5151
// stackset resource.
5252
type StackSetController struct {
53-
logger *log.Entry
54-
client clientset.Interface
55-
namespace string
56-
syncIngressAnnotations []string
57-
controllerID string
58-
backendWeightsAnnotationKey string
59-
clusterDomains []string
60-
interval time.Duration
61-
stacksetEvents chan stacksetEvent
62-
stacksetStore map[types.UID]zv1.StackSet
63-
recorder kube_record.EventRecorder
64-
metricsReporter *core.MetricsReporter
65-
HealthReporter healthcheck.Handler
66-
routeGroupSupportEnabled bool
67-
now func() string
68-
reconcileWorkers int
69-
configMapSupportEnabled bool
70-
secretSupportEnabled bool
71-
pcsSupportEnabled bool
53+
logger *log.Entry
54+
client clientset.Interface
55+
config StackSetConfig
56+
stacksetEvents chan stacksetEvent
57+
stacksetStore map[types.UID]zv1.StackSet
58+
recorder kube_record.EventRecorder
59+
metricsReporter *core.MetricsReporter
60+
HealthReporter healthcheck.Handler
61+
now func() string
7262
sync.Mutex
7363
}
7464

65+
type StackSetConfig struct {
66+
Namespace string
67+
ControllerID string
68+
69+
ClusterDomains []string
70+
BackendWeightsAnnotationKey string
71+
SyncIngressAnnotations []string
72+
73+
ReconcileWorkers int
74+
Interval time.Duration
75+
76+
RouteGroupSupportEnabled bool
77+
ConfigMapSupportEnabled bool
78+
SecretSupportEnabled bool
79+
PcsSupportEnabled bool
80+
}
81+
7582
type stacksetEvent struct {
7683
Deleted bool
7784
StackSet *zv1.StackSet
@@ -93,44 +100,24 @@ func now() string {
93100
// NewStackSetController initializes a new StackSetController.
94101
func NewStackSetController(
95102
client clientset.Interface,
96-
namespace string,
97-
controllerID string,
98-
parallelWork int,
99-
backendWeightsAnnotationKey string,
100-
clusterDomains []string,
101103
registry prometheus.Registerer,
102-
interval time.Duration,
103-
routeGroupSupportEnabled bool,
104-
syncIngressAnnotations []string,
105-
configMapSupportEnabled bool,
106-
secretSupportEnabled bool,
107-
pcsSupportEnabled bool,
104+
config StackSetConfig,
108105
) (*StackSetController, error) {
109106
metricsReporter, err := core.NewMetricsReporter(registry)
110107
if err != nil {
111108
return nil, err
112109
}
113110

114111
return &StackSetController{
115-
logger: log.WithFields(log.Fields{"controller": "stackset"}),
116-
client: client,
117-
namespace: namespace,
118-
controllerID: controllerID,
119-
backendWeightsAnnotationKey: backendWeightsAnnotationKey,
120-
clusterDomains: clusterDomains,
121-
interval: interval,
122-
stacksetEvents: make(chan stacksetEvent, 1),
123-
stacksetStore: make(map[types.UID]zv1.StackSet),
124-
recorder: recorder.CreateEventRecorder(client),
125-
metricsReporter: metricsReporter,
126-
HealthReporter: healthcheck.NewHandler(),
127-
routeGroupSupportEnabled: routeGroupSupportEnabled,
128-
syncIngressAnnotations: syncIngressAnnotations,
129-
configMapSupportEnabled: configMapSupportEnabled,
130-
secretSupportEnabled: secretSupportEnabled,
131-
pcsSupportEnabled: pcsSupportEnabled,
132-
now: now,
133-
reconcileWorkers: parallelWork,
112+
logger: log.WithFields(log.Fields{"controller": "stackset"}),
113+
client: client,
114+
config: config,
115+
stacksetEvents: make(chan stacksetEvent, 1),
116+
stacksetStore: make(map[types.UID]zv1.StackSet),
117+
recorder: recorder.CreateEventRecorder(client),
118+
metricsReporter: metricsReporter,
119+
HealthReporter: healthcheck.NewHandler(),
120+
now: now,
134121
}, nil
135122
}
136123

@@ -157,7 +144,7 @@ func (c *StackSetController) Run(ctx context.Context) error {
157144

158145
// We're not alive if nextCheck is too far in the past
159146
c.HealthReporter.AddLivenessCheck("nextCheck", func() error {
160-
if time.Since(nextCheck) > 5*c.interval {
147+
if time.Since(nextCheck) > 5*c.config.Interval {
161148
return fmt.Errorf("nextCheck too old")
162149
}
163150
return nil
@@ -170,13 +157,13 @@ func (c *StackSetController) Run(ctx context.Context) error {
170157

171158
http.HandleFunc("/healthz", c.HealthReporter.LiveEndpoint)
172159

173-
nextCheck = time.Now().Add(-c.interval)
160+
nextCheck = time.Now().Add(-c.config.Interval)
174161

175162
for {
176163
select {
177164
case <-time.After(time.Until(nextCheck)):
178165

179-
nextCheck = time.Now().Add(c.interval)
166+
nextCheck = time.Now().Add(c.config.Interval)
180167

181168
stackSetContainers, err := c.collectResources(ctx)
182169
if err != nil {
@@ -185,7 +172,7 @@ func (c *StackSetController) Run(ctx context.Context) error {
185172
}
186173

187174
var reconcileGroup errgroup.Group
188-
reconcileGroup.SetLimit(c.reconcileWorkers)
175+
reconcileGroup.SetLimit(c.config.ReconcileWorkers)
189176
for stackset, container := range stackSetContainers {
190177
container := container
191178
stackset := stackset
@@ -263,9 +250,9 @@ func (c *StackSetController) collectResources(ctx context.Context) (map[types.UI
263250
stacksetContainer := core.NewContainer(
264251
&stackset,
265252
reconciler,
266-
c.backendWeightsAnnotationKey,
267-
c.clusterDomains,
268-
c.syncIngressAnnotations,
253+
c.config.BackendWeightsAnnotationKey,
254+
c.config.ClusterDomains,
255+
c.config.SyncIngressAnnotations,
269256
)
270257
stacksets[uid] = stacksetContainer
271258
}
@@ -280,7 +267,7 @@ func (c *StackSetController) collectResources(ctx context.Context) (map[types.UI
280267
return nil, err
281268
}
282269

283-
if c.routeGroupSupportEnabled {
270+
if c.config.RouteGroupSupportEnabled {
284271
err = c.collectRouteGroups(ctx, stacksets)
285272
if err != nil {
286273
return nil, err
@@ -302,21 +289,21 @@ func (c *StackSetController) collectResources(ctx context.Context) (map[types.UI
302289
return nil, err
303290
}
304291

305-
if c.configMapSupportEnabled {
292+
if c.config.ConfigMapSupportEnabled {
306293
err = c.collectConfigMaps(ctx, stacksets)
307294
if err != nil {
308295
return nil, err
309296
}
310297
}
311298

312-
if c.secretSupportEnabled {
299+
if c.config.SecretSupportEnabled {
313300
err = c.collectSecrets(ctx, stacksets)
314301
if err != nil {
315302
return nil, err
316303
}
317304
}
318305

319-
if c.pcsSupportEnabled {
306+
if c.config.PcsSupportEnabled {
320307
err = c.collectPlatformCredentialsSet(ctx, stacksets)
321308
if err != nil {
322309
return nil, err
@@ -327,7 +314,7 @@ func (c *StackSetController) collectResources(ctx context.Context) (map[types.UI
327314
}
328315

329316
func (c *StackSetController) collectIngresses(ctx context.Context, stacksets map[types.UID]*core.StackSetContainer) error {
330-
ingresses, err := c.client.NetworkingV1().Ingresses(c.namespace).List(ctx, metav1.ListOptions{})
317+
ingresses, err := c.client.NetworkingV1().Ingresses(c.config.Namespace).List(ctx, metav1.ListOptions{})
331318

332319
if err != nil {
333320
return fmt.Errorf("failed to list Ingresses: %v", err)
@@ -363,7 +350,7 @@ func (c *StackSetController) collectIngresses(ctx context.Context, stacksets map
363350
}
364351

365352
func (c *StackSetController) collectRouteGroups(ctx context.Context, stacksets map[types.UID]*core.StackSetContainer) error {
366-
rgs, err := c.client.RouteGroupV1().RouteGroups(c.namespace).List(
353+
rgs, err := c.client.RouteGroupV1().RouteGroups(c.config.Namespace).List(
367354
ctx,
368355
metav1.ListOptions{},
369356
)
@@ -401,7 +388,7 @@ func (c *StackSetController) collectRouteGroups(ctx context.Context, stacksets m
401388
}
402389

403390
func (c *StackSetController) collectStacks(ctx context.Context, stacksets map[types.UID]*core.StackSetContainer) error {
404-
stacks, err := c.client.ZalandoV1().Stacks(c.namespace).List(ctx, metav1.ListOptions{})
391+
stacks, err := c.client.ZalandoV1().Stacks(c.config.Namespace).List(ctx, metav1.ListOptions{})
405392
if err != nil {
406393
return fmt.Errorf("failed to list Stacks: %v", err)
407394
}
@@ -423,7 +410,7 @@ func (c *StackSetController) collectStacks(ctx context.Context, stacksets map[ty
423410
}
424411

425412
func (c *StackSetController) collectDeployments(ctx context.Context, stacksets map[types.UID]*core.StackSetContainer) error {
426-
deployments, err := c.client.AppsV1().Deployments(c.namespace).List(ctx, metav1.ListOptions{})
413+
deployments, err := c.client.AppsV1().Deployments(c.config.Namespace).List(ctx, metav1.ListOptions{})
427414
if err != nil {
428415
return fmt.Errorf("failed to list Deployments: %v", err)
429416
}
@@ -443,7 +430,7 @@ func (c *StackSetController) collectDeployments(ctx context.Context, stacksets m
443430
}
444431

445432
func (c *StackSetController) collectServices(ctx context.Context, stacksets map[types.UID]*core.StackSetContainer) error {
446-
services, err := c.client.CoreV1().Services(c.namespace).List(ctx, metav1.ListOptions{})
433+
services, err := c.client.CoreV1().Services(c.config.Namespace).List(ctx, metav1.ListOptions{})
447434
if err != nil {
448435
return fmt.Errorf("failed to list Services: %v", err)
449436
}
@@ -472,7 +459,7 @@ Items:
472459
}
473460

474461
func (c *StackSetController) collectHPAs(ctx context.Context, stacksets map[types.UID]*core.StackSetContainer) error {
475-
hpas, err := c.client.AutoscalingV2().HorizontalPodAutoscalers(c.namespace).List(ctx, metav1.ListOptions{})
462+
hpas, err := c.client.AutoscalingV2().HorizontalPodAutoscalers(c.config.Namespace).List(ctx, metav1.ListOptions{})
476463
if err != nil {
477464
return fmt.Errorf("failed to list HPAs: %v", err)
478465
}
@@ -504,7 +491,7 @@ func (c *StackSetController) collectConfigMaps(
504491
ctx context.Context,
505492
stacksets map[types.UID]*core.StackSetContainer,
506493
) error {
507-
configMaps, err := c.client.CoreV1().ConfigMaps(c.namespace).List(ctx, metav1.ListOptions{})
494+
configMaps, err := c.client.CoreV1().ConfigMaps(c.config.Namespace).List(ctx, metav1.ListOptions{})
508495
if err != nil {
509496
return fmt.Errorf("failed to list ConfigMaps: %v", err)
510497
}
@@ -527,7 +514,7 @@ func (c *StackSetController) collectSecrets(
527514
ctx context.Context,
528515
stacksets map[types.UID]*core.StackSetContainer,
529516
) error {
530-
secrets, err := c.client.CoreV1().Secrets(c.namespace).List(ctx, metav1.ListOptions{})
517+
secrets, err := c.client.CoreV1().Secrets(c.config.Namespace).List(ctx, metav1.ListOptions{})
531518
if err != nil {
532519
return fmt.Errorf("failed to list Secrets: %v", err)
533520
}
@@ -550,7 +537,7 @@ func (c *StackSetController) collectPlatformCredentialsSet(
550537
ctx context.Context,
551538
stacksets map[types.UID]*core.StackSetContainer,
552539
) error {
553-
platformCredentialsSets, err := c.client.ZalandoV1().PlatformCredentialsSets(c.namespace).
540+
platformCredentialsSets, err := c.client.ZalandoV1().PlatformCredentialsSets(c.config.Namespace).
554541
List(ctx, metav1.ListOptions{})
555542
if err != nil {
556543
return fmt.Errorf("failed to list PlatformCredentialsSet: %v", err)
@@ -603,15 +590,15 @@ func (c *StackSetController) errorEventf(object runtime.Object, reason string, e
603590
func (c *StackSetController) hasOwnership(stackset *zv1.StackSet) bool {
604591
if stackset.Annotations != nil {
605592
if owner, ok := stackset.Annotations[StacksetControllerControllerAnnotationKey]; ok {
606-
return owner == c.controllerID
593+
return owner == c.config.ControllerID
607594
}
608595
}
609-
return c.controllerID == ""
596+
return c.config.ControllerID == ""
610597
}
611598

612599
func (c *StackSetController) startWatch(ctx context.Context) error {
613600
informer := cache.NewSharedIndexInformer(
614-
cache.NewListWatchFromClient(c.client.ZalandoV1().RESTClient(), "stacksets", c.namespace, fields.Everything()),
601+
cache.NewListWatchFromClient(c.client.ZalandoV1().RESTClient(), "stacksets", c.config.Namespace, fields.Everything()),
615602
&zv1.StackSet{},
616603
0, // skip resync
617604
cache.Indexers{},
@@ -770,7 +757,7 @@ func (c *StackSetController) CreateCurrentStack(ctx context.Context, ssc *core.S
770757
return nil
771758
}
772759

773-
if c.configMapSupportEnabled || c.secretSupportEnabled {
760+
if c.config.ConfigMapSupportEnabled || c.config.SecretSupportEnabled {
774761
// ensure that ConfigurationResources are prefixed by Stack name.
775762
if err := validateAllConfigurationResourcesNames(newStack.Stack); err != nil {
776763
return err
@@ -1022,7 +1009,7 @@ func (c *StackSetController) ReconcileStackResources(ctx context.Context, ssc *c
10221009
return c.errorEventf(sc.Stack, "FailedManageIngressSegment", err)
10231010
}
10241011

1025-
if c.routeGroupSupportEnabled {
1012+
if c.config.RouteGroupSupportEnabled {
10261013
err = c.ReconcileStackRouteGroup(ctx, sc.Stack, sc.Resources.RouteGroup, sc.GenerateRouteGroup)
10271014
if err != nil {
10281015
return c.errorEventf(sc.Stack, "FailedManageRouteGroup", err)
@@ -1043,21 +1030,21 @@ func (c *StackSetController) ReconcileStackResources(ctx context.Context, ssc *c
10431030
}
10441031
}
10451032

1046-
if c.configMapSupportEnabled {
1033+
if c.config.ConfigMapSupportEnabled {
10471034
err := c.ReconcileStackConfigMapRefs(ctx, sc.Stack, sc.UpdateObjectMeta)
10481035
if err != nil {
10491036
return c.errorEventf(sc.Stack, "FailedManageConfigMapRefs", err)
10501037
}
10511038
}
10521039

1053-
if c.secretSupportEnabled {
1040+
if c.config.SecretSupportEnabled {
10541041
err := c.ReconcileStackSecretRefs(ctx, sc.Stack, sc.UpdateObjectMeta)
10551042
if err != nil {
10561043
return c.errorEventf(sc.Stack, "FailedManageSecretRefs", err)
10571044
}
10581045
}
10591046

1060-
if c.pcsSupportEnabled {
1047+
if c.config.PcsSupportEnabled {
10611048
err = c.ReconcileStackPlatformCredentialsSets(
10621049
ctx,
10631050
sc.Stack,

0 commit comments

Comments
 (0)