Skip to content

Commit

Permalink
Merge branch 'master' into oatamanenko/logs
Browse files Browse the repository at this point in the history
  • Loading branch information
shrinandj authored Dec 18, 2020
2 parents 1472e55 + 237f93d commit eb51ec0
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 26 deletions.
9 changes: 9 additions & 0 deletions api/v1alpha1/rollingupgrade_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,15 @@ type RollingUpgradeStatus struct {
Conditions []RollingUpgradeCondition `json:"conditions,omitempty"`
}

const (
// StatusRunning marks the CR to be running.
StatusRunning = "running"
// StatusComplete marks the CR as completed.
StatusComplete = "completed"
// StatusError marks the CR as errored out.
StatusError = "error"
)

// RollingUpgradeCondition describes the state of the RollingUpgrade
type RollingUpgradeCondition struct {
Type UpgradeConditionType `json:"type,omitempty"`
Expand Down
32 changes: 13 additions & 19 deletions controllers/rollingupgrade_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,6 @@ import (
)

const (
// StatusRunning marks the CR to be running.
StatusRunning = "running"
// StatusComplete marks the CR as completed.
StatusComplete = "completed"
// StatusError marks the CR as errored out.
StatusError = "error"
// JanitorAnnotation is for completed objects.
JanitorAnnotation = "janitor/ttl"
// ClearCompletedFrequency is the time after which a completed rollingUpgrade object is deleted.
Expand Down Expand Up @@ -587,7 +581,7 @@ func (r *RollingUpgradeReconciler) finishExecution(finalStatus string, nodesProc
}
// end event
var level string
if finalStatus == StatusComplete {
if finalStatus == upgrademgrv1alpha1.StatusComplete {
level = EventLevelNormal
} else {
level = EventLevelWarning
Expand Down Expand Up @@ -620,8 +614,8 @@ func (r *RollingUpgradeReconciler) finishExecution(finalStatus string, nodesProc
func (r *RollingUpgradeReconciler) Process(ctx *context.Context,
ruObj *upgrademgrv1alpha1.RollingUpgrade) {

if ruObj.Status.CurrentStatus == StatusComplete ||
ruObj.Status.CurrentStatus == StatusError {
if ruObj.Status.CurrentStatus == upgrademgrv1alpha1.StatusComplete ||
ruObj.Status.CurrentStatus == upgrademgrv1alpha1.StatusError {
r.info(ruObj, "No more processing", "currentStatus", ruObj.Status.CurrentStatus)

if exists := ruObj.ObjectMeta.Annotations[JanitorAnnotation]; exists == "" {
Expand All @@ -643,32 +637,32 @@ func (r *RollingUpgradeReconciler) Process(ctx *context.Context,
r.CacheConfig.FlushCache("autoscaling")
err := r.populateAsg(ruObj)
if err != nil {
r.finishExecution(StatusError, 0, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusError, 0, ctx, ruObj)
return
}

//TODO(shri): Ensure that no node is Unschedulable at this time.
err = r.populateNodeList(ruObj, r.generatedClient.CoreV1().Nodes())
if err != nil {
r.finishExecution(StatusError, 0, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusError, 0, ctx, ruObj)
return
}

if err := r.populateLaunchTemplates(); err != nil {
r.finishExecution(StatusError, 0, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusError, 0, ctx, ruObj)
return
}

asg, err := r.GetAutoScalingGroup(ruObj.NamespacedName())
if err != nil {
r.error(ruObj, err, "Unable to load ASG for rolling upgrade")
r.finishExecution(StatusError, 0, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusError, 0, ctx, ruObj)
return
}

// Update the CR with some basic info before staring the restack.
ruObj.Status.StartTime = time.Now().Format(time.RFC3339)
ruObj.Status.CurrentStatus = StatusRunning
ruObj.Status.CurrentStatus = upgrademgrv1alpha1.StatusRunning
ruObj.Status.NodesProcessed = 0
ruObj.Status.TotalNodes = len(asg.Instances)

Expand All @@ -680,19 +674,19 @@ func (r *RollingUpgradeReconciler) Process(ctx *context.Context,
nodesProcessed, err := r.runRestack(ctx, ruObj)
if err != nil {
r.error(ruObj, err, "Failed to runRestack")
r.finishExecution(StatusError, nodesProcessed, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusError, nodesProcessed, ctx, ruObj)
return
}

//Validation step: check if all the nodes have the latest launchconfig.
r.info(ruObj, "Validating the launch definition of nodes and ASG")
if err := r.validateNodesLaunchDefinition(ruObj); err != nil {
r.error(ruObj, err, "Launch definition validation failed")
r.finishExecution(StatusError, nodesProcessed, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusError, nodesProcessed, ctx, ruObj)
return
}

r.finishExecution(StatusComplete, nodesProcessed, ctx, ruObj)
r.finishExecution(upgrademgrv1alpha1.StatusComplete, nodesProcessed, ctx, ruObj)
}

//Check if ec2Instances and the ASG have same launch config.
Expand Down Expand Up @@ -735,9 +729,9 @@ func MarkObjForCleanup(ruObj *upgrademgrv1alpha1.RollingUpgrade) {
}

switch ruObj.Status.CurrentStatus {
case StatusComplete:
case upgrademgrv1alpha1.StatusComplete:
ruObj.ObjectMeta.Annotations[JanitorAnnotation] = ClearCompletedFrequency
case StatusError:
case upgrademgrv1alpha1.StatusError:
ruObj.ObjectMeta.Annotations[JanitorAnnotation] = ClearErrorFrequency
}
}
Expand Down
14 changes: 7 additions & 7 deletions controllers/rollingupgrade_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func TestErrorStatusMarkJanitor(t *testing.T) {

ctx := context.TODO()
rcRollingUpgrade.inProcessASGs.Store(someAsg, "processing")
rcRollingUpgrade.finishExecution(StatusError, 3, &ctx, instance)
rcRollingUpgrade.finishExecution(upgrademgrv1alpha1.StatusError, 3, &ctx, instance)
g.Expect(instance.ObjectMeta.Annotations[JanitorAnnotation]).To(gomega.Equal(ClearErrorFrequency))
_, exists := rcRollingUpgrade.inProcessASGs.Load(someAsg)
g.Expect(exists).To(gomega.BeFalse())
Expand All @@ -77,7 +77,7 @@ func TestErrorStatusMarkJanitor(t *testing.T) {
func TestMarkObjForCleanupCompleted(t *testing.T) {
g := gomega.NewGomegaWithT(t)
ruObj := &upgrademgrv1alpha1.RollingUpgrade{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}
ruObj.Status.CurrentStatus = StatusComplete
ruObj.Status.CurrentStatus = upgrademgrv1alpha1.StatusComplete

g.Expect(ruObj.ObjectMeta.Annotations).To(gomega.BeNil())
MarkObjForCleanup(ruObj)
Expand All @@ -87,7 +87,7 @@ func TestMarkObjForCleanupCompleted(t *testing.T) {
func TestMarkObjForCleanupError(t *testing.T) {
g := gomega.NewGomegaWithT(t)
ruObj := &upgrademgrv1alpha1.RollingUpgrade{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}
ruObj.Status.CurrentStatus = StatusError
ruObj.Status.CurrentStatus = upgrademgrv1alpha1.StatusError

g.Expect(ruObj.ObjectMeta.Annotations).To(gomega.BeNil())
MarkObjForCleanup(ruObj)
Expand Down Expand Up @@ -937,9 +937,9 @@ func TestFinishExecutionCompleted(t *testing.T) {
ctx := context.TODO()
mockNodesProcessed := 3

rcRollingUpgrade.finishExecution(StatusComplete, mockNodesProcessed, &ctx, ruObj)
rcRollingUpgrade.finishExecution(upgrademgrv1alpha1.StatusComplete, mockNodesProcessed, &ctx, ruObj)

g.Expect(ruObj.Status.CurrentStatus).To(gomega.Equal(StatusComplete))
g.Expect(ruObj.Status.CurrentStatus).To(gomega.Equal(upgrademgrv1alpha1.StatusComplete))
g.Expect(ruObj.Status.NodesProcessed).To(gomega.Equal(mockNodesProcessed))
g.Expect(ruObj.Status.EndTime).To(gomega.Not(gomega.BeNil()))
g.Expect(ruObj.Status.TotalProcessingTime).To(gomega.Not(gomega.BeNil()))
Expand Down Expand Up @@ -972,9 +972,9 @@ func TestFinishExecutionError(t *testing.T) {
ctx := context.TODO()
mockNodesProcessed := 3

rcRollingUpgrade.finishExecution(StatusError, mockNodesProcessed, &ctx, ruObj)
rcRollingUpgrade.finishExecution(upgrademgrv1alpha1.StatusError, mockNodesProcessed, &ctx, ruObj)

g.Expect(ruObj.Status.CurrentStatus).To(gomega.Equal(StatusError))
g.Expect(ruObj.Status.CurrentStatus).To(gomega.Equal(upgrademgrv1alpha1.StatusError))
g.Expect(ruObj.Status.NodesProcessed).To(gomega.Equal(mockNodesProcessed))
g.Expect(ruObj.Status.EndTime).To(gomega.Not(gomega.BeNil()))
g.Expect(ruObj.Status.TotalProcessingTime).To(gomega.Not(gomega.BeNil()))
Expand Down

0 comments on commit eb51ec0

Please sign in to comment.