approvals integration
parent
1fc0d32771
commit
fd6c1b96a2
|
@ -53,10 +53,10 @@ func (p *Provider) isApproved(event *types.Event, plan *UpdatePlan) (bool, error
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
deadline := types.KeelApprovalTimeoutDefault
|
deadline := types.KeelApprovalDeadlineDefault
|
||||||
|
|
||||||
// deadline
|
// deadline
|
||||||
deadlineStr, ok := labels[types.KeelApprovalTimeoutLabel]
|
deadlineStr, ok := labels[types.KeelApprovalDeadlineLabel]
|
||||||
if ok {
|
if ok {
|
||||||
d, err := strconv.Atoi(deadlineStr)
|
d, err := strconv.Atoi(deadlineStr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -81,7 +81,7 @@ func (p *Provider) isApproved(event *types.Event, plan *UpdatePlan) (bool, error
|
||||||
VotesRequired: minApprovals,
|
VotesRequired: minApprovals,
|
||||||
VotesReceived: 0,
|
VotesReceived: 0,
|
||||||
Rejected: false,
|
Rejected: false,
|
||||||
Deadline: time.Duration(deadline) * time.Minute,
|
Deadline: time.Now().Add(time.Duration(deadline) * time.Hour),
|
||||||
}
|
}
|
||||||
|
|
||||||
approval.Message = fmt.Sprintf("New image is available for deployment %s/%s (%s).",
|
approval.Message = fmt.Sprintf("New image is available for deployment %s/%s (%s).",
|
||||||
|
|
|
@ -2,6 +2,7 @@ package kubernetes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/rusenask/keel/types"
|
"github.com/rusenask/keel/types"
|
||||||
|
|
||||||
|
@ -76,3 +77,77 @@ func TestCheckRequestedApproval(t *testing.T) {
|
||||||
t.Errorf("wrong provider: %s", approval.Provider)
|
t.Errorf("wrong provider: %s", approval.Provider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestApprovedCheck(t *testing.T) {
|
||||||
|
fp := &fakeImplementer{}
|
||||||
|
fp.namespaces = &v1.NamespaceList{
|
||||||
|
Items: []v1.Namespace{
|
||||||
|
v1.Namespace{
|
||||||
|
meta_v1.TypeMeta{},
|
||||||
|
meta_v1.ObjectMeta{Name: "xxxx"},
|
||||||
|
v1.NamespaceSpec{},
|
||||||
|
v1.NamespaceStatus{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
fp.deploymentList = &v1beta1.DeploymentList{
|
||||||
|
Items: []v1beta1.Deployment{
|
||||||
|
v1beta1.Deployment{
|
||||||
|
meta_v1.TypeMeta{},
|
||||||
|
meta_v1.ObjectMeta{
|
||||||
|
Name: "dep-1",
|
||||||
|
Namespace: "xxxx",
|
||||||
|
Labels: map[string]string{types.KeelPolicyLabel: "all", types.KeelMinimumApprovalsLabel: "1"},
|
||||||
|
},
|
||||||
|
v1beta1.DeploymentSpec{
|
||||||
|
Template: v1.PodTemplateSpec{
|
||||||
|
Spec: v1.PodSpec{
|
||||||
|
Containers: []v1.Container{
|
||||||
|
v1.Container{
|
||||||
|
Image: "gcr.io/v2-namespace/hello-world:1.1.1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
v1beta1.DeploymentStatus{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
approver := approver()
|
||||||
|
provider, err := NewProvider(fp, &fakeSender{}, approver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to get provider: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// approving event
|
||||||
|
err = provider.approvalManager.Create(&types.Approval{
|
||||||
|
Identifier: "xxxx/dep-1:1.1.2",
|
||||||
|
VotesReceived: 2,
|
||||||
|
VotesRequired: 2,
|
||||||
|
Deadline: time.Now().Add(10 * time.Second),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create approval: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
appr, _ := provider.approvalManager.Get("xxxx/dep-1:1.1.2")
|
||||||
|
if appr.Status() != types.ApprovalStatusApproved {
|
||||||
|
t.Fatalf("approval not approved")
|
||||||
|
}
|
||||||
|
|
||||||
|
// creating "new version" event
|
||||||
|
repo := types.Repository{
|
||||||
|
Name: "gcr.io/v2-namespace/hello-world",
|
||||||
|
Tag: "1.1.2",
|
||||||
|
}
|
||||||
|
|
||||||
|
deps, err := provider.processEvent(&types.Event{Repository: repo})
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to get deployments: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(deps) != 1 {
|
||||||
|
t.Errorf("expected to find 1 updated deployment but found %d", len(deps))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ func (s *fakeSender) Send(event types.EventNotification) error {
|
||||||
func approver() *approvals.DefaultManager {
|
func approver() *approvals.DefaultManager {
|
||||||
cache := memory.NewMemoryCache(10*time.Minute, 10*time.Minute, 10*time.Minute)
|
cache := memory.NewMemoryCache(10*time.Minute, 10*time.Minute, 10*time.Minute)
|
||||||
|
|
||||||
return approvals.New(cache, codecs.DefaultSerializer(), &fakeProvider{})
|
return approvals.New(cache, codecs.DefaultSerializer())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetNamespaces(t *testing.T) {
|
func TestGetNamespaces(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue