77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
|
|
"sigs.k8s.io/controller-runtime/pkg/log"
|
|
|
|
schedulev1 "github.com/baschno/tdset-operator/api/v1"
|
|
"k8s.io/apimachinery/pkg/api/meta"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
ctrl "sigs.k8s.io/controller-runtime"
|
|
)
|
|
|
|
// ConditionStatus defines TDSet condition status.
|
|
type ConditionStatus string
|
|
|
|
// Defines TDSet condition status.
|
|
const (
|
|
TypeAvailable ConditionStatus = "Available"
|
|
TypeProgressing ConditionStatus = "Progressing"
|
|
TypeDegraded ConditionStatus = "Degraded"
|
|
)
|
|
|
|
// GetTDSet gets the TDSet from api server.
|
|
func (r *TDSetReconciler) GetTDSet(ctx context.Context, req ctrl.Request, tdSet *schedulev1.TDSet) error {
|
|
err := r.Get(ctx, req.NamespacedName, tdSet)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// SetInitialCondition sets the status condition of the TDSet to available initially
|
|
// when no condition exists yet.
|
|
func (r *TDSetReconciler) SetInitialCondition(ctx context.Context, req ctrl.Request, tdSet *schedulev1.TDSet) error {
|
|
if tdSet.Status.Conditions != nil || len(tdSet.Status.Conditions) != 0 {
|
|
return nil
|
|
}
|
|
|
|
err := r.SetCondition(ctx, req, tdSet, TypeAvailable, "Starting reconciliation")
|
|
|
|
return err
|
|
}
|
|
|
|
// SetCondition sets the status condition of the TDSet.
|
|
func (r *TDSetReconciler) SetCondition(
|
|
ctx context.Context, req ctrl.Request,
|
|
tdSet *schedulev1.TDSet, condition ConditionStatus,
|
|
message string,
|
|
) error {
|
|
log := log.FromContext(ctx)
|
|
|
|
meta.SetStatusCondition(
|
|
&tdSet.Status.Conditions,
|
|
metav1.Condition{
|
|
Type: string(condition),
|
|
Status: metav1.ConditionUnknown, Reason: "Reconciling",
|
|
Message: message,
|
|
},
|
|
)
|
|
|
|
if err := r.Status().Update(ctx, tdSet); err != nil {
|
|
log.Error(err, "Failed to update TDSet status")
|
|
|
|
return err
|
|
}
|
|
|
|
if err := r.Get(ctx, req.NamespacedName, tdSet); err != nil {
|
|
log.Error(err, "Failed to re-fetch TDSet")
|
|
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|