Skip to content

Commit

Permalink
Improve co/node-tuning operand version reporting (#792)
Browse files Browse the repository at this point in the history
This change improves reporting of operand version in the
ClusterOperator/node-tuning object.  A total number of scheduled
operands with operator's version is reported.  The change also fixes a
potential brief period of false operand version reporting during
upgrades.

Co-authored-by: Jiri Mencak <jmencak@users.noreply.github.com>
  • Loading branch information
jmencak and jmencak committed Sep 29, 2023
1 parent 0cd2735 commit 890d5ee
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 12 deletions.
24 changes: 16 additions & 8 deletions pkg/operator/controller.go
Expand Up @@ -7,6 +7,7 @@ import (
"reflect"
"time"

appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
kmeta "k8s.io/apimachinery/pkg/api/meta"
Expand Down Expand Up @@ -577,14 +578,7 @@ func (c *Controller) syncDaemonSet(tuned *tunedv1.Tuned) error {
}

operatorReleaseVersion := os.Getenv("RELEASE_VERSION")
operandReleaseVersion := ""

for _, e := range ds.Spec.Template.Spec.Containers[0].Env {
if e.Name == "RELEASE_VERSION" {
operandReleaseVersion = e.Value
break
}
}
operandReleaseVersion := c.getDaemonSetReleaseVersion(ds)

if operatorReleaseVersion != operandReleaseVersion {
klog.V(2).Infof("syncDaemonSet(): operatorReleaseVersion (%s) != operandReleaseVersion (%s), updating", operatorReleaseVersion, operandReleaseVersion)
Expand Down Expand Up @@ -1057,6 +1051,20 @@ func (c *Controller) pruneMachineConfigsHyperShift() error {
return nil
}

// Get daemonset release version.
func (c *Controller) getDaemonSetReleaseVersion(ds *appsv1.DaemonSet) string {
var operandReleaseVersion string

for _, e := range ds.Spec.Template.Spec.Containers[0].Env {
if e.Name == "RELEASE_VERSION" {
operandReleaseVersion = e.Value
break
}
}

return operandReleaseVersion
}

// Get all operator MachineConfig names for all TuneD daemon profiles.
func (c *Controller) getMachineConfigNamesForTuned() (map[string]bool, error) {
tunedList, err := c.listers.TunedResources.List(labels.Everything())
Expand Down
11 changes: 7 additions & 4 deletions pkg/operator/status.go
Expand Up @@ -241,14 +241,17 @@ func (c *Controller) computeStatus(tuned *tunedv1.Tuned, conditions []configv1.C
return conditions, "", fmt.Errorf(errGenerationMismatch)
}

dsReleaseVersion := c.getDaemonSetReleaseVersion(ds)

if ds.Status.NumberAvailable > 0 {
// The operand maintained by the operator is reported as available in the cluster
availableCondition.Status = configv1.ConditionTrue
availableCondition.Reason = "AsExpected"
if ds.Status.UpdatedNumberScheduled > 0 {
// At least one operand instance runs RELEASE_VERSION, report it
klog.V(3).Infof("%d operands run release version %q", ds.Status.UpdatedNumberScheduled, os.Getenv("RELEASE_VERSION"))
availableCondition.Message = fmt.Sprintf("Cluster has deployed %q", os.Getenv("RELEASE_VERSION"))
if ds.Status.UpdatedNumberScheduled > 0 && dsReleaseVersion == os.Getenv("RELEASE_VERSION") {
// At least one operand instance deployed with operator's RELEASE_VERSION, report it
klog.V(3).Infof("%d operands deployed with release version %q", ds.Status.UpdatedNumberScheduled, os.Getenv("RELEASE_VERSION"))
availableCondition.Message = fmt.Sprintf("Cluster has deployed %d/%d %q operands",
ds.Status.UpdatedNumberScheduled, ds.Status.CurrentNumberScheduled, os.Getenv("RELEASE_VERSION"))
}
} else {
// No operand maintained by the operator is reported as available in the cluster
Expand Down

0 comments on commit 890d5ee

Please sign in to comment.