-
Notifications
You must be signed in to change notification settings - Fork 11
/
promote.go
70 lines (56 loc) · 2.27 KB
/
promote.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package activepromotion
import (
"context"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
s2hv1beta1 "github.com/agoda-com/samsahai/api/v1beta1"
s2herrors "github.com/agoda-com/samsahai/internal/errors"
"github.com/agoda-com/samsahai/internal/queue"
)
func (c *controller) promoteActiveEnvironment(ctx context.Context, atpComp *s2hv1beta1.ActivePromotion) error {
teamName := atpComp.Name
targetNs := atpComp.Status.TargetNamespace
prevNs := atpComp.Status.PreviousActiveNamespace
if err := queue.DeletePreActiveQueue(c.client, targetNs); err != nil {
return err
}
if err := c.ensureQueuePromotedToActive(teamName, targetNs); err != nil {
return err
}
if err := c.ensureActiveEnvironmentPromoted(ctx, atpComp); err != nil {
return err
}
if prevNs != "" && atpComp.Status.DestroyedTime == nil {
logger.Debug("previous active namespace destroyed time has been set",
"team", teamName, "namespace", prevNs)
destroyedTime := metav1.Now().Add(atpComp.Spec.TearDownDuration.Duration)
atpComp.Status.SetDestroyedTime(metav1.Time{Time: destroyedTime})
}
logger.Info("active environment has been promoted successfully",
"team", teamName, "status", s2hv1beta1.ActivePromotionSuccess, "namespace", targetNs)
atpComp.Status.SetResult(s2hv1beta1.ActivePromotionSuccess)
atpComp.Status.SetCondition(s2hv1beta1.ActivePromotionCondResultCollected, corev1.ConditionTrue,
"Result has been collected, promoted successfully")
atpComp.Status.SetCondition(s2hv1beta1.ActivePromotionCondActivePromoted, corev1.ConditionTrue,
"Active environment has been promoted")
atpComp.SetState(s2hv1beta1.ActivePromotionDestroyingPreviousActive,
"Destroying the previous active environment")
if err := c.runPostActive(ctx, atpComp); err != nil {
if s2herrors.IsLoadingConfiguration(err) {
return s2herrors.ErrEnsureActivePromoted
}
return err
}
return nil
}
func (c *controller) ensureQueuePromotedToActive(teamName, ns string) error {
q, err := queue.EnsurePromoteToActiveComponents(c.client, teamName, ns)
if err != nil {
return errors.Wrapf(err, "cannot ensure environment promoted to active components, namespace %s", ns)
}
if q.Status.State == s2hv1beta1.Finished {
return nil
}
return s2herrors.ErrEnsureActivePromoted
}