Skip to content

Commit fa69fd6

Browse files
committed
OCPBUGS-17950: Make packaeserver wakeup interval configurable
The packageserver wakeup interval is used to update its package manifest from CatSrcs. However, this does not need to happen periodically (especially 5m) as the CatSrc pods will restart when a change occurs to data it is caching, and this will be acted upon by packageserver. This allows configuration of this interval via the package-server-manager deployment (which then gets passed onto the packageserver deployment). Signed-off-by: Todd Short <[email protected]>
1 parent f8d481f commit fa69fd6

File tree

9 files changed

+59
-5
lines changed

9 files changed

+59
-5
lines changed

cmd/package-server-manager/main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const (
2929
defaultMetricsPort = "0"
3030
defaultHealthCheckPort = ":8080"
3131
defaultPprofPort = ":6060"
32+
defaultInterval = "5m"
3233
leaderElectionConfigmapName = "packageserver-controller-lock"
3334
)
3435

@@ -62,6 +63,10 @@ func run(cmd *cobra.Command, args []string) error {
6263
if err != nil {
6364
return err
6465
}
66+
interval, err := cmd.Flags().GetString("interval")
67+
if err != nil {
68+
return err
69+
}
6570

6671
ctrl.SetLogger(zap.New(zap.UseDevMode(true)))
6772
setupLog := ctrl.Log.WithName("setup")
@@ -99,6 +104,7 @@ func run(cmd *cobra.Command, args []string) error {
99104
Name: name,
100105
Namespace: namespace,
101106
Image: os.Getenv("PACKAGESERVER_IMAGE"),
107+
Interval: interval,
102108
Client: mgr.GetClient(),
103109
Log: ctrl.Log.WithName("controllers").WithName(name),
104110
Scheme: mgr.GetScheme(),

cmd/package-server-manager/start.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ func newStartCmd() *cobra.Command {
1616
cmd.Flags().String("namespace", defaultNamespace, "configures the metadata.namespace that contains the packageserver csv resource")
1717
cmd.Flags().String("health", defaultHealthCheckPort, "configures the health check port that the kubelet is configured to probe")
1818
cmd.Flags().String("pprof", defaultPprofPort, "configures the pprof port that the process exposes")
19+
cmd.Flags().String("interval", defaultInterval, "configures the wakeup interval for the packageserver csc resource")
1920
cmd.Flags().Bool("disable-leader-election", false, "configures whether leader election will be disabled")
2021

2122
return cmd

manifests/0000_50_olm_06-psm-operator.deployment.ibm-cloud-managed.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ spec:
4141
- $(PACKAGESERVER_NAME)
4242
- --namespace
4343
- $(PACKAGESERVER_NAMESPACE)
44+
- --interval
45+
- $(PACKAGESERVER_INTERVAL)
4446
image: quay.io/operator-framework/olm@sha256:de396b540b82219812061d0d753440d5655250c621c753ed1dc67d6154741607
4547
imagePullPolicy: IfNotPresent
4648
env:
@@ -52,6 +54,8 @@ spec:
5254
valueFrom:
5355
fieldRef:
5456
fieldPath: metadata.namespace
57+
- name: PACKAGESERVER_INTERVAL
58+
value: 5m
5559
- name: RELEASE_VERSION
5660
value: "0.0.1-snapshot"
5761
resources:

manifests/0000_50_olm_06-psm-operator.deployment.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ spec:
4141
- $(PACKAGESERVER_NAME)
4242
- --namespace
4343
- $(PACKAGESERVER_NAMESPACE)
44+
- --interval
45+
- $(PACKAGESERVER_INTERVAL)
4446
image: quay.io/operator-framework/olm@sha256:de396b540b82219812061d0d753440d5655250c621c753ed1dc67d6154741607
4547
imagePullPolicy: IfNotPresent
4648
env:
@@ -52,6 +54,8 @@ spec:
5254
valueFrom:
5355
fieldRef:
5456
fieldPath: metadata.namespace
57+
- name: PACKAGESERVER_INTERVAL
58+
value: 5m
5559
- name: RELEASE_VERSION
5660
value: "0.0.1-snapshot"
5761
resources:

pkg/manifests/manifests.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package manifests
33
import (
44
_ "embed"
55

6+
"fmt"
7+
68
olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
79

810
"k8s.io/apimachinery/pkg/util/yaml"
@@ -31,6 +33,33 @@ func NewPackageServerCSV(opts ...CSVOption) (*olmv1alpha1.ClusterServiceVersion,
3133
return &csv, nil
3234
}
3335

36+
func WithRunFlags(flags []string) CSVOption {
37+
for _, f := range flags {
38+
fmt.Printf("WithRunFlags passed in flag: '%v'\n", f)
39+
}
40+
return func(csv *olmv1alpha1.ClusterServiceVersion) {
41+
for _, f := range flags {
42+
fmt.Printf("WithRunFlags returned func: flag '%v'\n", f)
43+
}
44+
for i, deployment := range csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs {
45+
for j, container := range deployment.Spec.Template.Spec.Containers {
46+
// TODO: Should be fine to hardcode this for now, but likely want
47+
// to pass this as a parameter?
48+
if container.Name == "packageserver" {
49+
for _, flag := range flags {
50+
fmt.Printf("WithRunFlags returned func: applying flag '%v'\n", flag)
51+
container.Command = append(container.Command, flag)
52+
}
53+
csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[i].Spec.Template.Spec.Containers[j].Command = container.Command
54+
fmt.Printf("WithRunFlags returned func: updated command '%v'\n", container.Command)
55+
break
56+
}
57+
}
58+
}
59+
60+
}
61+
}
62+
3463
func WithName(name string) CSVOption {
3564
return func(csv *olmv1alpha1.ClusterServiceVersion) {
3665
csv.Name = name

pkg/package-server-manager/config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ func getTopologyModeFromInfra(infra *configv1.Infrastructure) bool {
6666
// resource matches that of the codified defaults and high availability configurations, where
6767
// codified defaults are defined by the csv returned by the manifests.NewPackageServerCSV
6868
// function.
69-
func ensureCSV(log logr.Logger, image string, csv *olmv1alpha1.ClusterServiceVersion, highlyAvailableMode bool) (bool, error) {
69+
func ensureCSV(log logr.Logger, image string, interval string, csv *olmv1alpha1.ClusterServiceVersion, highlyAvailableMode bool) (bool, error) {
7070
expectedCSV, err := manifests.NewPackageServerCSV(
7171
manifests.WithName(csv.Name),
7272
manifests.WithNamespace(csv.Namespace),
7373
manifests.WithImage(image),
74+
manifests.WithRunFlags([]string{"--interval", interval}),
7475
)
7576
if err != nil {
7677
return false, err

pkg/package-server-manager/controller.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ type PackageServerCSVReconciler struct {
5454
Name string
5555
Namespace string
5656
Image string
57+
Interval string
5758
}
5859

5960
// Reconcile is part of the main kubernetes reconciliation loop which is responsible
@@ -77,13 +78,14 @@ func (r *PackageServerCSVReconciler) Reconcile(ctx context.Context, req ctrl.Req
7778
manifests.WithName(r.Name),
7879
manifests.WithNamespace(r.Namespace),
7980
manifests.WithImage(r.Image),
81+
manifests.WithRunFlags([]string{"--interval", r.Interval}),
8082
)
8183
if err != nil {
8284
log.Error(err, "failed to serialize a new packageserver csv from the base YAML manifest")
8385
return ctrl.Result{}, err
8486
}
8587
res, err := controllerutil.CreateOrUpdate(ctx, r.Client, required, func() error {
86-
return reconcileCSV(r.Log, r.Image, required, highAvailabilityMode)
88+
return reconcileCSV(r.Log, r.Image, r.Interval, required, highAvailabilityMode)
8789
})
8890

8991
log.Info("reconciliation result", "res", res)
@@ -95,12 +97,12 @@ func (r *PackageServerCSVReconciler) Reconcile(ctx context.Context, req ctrl.Req
9597
return ctrl.Result{}, nil
9698
}
9799

98-
func reconcileCSV(log logr.Logger, image string, csv *olmv1alpha1.ClusterServiceVersion, highAvailabilityMode bool) error {
100+
func reconcileCSV(log logr.Logger, image string, interval string, csv *olmv1alpha1.ClusterServiceVersion, highAvailabilityMode bool) error {
99101
if csv.ObjectMeta.CreationTimestamp.IsZero() {
100102
log.Info("attempting to create the packageserver csv")
101103
}
102104

103-
modified, err := ensureCSV(log, image, csv, highAvailabilityMode)
105+
modified, err := ensureCSV(log, image, interval, csv, highAvailabilityMode)
104106
if err != nil {
105107
return fmt.Errorf("error ensuring CSV: %v", err)
106108
}

pkg/package-server-manager/controller_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var (
2222
name = "packageserver"
2323
namespace = "openshift-operator-lifecycle-manager"
2424
image = getImageFromManifest()
25+
interval = "5m"
2526
)
2627

2728
func TestHighlyAvailableFromInstructure(t *testing.T) {
@@ -111,6 +112,7 @@ func newTestCSV(
111112
csv, err := manifests.NewPackageServerCSV(
112113
manifests.WithName(name),
113114
manifests.WithNamespace(namespace),
115+
manifests.WithRunFlags([]string{"--interval", interval}),
114116
)
115117
if err != nil {
116118
return nil
@@ -133,6 +135,7 @@ func getImageFromManifest() string {
133135
csv, err := manifests.NewPackageServerCSV(
134136
manifests.WithName(name),
135137
manifests.WithNamespace(namespace),
138+
manifests.WithRunFlags([]string{"--interval", interval}),
136139
)
137140
if err != nil {
138141
return ""
@@ -258,7 +261,7 @@ func TestEnsureCSV(t *testing.T) {
258261
tc := tc
259262

260263
t.Run(tc.name, func(t *testing.T) {
261-
gotBool, gotErr := ensureCSV(logger, image, tc.inputCSV, tc.highlyAvailable)
264+
gotBool, gotErr := ensureCSV(logger, image, interval, tc.inputCSV, tc.highlyAvailable)
262265
require.EqualValues(t, tc.want.expectedBool, gotBool)
263266
require.EqualValues(t, tc.want.expectedErr, gotErr)
264267
require.EqualValues(t, tc.inputCSV.Spec, tc.expectedCSV.Spec)

scripts/generate_crds_manifests.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ spec:
151151
- \$(PACKAGESERVER_NAME)
152152
- --namespace
153153
- \$(PACKAGESERVER_NAMESPACE)
154+
- --interval
155+
- \$(PACKAGESERVER_INTERVAL)
154156
image: quay.io/operator-framework/olm@sha256:de396b540b82219812061d0d753440d5655250c621c753ed1dc67d6154741607
155157
imagePullPolicy: IfNotPresent
156158
env:
@@ -162,6 +164,8 @@ spec:
162164
valueFrom:
163165
fieldRef:
164166
fieldPath: metadata.namespace
167+
- name: PACKAGESERVER_INTERVAL
168+
value: 5m
165169
- name: RELEASE_VERSION
166170
value: "0.0.1-snapshot"
167171
resources:

0 commit comments

Comments
 (0)