|
17 | 17 | package training_job
|
18 | 18 |
|
19 | 19 | import (
|
20 |
| - "context" |
21 |
| - |
22 |
| - ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" |
23 |
| - svcapitypes "github.com/aws-controllers-k8s/sagemaker-controller/apis/v1alpha1" |
| 20 | + svccommon "github.com/aws-controllers-k8s/sagemaker-controller/pkg/common" |
24 | 21 | "github.com/aws/aws-sdk-go/aws"
|
25 | 22 | svcsdk "github.com/aws/aws-sdk-go/service/sagemaker"
|
26 |
| - corev1 "k8s.io/api/core/v1" |
27 | 23 | )
|
28 | 24 |
|
29 |
| -// customDescribeTrainingJobSetOutput sets the resource ResourceSynced condition to False if |
30 |
| -// TrainingJob is being modified by AWS. It has an additional check on the debugger status. |
31 |
| -func (rm *resourceManager) customDescribeTrainingJobSetOutput( |
32 |
| - ctx context.Context, |
33 |
| - r *resource, |
34 |
| - resp *svcsdk.DescribeTrainingJobOutput, |
35 |
| - ko *svcapitypes.TrainingJob, |
36 |
| -) (*svcapitypes.TrainingJob, error) { |
37 |
| - trainingJobStatus := resp.TrainingJobStatus |
38 |
| - debuggerRuleInProgress := false |
39 |
| - if resp.DebugRuleEvaluationStatuses != nil { |
40 |
| - for _, rule := range resp.DebugRuleEvaluationStatuses { |
41 |
| - if rule.RuleEvaluationStatus != nil && *rule.RuleEvaluationStatus == svcsdk.RuleEvaluationStatusInProgress { |
42 |
| - debuggerRuleInProgress = true |
43 |
| - rm.customSetOutput(r, aws.String(svcsdk.TrainingJobStatusInProgress), ko) |
44 |
| - break |
45 |
| - } |
46 |
| - } |
| 25 | +var ( |
| 26 | + trainingJobModifyingStatuses = []string{ |
| 27 | + svcsdk.TrainingJobStatusInProgress, |
| 28 | + svcsdk.TrainingJobStatusStopping, |
47 | 29 | }
|
48 |
| - |
49 |
| - if !debuggerRuleInProgress { |
50 |
| - rm.customSetOutput(r, trainingJobStatus, ko) |
| 30 | + ruleModifyingStatuses = []string{ |
| 31 | + svcsdk.RuleEvaluationStatusInProgress, |
| 32 | + svcsdk.RuleEvaluationStatusStopping, |
51 | 33 | }
|
| 34 | + resourceName = resourceGK.Kind |
| 35 | +) |
52 | 36 |
|
53 |
| - return ko, nil |
54 |
| -} |
55 |
| - |
56 |
| -// customSetOutput sets ConditionTypeResourceSynced condition to True or False |
57 |
| -// based on the trainingJobStatus on AWS so the reconciler can determine if a |
58 |
| -// requeue is needed |
59 |
| -func (rm *resourceManager) customSetOutput( |
60 |
| - r *resource, |
61 |
| - trainingJobStatus *string, |
62 |
| - ko *svcapitypes.TrainingJob, |
63 |
| -) { |
64 |
| - if trainingJobStatus == nil { |
| 37 | +// customDescribeTrainingJobSetOutput sets the resource ResourceSynced condition to False if |
| 38 | +// TrainingJob is being modified by AWS. It checks for debug and profiler rule status in addition to TrainingJobStatus |
| 39 | +func (rm *resourceManager) customDescribeTrainingJobSetOutput(r *resource) { |
| 40 | + trainingJobStatus := r.ko.Status.TrainingJobStatus |
| 41 | + // early exit if training job is InProgress |
| 42 | + if trainingJobStatus != nil && *trainingJobStatus == svcsdk.TrainingJobStatusInProgress { |
| 43 | + svccommon.SetSyncedCondition(r, trainingJobStatus, &resourceName, &trainingJobModifyingStatuses) |
65 | 44 | return
|
66 | 45 | }
|
67 | 46 |
|
68 |
| - syncConditionStatus := corev1.ConditionUnknown |
69 |
| - if *trainingJobStatus == svcsdk.TrainingJobStatusCompleted || *trainingJobStatus == svcsdk.TrainingJobStatusStopped || *trainingJobStatus == svcsdk.TrainingJobStatusFailed { |
70 |
| - syncConditionStatus = corev1.ConditionTrue |
71 |
| - } else { |
72 |
| - syncConditionStatus = corev1.ConditionFalse |
73 |
| - } |
74 |
| - |
75 |
| - var resourceSyncedCondition *ackv1alpha1.Condition = nil |
76 |
| - for _, condition := range ko.Status.Conditions { |
77 |
| - if condition.Type == ackv1alpha1.ConditionTypeResourceSynced { |
78 |
| - resourceSyncedCondition = condition |
79 |
| - break |
| 47 | + for _, rule := range r.ko.Status.DebugRuleEvaluationStatuses { |
| 48 | + if rule.RuleEvaluationStatus != nil && svccommon.IsModifyingStatus(rule.RuleEvaluationStatus, &ruleModifyingStatuses) { |
| 49 | + svccommon.SetSyncedCondition(r, rule.RuleEvaluationStatus, aws.String("DebugRule"), &ruleModifyingStatuses) |
| 50 | + return |
80 | 51 | }
|
81 | 52 | }
|
82 | 53 |
|
83 |
| - if resourceSyncedCondition == nil { |
84 |
| - resourceSyncedCondition = &ackv1alpha1.Condition{ |
85 |
| - Type: ackv1alpha1.ConditionTypeResourceSynced, |
| 54 | + for _, rule := range r.ko.Status.ProfilerRuleEvaluationStatuses { |
| 55 | + if rule.RuleEvaluationStatus != nil && svccommon.IsModifyingStatus(rule.RuleEvaluationStatus, &ruleModifyingStatuses) { |
| 56 | + svccommon.SetSyncedCondition(r, rule.RuleEvaluationStatus, aws.String("ProfilerRule"), &ruleModifyingStatuses) |
| 57 | + return |
86 | 58 | }
|
87 |
| - ko.Status.Conditions = append(ko.Status.Conditions, resourceSyncedCondition) |
88 | 59 | }
|
89 |
| - resourceSyncedCondition.Status = syncConditionStatus |
90 | 60 |
|
| 61 | + svccommon.SetSyncedCondition(r, trainingJobStatus, &resourceName, &trainingJobModifyingStatuses) |
| 62 | +} |
| 63 | + |
| 64 | +func (rm *resourceManager) customCreateTrainingJobSetOutput(r *resource) { |
| 65 | + svccommon.SetSyncedCondition(r, aws.String(svcsdk.TrainingJobStatusInProgress), &resourceName, &trainingJobModifyingStatuses) |
91 | 66 | }
|
0 commit comments