Skip to content

Commit ce7abad

Browse files
committed
pass namespace option
1 parent d9e5c26 commit ce7abad

6 files changed

Lines changed: 76 additions & 20 deletions

File tree

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package cmd
22

3-
import "github.com/spf13/pflag"
3+
import (
4+
"github.com/spf13/pflag"
5+
6+
"github.com/pomerium/ingress-controller/controllers/certificate"
7+
)
48

59
type certificateControllerOptions struct {
610
Name string
711
}
812

913
func (o *certificateControllerOptions) setupFlags(flags *pflag.FlagSet) {
10-
flags.StringVar(&o.Name, "certificate-controller-name", "pomerium-certificate",
14+
flags.StringVar(&o.Name, "certificate-controller-name", certificate.DefaultControllerName,
1115
"the name of the certificate controller")
1216
}

controllers/certificate/controller.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
core_v1 "k8s.io/api/core/v1"
2121
apierrors "k8s.io/apimachinery/pkg/api/errors"
2222
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23-
"k8s.io/apimachinery/pkg/types"
2423
"k8s.io/apimachinery/pkg/util/rand"
2524
controllerruntime "sigs.k8s.io/controller-runtime"
2625
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -41,28 +40,28 @@ const (
4140
)
4241

4342
type certificateController struct {
44-
globalSettingsName types.NamespacedName
45-
kubernetesClient client.Client
46-
dataBrokerClient databrokerpb.DataBrokerServiceClient
43+
cfg *controllerConfig
44+
kubernetesClient client.Client
45+
dataBrokerClient databrokerpb.DataBrokerServiceClient
46+
4747
dataBrokerCollector *dataBrokerCollector
4848
}
4949

5050
// NewCertificateController creates a new certificate controller.
5151
func NewCertificateController(
5252
mgr controllerruntime.Manager,
53-
globalSettingsName types.NamespacedName,
5453
dataBrokerClient databrokerpb.DataBrokerServiceClient,
55-
controllerName string,
54+
options ...Option,
5655
) error {
5756
c := &certificateController{
58-
globalSettingsName: globalSettingsName,
59-
kubernetesClient: mgr.GetClient(),
60-
dataBrokerClient: dataBrokerClient,
57+
cfg: getControllerConfig(options...),
58+
kubernetesClient: mgr.GetClient(),
59+
dataBrokerClient: dataBrokerClient,
6160
}
6261
c.dataBrokerCollector = newDataBrokerCollector(c)
6362

6463
err := controllerruntime.NewControllerManagedBy(mgr).
65-
Named(controllerName).
64+
Named(c.cfg.controllerName).
6665
Watches(new(core_v1.Secret), &handler.EnqueueRequestForObject{}).
6766
Watches(new(pomerium_ingress_v1.Pomerium), &handler.EnqueueRequestForObject{}).
6867
Watches(new(certmanager_v1.Certificate), &handler.EnqueueRequestForObject{}).
@@ -83,7 +82,7 @@ func (c *certificateController) reconcile(ctx context.Context) error {
8382
// retrieve the settings, certificates and secrets
8483

8584
var settings pomerium_ingress_v1.Pomerium
86-
if err := c.kubernetesClient.Get(ctx, c.globalSettingsName, &settings); err != nil {
85+
if err := c.kubernetesClient.Get(ctx, c.cfg.globalSettingsName, &settings); err != nil {
8786
return fmt.Errorf("error retrieving pomerium settings: %w", err)
8887
}
8988

@@ -106,6 +105,10 @@ func (c *certificateController) reconcile(ctx context.Context) error {
106105
}
107106
}
108107

108+
if c.cfg.namespace != nil {
109+
namespace = *c.cfg.namespace
110+
}
111+
109112
// if no namespace was defined, use the current pod namespace
110113
if namespace == "" {
111114
var err error
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package certificate
2+
3+
import "k8s.io/apimachinery/pkg/types"
4+
5+
// DefaultControllerName is the default controller name.
6+
var DefaultControllerName = "pomerium-certificate"
7+
8+
type controllerConfig struct {
9+
controllerName string
10+
globalSettingsName types.NamespacedName
11+
// if not set, discover the namespace from the issuer or the pod where the
12+
// controller is running
13+
namespace *string
14+
}
15+
16+
// An Option customizes the config.
17+
type Option func(cfg *controllerConfig)
18+
19+
// WithControllerName sets the controller name in the config.
20+
func WithControllerName(controllerName string) Option {
21+
return func(cfg *controllerConfig) {
22+
cfg.controllerName = controllerName
23+
}
24+
}
25+
26+
// WithGlobalSettingsName sets the global settings name in the config.
27+
func WithGlobalSettingsName(globalSettingsName types.NamespacedName) Option {
28+
return func(cfg *controllerConfig) {
29+
cfg.globalSettingsName = globalSettingsName
30+
}
31+
}
32+
33+
// WithNamespace sets the namespace option in the config.
34+
func WithNamespace(namespace string) Option {
35+
return func(cfg *controllerConfig) {
36+
cfg.namespace = new(namespace)
37+
}
38+
}
39+
40+
func getControllerConfig(options ...Option) *controllerConfig {
41+
cfg := new(controllerConfig)
42+
WithControllerName(DefaultControllerName)(cfg)
43+
for _, o := range options {
44+
o(cfg)
45+
}
46+
return cfg
47+
}

controllers/certificate/databroker.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,17 +196,17 @@ func (c *dataBrokerCollector) sync(ctx context.Context) error {
196196

197197
if err := c.controller.kubernetesClient.Status().Patch(ctx, &pomerium_ingress_v1.Pomerium{
198198
ObjectMeta: meta_v1.ObjectMeta{
199-
Namespace: c.controller.globalSettingsName.Namespace,
200-
Name: c.controller.globalSettingsName.Name,
199+
Namespace: c.controller.cfg.globalSettingsName.Namespace,
200+
Name: c.controller.cfg.globalSettingsName.Name,
201201
},
202202
Status: pomerium_ingress_v1.PomeriumStatus{
203203
CertificateAutoProvisionStatus: &pomerium_ingress_v1.CertificateAutoProvisionStatus{
204204
DataBrokerLastUpdated: meta_v1.Now(),
205205
},
206206
},
207207
}, client.MergeFrom(&pomerium_ingress_v1.Pomerium{ObjectMeta: meta_v1.ObjectMeta{
208-
Namespace: c.controller.globalSettingsName.Namespace,
209-
Name: c.controller.globalSettingsName.Name,
208+
Namespace: c.controller.cfg.globalSettingsName.Namespace,
209+
Name: c.controller.cfg.globalSettingsName.Name,
210210
}})); err != nil {
211211
log.FromContext(ctx).Error(err, "error creating event")
212212
}

controllers/certificate/integration_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ func (s *ControllerTestSuite) startController(ctx context.Context, client databr
130130
s.NoError(err)
131131
s.NoError(certificate.NewCertificateController(
132132
mgr,
133-
types.NamespacedName{Name: testGlobalSettingsName},
134133
client,
135-
testNamespace,
134+
certificate.WithGlobalSettingsName(types.NamespacedName{Name: testGlobalSettingsName}),
135+
certificate.WithNamespace(testNamespace),
136136
))
137137

138138
go func() {

controllers/config_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ func (c *Controller) RunLeased(ctx context.Context) (err error) {
9393
if err = settings.NewSettingsController(mgr, c.Reconciler, *c.GlobalSettings, "pomerium-crd", true, health_ctrl.SettingsReconciler); err != nil {
9494
return fmt.Errorf("create settings controller: %w", err)
9595
}
96-
if err = certificate.NewCertificateController(mgr, *c.GlobalSettings, c.DataBrokerServiceClient, c.CertificateControllerName); err != nil {
96+
if err = certificate.NewCertificateController(mgr, c.DataBrokerServiceClient,
97+
certificate.WithControllerName(c.CertificateControllerName),
98+
certificate.WithGlobalSettingsName(*c.GlobalSettings)); err != nil {
9799
return fmt.Errorf("error creating certificate controller: %w", err)
98100
}
99101
} else {

0 commit comments

Comments
 (0)