From 86c5b6e4237a62cc68419e723af869a8f091f5b3 Mon Sep 17 00:00:00 2001 From: Tomas Turek Date: Thu, 25 Jul 2024 10:51:22 +0200 Subject: [PATCH] rekor: Initialize action execute when targeted condition status is false --- .../controller/rekor/actions/initialize.go | 6 +-- .../rekor/actions/redis/initialize.go | 3 +- .../rekor/actions/server/initialize.go | 5 +- .../rekor/actions/server/resolve_pub_key.go | 11 +--- .../actions/server/resolve_pub_key_test.go | 54 ++++++++----------- .../controller/rekor/actions/ui/initialize.go | 4 +- test/e2e/support/common.go | 13 ++++- 7 files changed, 41 insertions(+), 55 deletions(-) diff --git a/internal/controller/rekor/actions/initialize.go b/internal/controller/rekor/actions/initialize.go index 937abf96..de54a34c 100644 --- a/internal/controller/rekor/actions/initialize.go +++ b/internal/controller/rekor/actions/initialize.go @@ -25,11 +25,7 @@ func (i initializeAction) Name() string { } func (i initializeAction) CanHandle(_ context.Context, instance *rhtasv1alpha1.Rekor) bool { - c := meta.FindStatusCondition(instance.Status.Conditions, constants.Ready) - if c == nil { - return false - } - return c.Reason == constants.Initialize + return meta.IsStatusConditionFalse(instance.Status.Conditions, constants.Ready) } func (i initializeAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor) *action.Result { diff --git a/internal/controller/rekor/actions/redis/initialize.go b/internal/controller/rekor/actions/redis/initialize.go index cd893f9c..8851547c 100644 --- a/internal/controller/rekor/actions/redis/initialize.go +++ b/internal/controller/rekor/actions/redis/initialize.go @@ -25,8 +25,7 @@ func (i initializeAction) Name() string { } func (i initializeAction) CanHandle(_ context.Context, instance *rhtasv1alpha1.Rekor) bool { - c := meta.FindStatusCondition(instance.Status.Conditions, constants.Ready) - return c.Reason == constants.Initialize && !meta.IsStatusConditionTrue(instance.Status.Conditions, actions.RedisCondition) + return meta.IsStatusConditionFalse(instance.Status.Conditions, actions.RedisCondition) } func (i initializeAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor) *action.Result { diff --git a/internal/controller/rekor/actions/server/initialize.go b/internal/controller/rekor/actions/server/initialize.go index 5ad3323a..920b1f6f 100644 --- a/internal/controller/rekor/actions/server/initialize.go +++ b/internal/controller/rekor/actions/server/initialize.go @@ -24,11 +24,12 @@ func (i initializeAction) Name() string { return "initialize" } +// CanHandle check if ServerAvailable condition status is false. It is sign that some previous server action make some change. func (i initializeAction) CanHandle(_ context.Context, instance *rhtasv1alpha1.Rekor) bool { - c := meta.FindStatusCondition(instance.Status.Conditions, constants.Ready) - return c.Reason == constants.Initialize && !meta.IsStatusConditionTrue(instance.Status.Conditions, actions.ServerCondition) + return meta.IsStatusConditionFalse(instance.Status.Conditions, actions.ServerCondition) } +// Handle set ServerAvailable status to true if server's deployment is available. func (i initializeAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor) *action.Result { var ( ok bool diff --git a/internal/controller/rekor/actions/server/resolve_pub_key.go b/internal/controller/rekor/actions/server/resolve_pub_key.go index 70c3b951..88e6795d 100644 --- a/internal/controller/rekor/actions/server/resolve_pub_key.go +++ b/internal/controller/rekor/actions/server/resolve_pub_key.go @@ -42,15 +42,8 @@ func (i resolvePubKeyAction) Name() string { } func (i resolvePubKeyAction) CanHandle(_ context.Context, instance *rhtasv1alpha1.Rekor) bool { - c := meta.FindStatusCondition(instance.Status.Conditions, actions.ServerCondition) - if c == nil { - return false - } - if c.Reason != constants.Initialize && c.Reason != constants.Ready { - return false - } - - return instance.Status.PublicKeyRef == nil + return meta.IsStatusConditionTrue(instance.Status.Conditions, actions.ServerCondition) && + instance.Status.PublicKeyRef == nil } func (i resolvePubKeyAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor) *action.Result { diff --git a/internal/controller/rekor/actions/server/resolve_pub_key_test.go b/internal/controller/rekor/actions/server/resolve_pub_key_test.go index b4fba72c..e48dbad0 100644 --- a/internal/controller/rekor/actions/server/resolve_pub_key_test.go +++ b/internal/controller/rekor/actions/server/resolve_pub_key_test.go @@ -29,46 +29,35 @@ var testPublicKey2 = []byte("-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZ func TestResolvePubKey_CanHandle(t *testing.T) { tests := []struct { - name string - serverCondition string - canHandle bool - ref *v1alpha1.SecretKeySelector + name string + status metav1.ConditionStatus + canHandle bool + ref *v1alpha1.SecretKeySelector }{ { - name: "ref set", - serverCondition: constants.Initialize, - canHandle: false, - ref: &v1alpha1.SecretKeySelector{}, - }, - { - name: "no server condition", - serverCondition: "", - canHandle: false, - }, - { - name: constants.Ready, - serverCondition: constants.Ready, - canHandle: true, + name: "ref set", + status: metav1.ConditionFalse, + canHandle: false, + ref: &v1alpha1.SecretKeySelector{}, }, { - name: constants.Pending, - serverCondition: constants.Pending, - canHandle: false, + name: "no server condition", + canHandle: false, }, { - name: constants.Creating, - serverCondition: constants.Creating, - canHandle: false, + name: "ServerAvailable == True", + status: metav1.ConditionTrue, + canHandle: true, }, { - name: constants.Initialize, - serverCondition: constants.Initialize, - canHandle: true, + name: "ServerAvailable == False", + status: metav1.ConditionFalse, + canHandle: false, }, { - name: constants.Failure, - serverCondition: constants.Failure, - canHandle: false, + name: "ServerAvailable == Unknown", + status: metav1.ConditionUnknown, + canHandle: false, }, } for _, tt := range tests { @@ -79,10 +68,10 @@ func TestResolvePubKey_CanHandle(t *testing.T) { PublicKeyRef: tt.ref, }, } - if tt.serverCondition != "" { + if tt.status != "" { meta.SetStatusCondition(&instance.Status.Conditions, metav1.Condition{ Type: actions.ServerCondition, - Reason: tt.serverCondition, + Status: tt.status, }) } @@ -173,6 +162,7 @@ func TestResolvePubKey_Handle(t *testing.T) { { Type: actions.ServerCondition, Reason: constants.Initialize, + Status: metav1.ConditionFalse, }, }, }, diff --git a/internal/controller/rekor/actions/ui/initialize.go b/internal/controller/rekor/actions/ui/initialize.go index 43a8007b..c46af365 100644 --- a/internal/controller/rekor/actions/ui/initialize.go +++ b/internal/controller/rekor/actions/ui/initialize.go @@ -29,9 +29,7 @@ func (i initializeAction) Name() string { } func (i initializeAction) CanHandle(ctx context.Context, instance *rhtasv1alpha1.Rekor) bool { - c := meta.FindStatusCondition(instance.Status.Conditions, constants.Ready) - return c.Reason == constants.Initialize && - !meta.IsStatusConditionTrue(instance.Status.Conditions, actions.UICondition) && + return meta.IsStatusConditionFalse(instance.Status.Conditions, actions.UICondition) && utils.IsEnabled(instance.Spec.RekorSearchUI.Enabled) } diff --git a/test/e2e/support/common.go b/test/e2e/support/common.go index 4077c6f4..fa3a4b83 100644 --- a/test/e2e/support/common.go +++ b/test/e2e/support/common.go @@ -8,13 +8,16 @@ import ( v13 "k8s.io/api/batch/v1" "log" "os" + "path/filepath" "reflect" + "regexp" "strings" "time" "github.com/docker/docker/api/types" docker "github.com/docker/docker/client" "github.com/google/uuid" + "github.com/onsi/ginkgo/v2" "github.com/onsi/ginkgo/v2/dsl/core" . "github.com/onsi/gomega" "github.com/securesign/operator/api/v1alpha1" @@ -29,9 +32,15 @@ import ( const fromImage = "alpine:latest" func CreateTestNamespace(ctx context.Context, cli client.Client) *v1.Namespace { + sp := ginkgo.CurrentSpecReport() + fn := filepath.Base(sp.LeafNodeLocation.FileName) + // Replace invalid characters with '-' + re := regexp.MustCompile("[^a-z0-9-]") + name := re.ReplaceAllString(strings.TrimSuffix(fn, filepath.Ext(fn)), "-") + ns := &v1.Namespace{ ObjectMeta: metav1.ObjectMeta{ - Name: "test-" + uuid.New().String(), + GenerateName: name + "-", }, } Expect(cli.Create(ctx, ns)).To(Succeed()) @@ -57,7 +66,7 @@ func PrepareImage(ctx context.Context) string { Expect(dockerCli.ImageTag(ctx, fromImage, targetImageName)).To(Succeed()) var push io.ReadCloser - push, err = dockerCli.ImagePush(ctx, targetImageName, types.ImagePushOptions{RegistryAuth: types.RegistryAuthFromSpec}) + push, err = dockerCli.ImagePush(ctx, targetImageName, types.ImagePushOptions{}) Expect(err).ToNot(HaveOccurred()) _, err = io.Copy(core.GinkgoWriter, push) Expect(err).ToNot(HaveOccurred())