Skip to content

Commit 2e50010

Browse files
authored
feat: add beforeStageTasks to stagedUpdateRun (#328)
* add beforeStageTasks to stagedUpdateRun Signed-off-by: Britania Rodriguez Reyes <britaniar@microsoft.com>
1 parent 0376725 commit 2e50010

15 files changed

+1271
-293
lines changed

apis/placement/v1beta1/commons.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,11 @@ const (
167167
// TargetUpdatingStageNameLabel indicates the updating stage name on a staged run related object.
168168
TargetUpdatingStageNameLabel = FleetPrefix + "targetUpdatingStage"
169169

170-
// ApprovalTaskNameFmt is the format of the approval task name.
171-
ApprovalTaskNameFmt = "%s-%s"
170+
// BeforeStageApprovalTaskNameFmt is the format of the before stage approval task name.
171+
BeforeStageApprovalTaskNameFmt = "%s-before-%s"
172+
173+
// AfterStageApprovalTaskNameFmt is the format of the after stage approval task name.
174+
AfterStageApprovalTaskNameFmt = "%s-after-%s"
172175
)
173176

174177
var (

pkg/controllers/updaterun/controller.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req runtime.Request) (runtim
7979
}
8080
runObjRef := klog.KObj(updateRun)
8181

82-
// Remove waitTime from the updateRun status for AfterStageTask for type Approval.
82+
// Remove waitTime from the updateRun status for BeforeStageTask and AfterStageTask for type Approval.
8383
removeWaitTimeFromUpdateRunStatus(updateRun)
8484

8585
// Handle the deletion of the updateRun.
@@ -455,10 +455,15 @@ func emitUpdateRunStatusMetric(updateRun placementv1beta1.UpdateRunObj) {
455455
}
456456

457457
func removeWaitTimeFromUpdateRunStatus(updateRun placementv1beta1.UpdateRunObj) {
458-
// Remove waitTime from the updateRun status for AfterStageTask for type Approval.
458+
// Remove waitTime from the updateRun status for BeforeStageTask and AfterStageTask for type Approval.
459459
updateRunStatus := updateRun.GetUpdateRunStatus()
460460
if updateRunStatus.UpdateStrategySnapshot != nil {
461461
for i := range updateRunStatus.UpdateStrategySnapshot.Stages {
462+
for j := range updateRunStatus.UpdateStrategySnapshot.Stages[i].BeforeStageTasks {
463+
if updateRunStatus.UpdateStrategySnapshot.Stages[i].BeforeStageTasks[j].Type == placementv1beta1.StageTaskTypeApproval {
464+
updateRunStatus.UpdateStrategySnapshot.Stages[i].BeforeStageTasks[j].WaitTime = nil
465+
}
466+
}
462467
for j := range updateRunStatus.UpdateStrategySnapshot.Stages[i].AfterStageTasks {
463468
if updateRunStatus.UpdateStrategySnapshot.Stages[i].AfterStageTasks[j].Type == placementv1beta1.StageTaskTypeApproval {
464469
updateRunStatus.UpdateStrategySnapshot.Stages[i].AfterStageTasks[j].WaitTime = nil

pkg/controllers/updaterun/controller_integration_test.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,11 @@ func generateTestClusterStagedUpdateStrategy() *placementv1beta1.ClusterStagedUp
505505
},
506506
},
507507
SortingLabelKey: &sortingKey,
508+
BeforeStageTasks: []placementv1beta1.StageTask{
509+
{
510+
Type: placementv1beta1.StageTaskTypeApproval,
511+
},
512+
},
508513
AfterStageTasks: []placementv1beta1.StageTask{
509514
{
510515
Type: placementv1beta1.StageTaskTypeTimedWait,
@@ -526,6 +531,11 @@ func generateTestClusterStagedUpdateStrategy() *placementv1beta1.ClusterStagedUp
526531
},
527532
},
528533
// no sortingLabelKey, should sort by cluster name
534+
BeforeStageTasks: []placementv1beta1.StageTask{
535+
{
536+
Type: placementv1beta1.StageTaskTypeApproval,
537+
},
538+
},
529539
AfterStageTasks: []placementv1beta1.StageTask{
530540
{
531541
Type: placementv1beta1.StageTaskTypeApproval,
@@ -543,17 +553,18 @@ func generateTestClusterStagedUpdateStrategy() *placementv1beta1.ClusterStagedUp
543553
}
544554
}
545555

546-
func generateTestClusterStagedUpdateStrategyWithSingleStage(afterStageTasks []placementv1beta1.StageTask) *placementv1beta1.ClusterStagedUpdateStrategy {
556+
func generateTestClusterStagedUpdateStrategyWithSingleStage(beforeStageTasks, afterStageTasks []placementv1beta1.StageTask) *placementv1beta1.ClusterStagedUpdateStrategy {
547557
return &placementv1beta1.ClusterStagedUpdateStrategy{
548558
ObjectMeta: metav1.ObjectMeta{
549559
Name: testUpdateStrategyName,
550560
},
551561
Spec: placementv1beta1.UpdateStrategySpec{
552562
Stages: []placementv1beta1.StageConfig{
553563
{
554-
Name: "stage1",
555-
LabelSelector: &metav1.LabelSelector{}, // Select all clusters.
556-
AfterStageTasks: afterStageTasks,
564+
Name: "stage1",
565+
LabelSelector: &metav1.LabelSelector{}, // Select all clusters.
566+
BeforeStageTasks: beforeStageTasks,
567+
AfterStageTasks: afterStageTasks,
557568
},
558569
},
559570
},
@@ -724,9 +735,9 @@ func generateTrueCondition(obj client.Object, condType any) metav1.Condition {
724735
case placementv1beta1.StageTaskConditionWaitTimeElapsed:
725736
reason = condition.AfterStageTaskWaitTimeElapsedReason
726737
case placementv1beta1.StageTaskConditionApprovalRequestCreated:
727-
reason = condition.AfterStageTaskApprovalRequestCreatedReason
738+
reason = condition.StageTaskApprovalRequestCreatedReason
728739
case placementv1beta1.StageTaskConditionApprovalRequestApproved:
729-
reason = condition.AfterStageTaskApprovalRequestApprovedReason
740+
reason = condition.StageTaskApprovalRequestApprovedReason
730741
}
731742
typeStr = string(cond)
732743
case placementv1beta1.ApprovalRequestConditionType:

pkg/controllers/updaterun/controller_test.go

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@ func TestRemoveWaitTimeFromUpdateRunStatus(t *testing.T) {
912912
},
913913
},
914914
},
915-
"should remove waitTime from Approval tasks only": {
915+
"should remove waitTime from Approval tasks only for AfterStageTasks": {
916916
inputUpdateRun: &placementv1beta1.ClusterStagedUpdateRun{
917917
Status: placementv1beta1.UpdateRunStatus{
918918
UpdateStrategySnapshot: &placementv1beta1.UpdateStrategySpec{
@@ -953,12 +953,51 @@ func TestRemoveWaitTimeFromUpdateRunStatus(t *testing.T) {
953953
},
954954
},
955955
},
956+
"should remove waitTime from Approval tasks only for BeforeStageTasks": {
957+
inputUpdateRun: &placementv1beta1.ClusterStagedUpdateRun{
958+
Status: placementv1beta1.UpdateRunStatus{
959+
UpdateStrategySnapshot: &placementv1beta1.UpdateStrategySpec{
960+
Stages: []placementv1beta1.StageConfig{
961+
{
962+
BeforeStageTasks: []placementv1beta1.StageTask{
963+
{
964+
Type: placementv1beta1.StageTaskTypeApproval,
965+
WaitTime: &waitTime,
966+
},
967+
},
968+
},
969+
},
970+
},
971+
},
972+
},
973+
wantUpdateRun: &placementv1beta1.ClusterStagedUpdateRun{
974+
Status: placementv1beta1.UpdateRunStatus{
975+
UpdateStrategySnapshot: &placementv1beta1.UpdateStrategySpec{
976+
Stages: []placementv1beta1.StageConfig{
977+
{
978+
BeforeStageTasks: []placementv1beta1.StageTask{
979+
{
980+
Type: placementv1beta1.StageTaskTypeApproval,
981+
},
982+
},
983+
},
984+
},
985+
},
986+
},
987+
},
988+
},
956989
"should handle multiple stages": {
957990
inputUpdateRun: &placementv1beta1.ClusterStagedUpdateRun{
958991
Status: placementv1beta1.UpdateRunStatus{
959992
UpdateStrategySnapshot: &placementv1beta1.UpdateStrategySpec{
960993
Stages: []placementv1beta1.StageConfig{
961994
{
995+
BeforeStageTasks: []placementv1beta1.StageTask{
996+
{
997+
Type: placementv1beta1.StageTaskTypeApproval,
998+
WaitTime: &waitTime,
999+
},
1000+
},
9621001
AfterStageTasks: []placementv1beta1.StageTask{
9631002
{
9641003
Type: placementv1beta1.StageTaskTypeApproval,
@@ -978,6 +1017,14 @@ func TestRemoveWaitTimeFromUpdateRunStatus(t *testing.T) {
9781017
},
9791018
},
9801019
},
1020+
{
1021+
BeforeStageTasks: []placementv1beta1.StageTask{
1022+
{
1023+
Type: placementv1beta1.StageTaskTypeApproval,
1024+
WaitTime: &waitTime,
1025+
},
1026+
},
1027+
},
9811028
},
9821029
},
9831030
},
@@ -987,6 +1034,11 @@ func TestRemoveWaitTimeFromUpdateRunStatus(t *testing.T) {
9871034
UpdateStrategySnapshot: &placementv1beta1.UpdateStrategySpec{
9881035
Stages: []placementv1beta1.StageConfig{
9891036
{
1037+
BeforeStageTasks: []placementv1beta1.StageTask{
1038+
{
1039+
Type: placementv1beta1.StageTaskTypeApproval,
1040+
},
1041+
},
9901042
AfterStageTasks: []placementv1beta1.StageTask{
9911043
{
9921044
Type: placementv1beta1.StageTaskTypeApproval,
@@ -1004,6 +1056,13 @@ func TestRemoveWaitTimeFromUpdateRunStatus(t *testing.T) {
10041056
},
10051057
},
10061058
},
1059+
{
1060+
BeforeStageTasks: []placementv1beta1.StageTask{
1061+
{
1062+
Type: placementv1beta1.StageTaskTypeApproval,
1063+
},
1064+
},
1065+
},
10071066
},
10081067
},
10091068
},

0 commit comments

Comments
 (0)