Skip to content

Commit

Permalink
replace UpdateStatus() for ApplyStatus
Browse files Browse the repository at this point in the history
Prometheus Agent and Prometheus Server

Signed-off-by: Mario Fernandez <mariofer@redhat.com>
  • Loading branch information
marioferh committed Sep 13, 2023
1 parent 60368c1 commit 4c09da4
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 5 deletions.
44 changes: 42 additions & 2 deletions pkg/prometheus/agent/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ import (
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
monitoringv1alpha1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1alpha1"
"github.com/prometheus-operator/prometheus-operator/pkg/assets"
monitoringv1ac "github.com/prometheus-operator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1"
monitoringv1alpha1ac "github.com/prometheus-operator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1"
monitoringclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"github.com/prometheus-operator/prometheus-operator/pkg/informers"
"github.com/prometheus-operator/prometheus-operator/pkg/k8sutil"
Expand All @@ -49,7 +51,8 @@ import (
)

const (
resyncPeriod = 5 * time.Minute
resyncPeriod = 5 * time.Minute
prometheusOperatorFieldManager = "PrometheusOperator"
)

// Operator manages life cycle of Prometheus agent deployments and
Expand Down Expand Up @@ -806,13 +809,50 @@ func (c *Operator) UpdateStatus(ctx context.Context, key string) error {
return errors.Wrap(err, "failed to get prometheus agent status")
}
p.Status = *pStatus
if _, err = c.mclient.MonitoringV1alpha1().PrometheusAgents(p.Namespace).UpdateStatus(ctx, p, metav1.UpdateOptions{}); err != nil {

pac := ApplyConfigurationFromPrometheus(p)
if _, err = c.mclient.MonitoringV1alpha1().PrometheusAgents(p.Namespace).ApplyStatus(ctx, pac, metav1.ApplyOptions{FieldManager: prometheusOperatorFieldManager, Force: true}); err != nil {
return errors.Wrap(err, "failed to update prometheus agent status subresource")
}

return nil
}

func ApplyConfigurationFromPrometheus(p *monitoringv1alpha1.PrometheusAgent) *monitoringv1alpha1ac.PrometheusAgentApplyConfiguration {
psac := monitoringv1ac.PrometheusStatus().
WithPaused(p.Status.Paused).
WithPaused(p.Status.Paused).
WithReplicas(p.Status.Replicas).
WithAvailableReplicas(p.Status.AvailableReplicas).
WithUpdatedReplicas(p.Status.UpdatedReplicas).
WithUnavailableReplicas(p.Status.UnavailableReplicas)

for _, condition := range p.Status.Conditions {
psac.WithConditions(
monitoringv1ac.Condition().
WithType(condition.Type).
WithStatus(condition.Status).
WithLastTransitionTime(condition.LastTransitionTime).
WithReason(condition.Reason).
WithMessage(condition.Message).
WithObservedGeneration(condition.ObservedGeneration),
)
}

for _, shardStatus := range p.Status.ShardStatuses {
psac.WithShardStatuses(
monitoringv1ac.ShardStatus().
WithShardID(shardStatus.ShardID).
WithReplicas(shardStatus.Replicas).
WithUpdatedReplicas(shardStatus.UpdatedReplicas).
WithAvailableReplicas(shardStatus.AvailableReplicas).
WithUnavailableReplicas(shardStatus.UnavailableReplicas),
)
}

return monitoringv1alpha1ac.PrometheusAgent(p.Name, p.Namespace).WithStatus(psac)
}

func (c *Operator) createOrUpdateTLSAssetSecrets(ctx context.Context, p *monitoringv1alpha1.PrometheusAgent, store *assets.Store) (*operator.ShardedSecret, error) {
labels := c.config.Labels.Merge(prompkg.ManagedByOperatorLabels)
template := prompkg.NewTLSAssetSecret(p, labels)
Expand Down
45 changes: 42 additions & 3 deletions pkg/prometheus/server/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
monitoringv1alpha1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1alpha1"
"github.com/prometheus-operator/prometheus-operator/pkg/assets"
monitoringv1ac "github.com/prometheus-operator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1"
monitoringclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"github.com/prometheus-operator/prometheus-operator/pkg/informers"
"github.com/prometheus-operator/prometheus-operator/pkg/k8sutil"
Expand All @@ -50,7 +51,8 @@ import (
)

const (
resyncPeriod = 5 * time.Minute
resyncPeriod = 5 * time.Minute
prometheusOperatorFieldManager = "PrometheusOperator"
)

// Operator manages life cycle of Prometheus deployments and
Expand Down Expand Up @@ -1369,8 +1371,10 @@ func (c *Operator) UpdateStatus(ctx context.Context, key string) error {
}

p.Status = *pStatus
if _, err = c.mclient.MonitoringV1().Prometheuses(p.Namespace).UpdateStatus(ctx, p, metav1.UpdateOptions{}); err != nil {
return errors.Wrap(err, "failed to update prometheus status subresource")

pac := ApplyConfigurationFromPrometheus(p)
if _, err = c.mclient.MonitoringV1().Prometheuses(p.Namespace).ApplyStatus(ctx, pac, metav1.ApplyOptions{FieldManager: prometheusOperatorFieldManager, Force: true}); err != nil {
return errors.Wrap(err, "failed to apply prometheus status subresource")
}

return nil
Expand Down Expand Up @@ -1662,3 +1666,38 @@ func (c *Operator) createOrUpdateWebConfigSecret(ctx context.Context, p *monitor

return nil
}

func ApplyConfigurationFromPrometheus(p *monitoringv1.Prometheus) *monitoringv1ac.PrometheusApplyConfiguration {
psac := monitoringv1ac.PrometheusStatus().
WithPaused(p.Status.Paused).
WithPaused(p.Status.Paused).
WithReplicas(p.Status.Replicas).
WithAvailableReplicas(p.Status.AvailableReplicas).
WithUpdatedReplicas(p.Status.UpdatedReplicas).
WithUnavailableReplicas(p.Status.UnavailableReplicas)

for _, condition := range p.Status.Conditions {
psac.WithConditions(
monitoringv1ac.Condition().
WithType(condition.Type).
WithStatus(condition.Status).
WithLastTransitionTime(condition.LastTransitionTime).
WithReason(condition.Reason).
WithMessage(condition.Message).
WithObservedGeneration(condition.ObservedGeneration),
)
}

for _, shardStatus := range p.Status.ShardStatuses {
psac.WithShardStatuses(
monitoringv1ac.ShardStatus().
WithShardID(shardStatus.ShardID).
WithReplicas(shardStatus.Replicas).
WithUpdatedReplicas(shardStatus.UpdatedReplicas).
WithAvailableReplicas(shardStatus.AvailableReplicas).
WithUnavailableReplicas(shardStatus.UnavailableReplicas),
)
}

return monitoringv1ac.Prometheus(p.Name, p.Namespace).WithStatus(psac)
}

0 comments on commit 4c09da4

Please sign in to comment.