Skip to content

OCPBUGS-17950: Make packageserver wakeup interval configurable #555

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 6, 2023
Merged
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 cmd/package-server-manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const (
defaultMetricsPort = "0"
defaultHealthCheckPort = ":8080"
defaultPprofPort = ":6060"
defaultInterval = "5m"
leaderElectionConfigmapName = "packageserver-controller-lock"
)

Expand Down Expand Up @@ -62,6 +63,10 @@ func run(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
interval, err := cmd.Flags().GetString("interval")
if err != nil {
return err
}

ctrl.SetLogger(zap.New(zap.UseDevMode(true)))
setupLog := ctrl.Log.WithName("setup")
Expand Down Expand Up @@ -99,6 +104,7 @@ func run(cmd *cobra.Command, args []string) error {
Name: name,
Namespace: namespace,
Image: os.Getenv("PACKAGESERVER_IMAGE"),
Interval: interval,
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName(name),
Scheme: mgr.GetScheme(),
Expand Down
1 change: 1 addition & 0 deletions cmd/package-server-manager/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ func newStartCmd() *cobra.Command {
cmd.Flags().String("namespace", defaultNamespace, "configures the metadata.namespace that contains the packageserver csv resource")
cmd.Flags().String("health", defaultHealthCheckPort, "configures the health check port that the kubelet is configured to probe")
cmd.Flags().String("pprof", defaultPprofPort, "configures the pprof port that the process exposes")
cmd.Flags().String("interval", defaultInterval, "configures the wakeup interval for the packageserver csc resource")
cmd.Flags().Bool("disable-leader-election", false, "configures whether leader election will be disabled")

return cmd
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ spec:
- $(PACKAGESERVER_NAME)
- --namespace
- $(PACKAGESERVER_NAMESPACE)
- --interval
- $(PACKAGESERVER_INTERVAL)
image: quay.io/operator-framework/olm@sha256:de396b540b82219812061d0d753440d5655250c621c753ed1dc67d6154741607
imagePullPolicy: IfNotPresent
env:
Expand All @@ -52,6 +54,8 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: PACKAGESERVER_INTERVAL
value: 5m
- name: RELEASE_VERSION
value: "0.0.1-snapshot"
resources:
Expand Down
4 changes: 4 additions & 0 deletions manifests/0000_50_olm_06-psm-operator.deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ spec:
- $(PACKAGESERVER_NAME)
- --namespace
- $(PACKAGESERVER_NAMESPACE)
- --interval
- $(PACKAGESERVER_INTERVAL)
image: quay.io/operator-framework/olm@sha256:de396b540b82219812061d0d753440d5655250c621c753ed1dc67d6154741607
imagePullPolicy: IfNotPresent
env:
Expand All @@ -52,6 +54,8 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: PACKAGESERVER_INTERVAL
value: 5m
- name: RELEASE_VERSION
value: "0.0.1-snapshot"
resources:
Expand Down
19 changes: 19 additions & 0 deletions pkg/manifests/manifests.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,25 @@ func NewPackageServerCSV(opts ...CSVOption) (*olmv1alpha1.ClusterServiceVersion,
return &csv, nil
}

func WithRunFlags(flags []string) CSVOption {
return func(csv *olmv1alpha1.ClusterServiceVersion) {
for i, deployment := range csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs {
for j, container := range deployment.Spec.Template.Spec.Containers {
// TODO: Should be fine to hardcode this for now, but likely want
// to pass this as a parameter?
if container.Name == "packageserver" {
for _, flag := range flags {
container.Command = append(container.Command, flag)
}
csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs[i].Spec.Template.Spec.Containers[j].Command = container.Command
break
}
}
}

}
}

func WithName(name string) CSVOption {
return func(csv *olmv1alpha1.ClusterServiceVersion) {
csv.Name = name
Expand Down
3 changes: 2 additions & 1 deletion pkg/package-server-manager/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,12 @@ func getTopologyModeFromInfra(infra *configv1.Infrastructure) bool {
// resource matches that of the codified defaults and high availability configurations, where
// codified defaults are defined by the csv returned by the manifests.NewPackageServerCSV
// function.
func ensureCSV(log logr.Logger, image string, csv *olmv1alpha1.ClusterServiceVersion, highlyAvailableMode bool) (bool, error) {
func ensureCSV(log logr.Logger, image string, interval string, csv *olmv1alpha1.ClusterServiceVersion, highlyAvailableMode bool) (bool, error) {
expectedCSV, err := manifests.NewPackageServerCSV(
manifests.WithName(csv.Name),
manifests.WithNamespace(csv.Namespace),
manifests.WithImage(image),
manifests.WithRunFlags([]string{"--interval", interval}),
)
if err != nil {
return false, err
Expand Down
8 changes: 5 additions & 3 deletions pkg/package-server-manager/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ type PackageServerCSVReconciler struct {
Name string
Namespace string
Image string
Interval string
}

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

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

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

modified, err := ensureCSV(log, image, csv, highAvailabilityMode)
modified, err := ensureCSV(log, image, interval, csv, highAvailabilityMode)
if err != nil {
return fmt.Errorf("error ensuring CSV: %v", err)
}
Expand Down
5 changes: 4 additions & 1 deletion pkg/package-server-manager/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ var (
name = "packageserver"
namespace = "openshift-operator-lifecycle-manager"
image = getImageFromManifest()
interval = "5m"
)

func TestHighlyAvailableFromInstructure(t *testing.T) {
Expand Down Expand Up @@ -111,6 +112,7 @@ func newTestCSV(
csv, err := manifests.NewPackageServerCSV(
manifests.WithName(name),
manifests.WithNamespace(namespace),
manifests.WithRunFlags([]string{"--interval", interval}),
)
if err != nil {
return nil
Expand All @@ -133,6 +135,7 @@ func getImageFromManifest() string {
csv, err := manifests.NewPackageServerCSV(
manifests.WithName(name),
manifests.WithNamespace(namespace),
manifests.WithRunFlags([]string{"--interval", interval}),
)
if err != nil {
return ""
Expand Down Expand Up @@ -258,7 +261,7 @@ func TestEnsureCSV(t *testing.T) {
tc := tc

t.Run(tc.name, func(t *testing.T) {
gotBool, gotErr := ensureCSV(logger, image, tc.inputCSV, tc.highlyAvailable)
gotBool, gotErr := ensureCSV(logger, image, interval, tc.inputCSV, tc.highlyAvailable)
require.EqualValues(t, tc.want.expectedBool, gotBool)
require.EqualValues(t, tc.want.expectedErr, gotErr)
require.EqualValues(t, tc.inputCSV.Spec, tc.expectedCSV.Spec)
Expand Down
4 changes: 4 additions & 0 deletions scripts/generate_crds_manifests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ spec:
- \$(PACKAGESERVER_NAME)
- --namespace
- \$(PACKAGESERVER_NAMESPACE)
- --interval
- \$(PACKAGESERVER_INTERVAL)
image: quay.io/operator-framework/olm@sha256:de396b540b82219812061d0d753440d5655250c621c753ed1dc67d6154741607
imagePullPolicy: IfNotPresent
env:
Expand All @@ -162,6 +164,8 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: PACKAGESERVER_INTERVAL
value: 5m
- name: RELEASE_VERSION
value: "0.0.1-snapshot"
resources:
Expand Down