Skip to content

Commit d895bba

Browse files
committed
wip
1 parent 275118d commit d895bba

5 files changed

Lines changed: 74 additions & 20 deletions

File tree

bindata/operator/operator.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ spec:
7676
env:
7777
- name: OPENSTACK_RELEASE_VERSION
7878
value: '{{ .OpenstackReleaseVersion }}'
79+
- name: LEASE_DURATION
80+
value: '{{ .OperatorLeaseDuration }}'
81+
- name: RENEW_DEADLINE
82+
value: '{{ .OperatorRenewDeadline }}'
83+
- name: RETRY_PERIOD
84+
value: '{{ .OperatorRetryPeriod }}'
7985
{{ range $envName, $envValue := .OpenStackServiceRelatedImages }}
8086
- name: {{ $envName }}
8187
value: {{ $envValue }}

cmd/operator/main.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ import (
4242

4343
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
4444

45-
operatorv1beta1 "github.com/openstack-k8s-operators/openstack-operator/apis/operator/v1beta1"
45+
"github.com/openstack-k8s-operators/lib-common/modules/common/operator"
46+
operatorv1 "github.com/openstack-k8s-operators/openstack-operator/apis/operator/v1beta1"
4647
operatorcontrollers "github.com/openstack-k8s-operators/openstack-operator/controllers/operator"
4748
)
4849

@@ -53,7 +54,7 @@ var (
5354

5455
func init() {
5556
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
56-
utilruntime.Must(operatorv1beta1.AddToScheme(scheme))
57+
utilruntime.Must(operatorv1.AddToScheme(scheme))
5758
}
5859

5960
func main() {
@@ -87,7 +88,7 @@ func main() {
8788
c.NextProtos = []string{"http/1.1"}
8889
}
8990

90-
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
91+
options := ctrl.Options{
9192
Scheme: scheme,
9293
Metrics: metricsserver.Options{
9394
BindAddress: metricsAddr,
@@ -111,7 +112,15 @@ func main() {
111112
// if you are doing or is intended to do any operation such as perform cleanups
112113
// after the manager stops then its usage might be unsafe.
113114
// LeaderElectionReleaseOnCancel: true,
114-
})
115+
}
116+
117+
err = operator.SetManagerOptions(&options, setupLog)
118+
if err != nil {
119+
setupLog.Error(err, "unable to set manager options")
120+
os.Exit(1)
121+
}
122+
123+
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
115124
if err != nil {
116125
setupLog.Error(err, "unable to start manager")
117126
os.Exit(1)

config/manager/manager.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ spec:
4444
env:
4545
- name: OPENSTACK_RELEASE_VERSION
4646
value: '{{ .OpenstackReleaseVersion }}'
47+
- name: LEASE_DURATION
48+
value: "137"
49+
- name: RENEW_DEADLINE
50+
value: "107"
51+
- name: RETRY_PERIOD
52+
value: "26"
4753
envCustomImage: replace_me #NOTE: this is used via the Makefile to inject a custom template loop that kustomize won't allow
4854
image: '{{ .OperatorImage }}'
4955
name: manager

controllers/operator/openstack_controller.go

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ var (
7171
operatorImage string
7272
kubeRbacProxyImage string
7373
openstackReleaseVersion string
74+
operatorLeaseDuration string
75+
operatorRenewDeadline string
76+
operatorRetryPeriod string
7477
)
7578

7679
// SetupEnv -
@@ -79,27 +82,45 @@ func SetupEnv() {
7982
envRelatedOpenStackServiceImages = make(map[string]*string)
8083
for _, name := range os.Environ() {
8184
envArr := strings.Split(name, "=")
85+
if len(envArr) != 2 { // Handle cases where the environment variable doesn't have a value
86+
continue
87+
}
88+
key := envArr[0]
89+
value := envArr[1]
8290

83-
if strings.HasSuffix(envArr[0], "_OPERATOR_MANAGER_IMAGE_URL") {
84-
operatorName := strings.TrimPrefix(envArr[0], "RELATED_IMAGE_")
91+
switch {
92+
case strings.HasSuffix(key, "_OPERATOR_MANAGER_IMAGE_URL"):
93+
operatorName := strings.TrimPrefix(key, "RELATED_IMAGE_")
8594
operatorName = strings.TrimSuffix(operatorName, "_OPERATOR_MANAGER_IMAGE_URL")
8695
operatorName = strings.ToLower(operatorName)
8796
operatorName = strings.ReplaceAll(operatorName, "_", "-")
88-
// rabbitmq-cluster is a special case with an alternate deployment template
8997
if operatorName == "rabbitmq-cluster" {
90-
rabbitmqImage = envArr[1]
98+
rabbitmqImage = value
9199
} else {
92-
envRelatedOperatorImages[operatorName] = &envArr[1]
100+
envRelatedOperatorImages[operatorName] = &value
93101
}
94-
log.Log.Info("Found operator related image", "operator", operatorName, "image", envArr[1])
95-
} else if strings.HasPrefix(envArr[0], "RELATED_IMAGE_") {
96-
envRelatedOpenStackServiceImages[envArr[0]] = &envArr[1]
97-
} else if envArr[0] == "KUBE_RBAC_PROXY" {
98-
kubeRbacProxyImage = envArr[1]
99-
} else if envArr[0] == "OPERATOR_IMAGE_URL" {
100-
operatorImage = envArr[1]
101-
} else if envArr[0] == "OPENSTACK_RELEASE_VERSION" {
102-
openstackReleaseVersion = envArr[1]
102+
log.Log.Info("Found operator related image", "operator", operatorName, "image", value)
103+
104+
case strings.HasPrefix(key, "RELATED_IMAGE_"):
105+
envRelatedOpenStackServiceImages[key] = &value
106+
107+
case key == "KUBE_RBAC_PROXY":
108+
kubeRbacProxyImage = value
109+
110+
case key == "OPERATOR_IMAGE_URL":
111+
operatorImage = value
112+
113+
case key == "OPENSTACK_RELEASE_VERSION":
114+
openstackReleaseVersion = value
115+
116+
case key == "LEASE_DURATION":
117+
operatorLeaseDuration = value
118+
119+
case key == "RENEW_DEADLINE":
120+
operatorRenewDeadline = value
121+
122+
case key == "RETRY_PERIOD":
123+
operatorRetryPeriod = value
103124
}
104125
}
105126
}
@@ -455,6 +476,9 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera
455476
data.Data["KubeRbacProxyImage"] = kubeRbacProxyImage
456477
data.Data["OpenstackReleaseVersion"] = openstackReleaseVersion
457478
data.Data["OpenStackServiceRelatedImages"] = envRelatedOpenStackServiceImages
479+
data.Data["OperatorLeaseDuration"] = operatorLeaseDuration
480+
data.Data["OperatorRenewDeadline"] = operatorRenewDeadline
481+
data.Data["OperatorRetryPeriod"] = operatorRetryPeriod
458482
return r.renderAndApply(ctx, instance, data, "operator", true)
459483
}
460484

main.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ import (
8383
machineconfig "github.com/openshift/api/machineconfiguration/v1"
8484
ocp_image "github.com/openshift/api/operator/v1alpha1"
8585

86+
"github.com/openstack-k8s-operators/lib-common/modules/common/operator"
8687
clientcontrollers "github.com/openstack-k8s-operators/openstack-operator/controllers/client"
8788
corecontrollers "github.com/openstack-k8s-operators/openstack-operator/controllers/core"
8889
dataplanecontrollers "github.com/openstack-k8s-operators/openstack-operator/controllers/dataplane"
@@ -165,7 +166,7 @@ func main() {
165166
c.NextProtos = []string{"http/1.1"}
166167
}
167168

168-
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
169+
options := ctrl.Options{
169170
Scheme: scheme,
170171
Metrics: metricsserver.Options{
171172
BindAddress: metricsAddr,
@@ -189,7 +190,15 @@ func main() {
189190
// if you are doing or is intended to do any operation such as perform cleanups
190191
// after the manager stops then its usage might be unsafe.
191192
// LeaderElectionReleaseOnCancel: true,
192-
})
193+
}
194+
195+
err = operator.SetManagerOptions(&options, setupLog)
196+
if err != nil {
197+
setupLog.Error(err, "unable to set manager options")
198+
os.Exit(1)
199+
}
200+
201+
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
193202
if err != nil {
194203
setupLog.Error(err, "unable to start manager")
195204
os.Exit(1)

0 commit comments

Comments
 (0)