Skip to content

Commit

Permalink
generate recommendation if default policy annotation changes
Browse files Browse the repository at this point in the history
  • Loading branch information
deefreak committed Jan 29, 2024
1 parent 8558ed2 commit 6584015
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 2 deletions.
6 changes: 5 additions & 1 deletion pkg/controller/deployment_trigger_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,11 @@ func (r *DeploymentTriggerController) SetupWithManager(mgr ctrl.Manager) error {
newMaxPods, _ = newObj.GetAnnotations()[reco.OttoscalrMaxPodAnnotation]
oldMaxPods, _ = oldObj.GetAnnotations()[reco.OttoscalrMaxPodAnnotation]

if newMaxPods != oldMaxPods {
var newDefaultPolicy, oldDefaultPolicy string
newDefaultPolicy, _ = newObj.GetAnnotations()[reco.DefaultPolicyAnnotation]
oldDefaultPolicy, _ = oldObj.GetAnnotations()[reco.DefaultPolicyAnnotation]

if newMaxPods != oldMaxPods || newDefaultPolicy != oldDefaultPolicy {
return true
}

Expand Down
116 changes: 115 additions & 1 deletion pkg/controller/deployment_trigger_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@ import (
"context"
"encoding/json"
"fmt"
"time"

rolloutv1alpha1 "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
ottoscaleriov1alpha1 "github.com/flipkart-incubator/ottoscalr/api/v1alpha1"
"github.com/flipkart-incubator/ottoscalr/pkg/reco"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
appsv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"time"
)

//+kubebuilder:docs-gen:collapse=Imports
Expand Down Expand Up @@ -363,4 +365,116 @@ var _ = Describe("Deployment controller", func() {
})
})

Context("When updating the default annotation for a Deployment", func() {
var deployment *appsv1.Deployment
var policyreco *ottoscaleriov1alpha1.PolicyRecommendation
ctx := context.TODO()
now := metav1.Now()
BeforeEach(func() {
deployment = &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: DeploymentName,
Namespace: DeploymentNamespace,
Annotations: map[string]string{
"ottoscalr.io/max-pods": "60",
},
},

Spec: appsv1.DeploymentSpec{
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"app": "test-app",
},
},
Template: v1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"app": "test-app",
},
},
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "test-container",
Image: "nginx:1.17.5",
},
},
},
},
},
}

policyreco = &ottoscaleriov1alpha1.PolicyRecommendation{
ObjectMeta: metav1.ObjectMeta{
Name: DeploymentName,
Namespace: DeploymentNamespace,
},
Spec: ottoscaleriov1alpha1.PolicyRecommendationSpec{
WorkloadMeta: ottoscaleriov1alpha1.WorkloadMeta{
Name: DeploymentName,
},
Policy: "test-policy",
GeneratedAt: &now,
TransitionedAt: &now,
QueuedForExecution: &falseBool,
QueuedForExecutionAt: &now,
},
}
Expect(k8sClient1.Create(ctx, policyreco)).Should(Succeed())

Expect(k8sClient1.Create(ctx, deployment)).Should(Succeed())
})
AfterEach(func() {
Expect(k8sClient1.Delete(ctx, deployment)).Should(Succeed())
Expect(k8sClient1.Delete(ctx, policyreco)).Should(Succeed())
})
It("Should requeue the policyreco", func() {
By("By updating the max pod annotation for a Deployment")

createdDeployment := &appsv1.Deployment{}
createdPolicy := &ottoscaleriov1alpha1.PolicyRecommendation{}

time.Sleep(5 * time.Second)

Eventually(func() bool {
err := k8sClient1.Get(ctx,
types.NamespacedName{Name: DeploymentName, Namespace: DeploymentNamespace},
createdDeployment)
if err != nil {
return false
}

err = k8sClient1.Get(ctx,
types.NamespacedName{Name: DeploymentName, Namespace: DeploymentNamespace},
createdPolicy)
if err != nil {
return false
}
return true
}, timeout, interval).Should(BeTrue())

Expect(createdDeployment.Name).Should(Equal(DeploymentName))

createdPolicyString, _ := json.MarshalIndent(createdPolicy, "", " ")
fmt.Fprintf(GinkgoWriter, "%s\n", createdPolicyString)

Expect(createdPolicy.Spec.QueuedForExecution).Should(Equal(&falseBool))

createdDeployment.Annotations[reco.DefaultPolicyAnnotation] = "p-target-30"
Expect(k8sClient1.Update(ctx, createdDeployment)).Should(Succeed())
updatedPolicy := &ottoscaleriov1alpha1.PolicyRecommendation{}

time.Sleep(5 * time.Second)

k8sClient1.Get(ctx,
types.NamespacedName{Name: DeploymentName, Namespace: DeploymentNamespace},
updatedPolicy)
updatedPolicyRecoString, _ := json.MarshalIndent(updatedPolicy, "", " ")
fmt.Fprintf(GinkgoWriter, "Updated: %s\n", updatedPolicyRecoString)

Expect(updatedPolicy.Spec.QueuedForExecution).Should(Equal(&trueBool))

})
})

})

0 comments on commit 6584015

Please sign in to comment.