diff --git a/pkg/sync/sync_context.go b/pkg/sync/sync_context.go index 3420a351c..b823a88dd 100644 --- a/pkg/sync/sync_context.go +++ b/pkg/sync/sync_context.go @@ -8,6 +8,7 @@ import ( "strings" "sync" "time" + "unicode" "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" @@ -754,7 +755,9 @@ func (sc *syncContext) getSyncTasks() (_ syncTasks, successful bool) { if targetObj.GetName() == "" { var syncRevision string if len(sc.revision) >= 8 { - syncRevision = sc.revision[0:7] + syncRevision = strings.TrimFunc(sc.revision[0:7], func(r rune) bool { + return !unicode.IsLetter(r) && !unicode.IsNumber(r) && r != '-' + }) } else { syncRevision = sc.revision } diff --git a/pkg/sync/sync_context_test.go b/pkg/sync/sync_context_test.go index 5cf77db32..0cb9f0862 100644 --- a/pkg/sync/sync_context_test.go +++ b/pkg/sync/sync_context_test.go @@ -13,6 +13,7 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation" "github.com/go-logr/logr" "github.com/stretchr/testify/assert" @@ -977,6 +978,24 @@ func TestUnnamedHooksGetUniqueNames(t *testing.T) { assert.Contains(t, tasks[1].name(), "foobar-postsync-") assert.Equal(t, "", pod.GetName()) }) + + t.Run("Long revision with dots", func(t *testing.T) { + syncCtx := newTestSyncCtx(nil) + pod := testingutils.NewPod() + pod.SetName("") + pod.SetAnnotations(map[string]string{synccommon.AnnotationKeyHook: "PreSync,PostSync"}) + syncCtx.hooks = []*unstructured.Unstructured{pod} + syncCtx.revision = "f.ooba.r" + tasks, successful := syncCtx.getSyncTasks() + + assert.True(t, successful) + assert.Len(t, tasks, 2) + assert.Contains(t, tasks[0].name(), "f.ooba-presync-") + assert.Contains(t, tasks[1].name(), "f.ooba-postsync-") + assert.Equal(t, "", pod.GetName()) + assert.Empty(t, validation.IsDNS1123Subdomain(tasks[0].name())) + assert.Empty(t, validation.IsDNS1123Subdomain(tasks[1].name())) + }) } func TestManagedResourceAreNotNamed(t *testing.T) {