Skip to content

Commit

Permalink
Merge pull request #529 from securesign/tturek/rekor-server-initialize
Browse files Browse the repository at this point in the history
rekor: Initialize action execute when targeted condition status is false
  • Loading branch information
openshift-merge-bot[bot] authored Jul 25, 2024
2 parents 59d0219 + d4e330f commit ad9da1d
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 55 deletions.
6 changes: 1 addition & 5 deletions internal/controller/rekor/actions/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
3 changes: 1 addition & 2 deletions internal/controller/rekor/actions/redis/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
7 changes: 4 additions & 3 deletions internal/controller/rekor/actions/server/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -55,5 +56,5 @@ func (i initializeAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Re
Status: metav1.ConditionTrue,
Reason: constants.Ready,
})
return i.Continue()
return i.StatusUpdate(ctx, instance)
}
11 changes: 2 additions & 9 deletions internal/controller/rekor/actions/server/resolve_pub_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
54 changes: 22 additions & 32 deletions internal/controller/rekor/actions/server/resolve_pub_key_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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,
})
}

Expand Down Expand Up @@ -173,6 +162,7 @@ func TestResolvePubKey_Handle(t *testing.T) {
{
Type: actions.ServerCondition,
Reason: constants.Initialize,
Status: metav1.ConditionFalse,
},
},
},
Expand Down
4 changes: 1 addition & 3 deletions internal/controller/rekor/actions/ui/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
11 changes: 10 additions & 1 deletion test/e2e/support/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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())
Expand Down

0 comments on commit ad9da1d

Please sign in to comment.