Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions bindata/operator/operator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@ spec:
env:
- name: OPENSTACK_RELEASE_VERSION
value: '{{ .OpenstackReleaseVersion }}'
- name: LEASE_DURATION
value: '{{ .OperatorLeaseDuration }}'
- name: RENEW_DEADLINE
value: '{{ .OperatorRenewDeadline }}'
- name: RETRY_PERIOD
value: '{{ .OperatorRetryPeriod }}'
{{ range $envName, $envValue := .OpenStackServiceRelatedImages }}
- name: {{ $envName }}
value: {{ $envValue }}
Expand Down
17 changes: 13 additions & 4 deletions cmd/operator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ import (

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

operatorv1beta1 "github.com/openstack-k8s-operators/openstack-operator/apis/operator/v1beta1"
"github.com/openstack-k8s-operators/lib-common/modules/common/operator"
operatorv1 "github.com/openstack-k8s-operators/openstack-operator/apis/operator/v1beta1"
operatorcontrollers "github.com/openstack-k8s-operators/openstack-operator/controllers/operator"
)

Expand All @@ -53,7 +54,7 @@ var (

func init() {
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
utilruntime.Must(operatorv1beta1.AddToScheme(scheme))
utilruntime.Must(operatorv1.AddToScheme(scheme))
}

func main() {
Expand Down Expand Up @@ -87,7 +88,7 @@ func main() {
c.NextProtos = []string{"http/1.1"}
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
options := ctrl.Options{
Scheme: scheme,
Metrics: metricsserver.Options{
BindAddress: metricsAddr,
Expand All @@ -111,7 +112,15 @@ func main() {
// if you are doing or is intended to do any operation such as perform cleanups
// after the manager stops then its usage might be unsafe.
// LeaderElectionReleaseOnCancel: true,
})
}

err = operator.SetManagerOptions(&options, setupLog)
if err != nil {
setupLog.Error(err, "unable to set manager options")
os.Exit(1)
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
if err != nil {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
Expand Down
6 changes: 6 additions & 0 deletions config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ spec:
env:
- name: OPENSTACK_RELEASE_VERSION
value: '{{ .OpenstackReleaseVersion }}'
- name: LEASE_DURATION
value: "137"
- name: RENEW_DEADLINE
value: "107"
- name: RETRY_PERIOD
Comment on lines +47 to +51
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Hardcoded defaults may drift without context

Consider centralizing the default values (137, 107, 26) or adding a comment explaining their choice to avoid them drifting out of sync.

value: "26"
envCustomImage: replace_me #NOTE: this is used via the Makefile to inject a custom template loop that kustomize won't allow
image: '{{ .OperatorImage }}'
name: manager
Expand Down
54 changes: 39 additions & 15 deletions controllers/operator/openstack_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,35 +71,56 @@ var (
operatorImage string
kubeRbacProxyImage string
openstackReleaseVersion string
operatorLeaseDuration string
operatorRenewDeadline string
operatorRetryPeriod string
)

// SetupEnv -
func SetupEnv() {
envRelatedOperatorImages = make(map[string]*string)
envRelatedOpenStackServiceImages = make(map[string]*string)
for _, name := range os.Environ() {
envArr := strings.Split(name, "=")
envArr := strings.SplitN(name, "=", 2)
if len(envArr) != 2 { // Handle cases where the environment variable doesn't have a value
continue
}
key := envArr[0]
value := envArr[1]

if strings.HasSuffix(envArr[0], "_OPERATOR_MANAGER_IMAGE_URL") {
operatorName := strings.TrimPrefix(envArr[0], "RELATED_IMAGE_")
switch {
case strings.HasSuffix(key, "_OPERATOR_MANAGER_IMAGE_URL"):
operatorName := strings.TrimPrefix(key, "RELATED_IMAGE_")
operatorName = strings.TrimSuffix(operatorName, "_OPERATOR_MANAGER_IMAGE_URL")
operatorName = strings.ToLower(operatorName)
operatorName = strings.ReplaceAll(operatorName, "_", "-")
// rabbitmq-cluster is a special case with an alternate deployment template
if operatorName == "rabbitmq-cluster" {
rabbitmqImage = envArr[1]
rabbitmqImage = value
} else {
envRelatedOperatorImages[operatorName] = &envArr[1]
envRelatedOperatorImages[operatorName] = &value
}
log.Log.Info("Found operator related image", "operator", operatorName, "image", envArr[1])
} else if strings.HasPrefix(envArr[0], "RELATED_IMAGE_") {
envRelatedOpenStackServiceImages[envArr[0]] = &envArr[1]
} else if envArr[0] == "KUBE_RBAC_PROXY" {
kubeRbacProxyImage = envArr[1]
} else if envArr[0] == "OPERATOR_IMAGE_URL" {
operatorImage = envArr[1]
} else if envArr[0] == "OPENSTACK_RELEASE_VERSION" {
openstackReleaseVersion = envArr[1]
log.Log.Info("Found operator related image", "operator", operatorName, "image", value)

case strings.HasPrefix(key, "RELATED_IMAGE_"):
envRelatedOpenStackServiceImages[key] = &value

case key == "KUBE_RBAC_PROXY":
kubeRbacProxyImage = value

case key == "OPERATOR_IMAGE_URL":
operatorImage = value

case key == "OPENSTACK_RELEASE_VERSION":
openstackReleaseVersion = value

case key == "LEASE_DURATION":
operatorLeaseDuration = value

case key == "RENEW_DEADLINE":
operatorRenewDeadline = value

case key == "RETRY_PERIOD":
operatorRetryPeriod = value
}
}
}
Expand Down Expand Up @@ -455,6 +476,9 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera
data.Data["KubeRbacProxyImage"] = kubeRbacProxyImage
data.Data["OpenstackReleaseVersion"] = openstackReleaseVersion
data.Data["OpenStackServiceRelatedImages"] = envRelatedOpenStackServiceImages
data.Data["OperatorLeaseDuration"] = operatorLeaseDuration
data.Data["OperatorRenewDeadline"] = operatorRenewDeadline
data.Data["OperatorRetryPeriod"] = operatorRetryPeriod
return r.renderAndApply(ctx, instance, data, "operator", true)
}

Expand Down
13 changes: 11 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ import (
machineconfig "github.com/openshift/api/machineconfiguration/v1"
ocp_image "github.com/openshift/api/operator/v1alpha1"

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

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
options := ctrl.Options{
Scheme: scheme,
Metrics: metricsserver.Options{
BindAddress: metricsAddr,
Expand All @@ -189,7 +190,15 @@ func main() {
// if you are doing or is intended to do any operation such as perform cleanups
// after the manager stops then its usage might be unsafe.
// LeaderElectionReleaseOnCancel: true,
})
}

err = operator.SetManagerOptions(&options, setupLog)
if err != nil {
setupLog.Error(err, "unable to set manager options")
os.Exit(1)
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
if err != nil {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
Expand Down
Loading