diff --git a/pkg/apis/messaging/v1/subscription_defaults.go b/pkg/apis/messaging/v1/subscription_defaults.go index c2ddc46ac0d..6cdf2bab9b5 100644 --- a/pkg/apis/messaging/v1/subscription_defaults.go +++ b/pkg/apis/messaging/v1/subscription_defaults.go @@ -25,5 +25,9 @@ func (s *Subscription) SetDefaults(ctx context.Context) { } func (ss *SubscriptionSpec) SetDefaults(ctx context.Context) { - // TODO anything? + // HACK if a channel ref is a kafka channel ref, we need to hack it around to use only v1beta1 + // TODO(slinkydeveloper) REMOVE AFTER 0.22 release + if ss.Channel.Kind == "KafkaChannel" && ss.Channel.APIVersion == "messaging.knative.dev/v1alpha1" { + ss.Channel.APIVersion = "messaging.knative.dev/v1beta1" + } } diff --git a/pkg/apis/messaging/v1/subscription_validation.go b/pkg/apis/messaging/v1/subscription_validation.go index f2496bc7afa..e3f3a517290 100644 --- a/pkg/apis/messaging/v1/subscription_validation.go +++ b/pkg/apis/messaging/v1/subscription_validation.go @@ -80,8 +80,16 @@ func (s *Subscription) CheckImmutableFields(ctx context.Context, original *Subsc return nil } + // TODO(slinkydeveloper) + // HACK around the immutability check to make sure the update script can upgrade the api version + // REMOVE AFTER 0.22 release + ignoredFields := []string{"Subscriber", "Reply"} + if original.Spec.Channel.Kind == "KafkaChannel" && original.Spec.Channel.APIVersion == "messaging.knative.dev/v1alpha1" && s.Spec.Channel.APIVersion == "messaging.knative.dev/v1beta1" { + ignoredFields = append(ignoredFields, "Channel.APIVersion") + } + // Only Subscriber and Reply are mutable. - ignoreArguments := cmpopts.IgnoreFields(SubscriptionSpec{}, "Subscriber", "Reply") + ignoreArguments := cmpopts.IgnoreFields(SubscriptionSpec{}, ignoredFields...) if diff, err := kmp.ShortDiff(original.Spec, s.Spec, ignoreArguments); err != nil { return &apis.FieldError{ Message: "Failed to diff Subscription", diff --git a/pkg/apis/messaging/v1/subscription_validation_test.go b/pkg/apis/messaging/v1/subscription_validation_test.go index e31086eba62..b956b8215ae 100644 --- a/pkg/apis/messaging/v1/subscription_validation_test.go +++ b/pkg/apis/messaging/v1/subscription_validation_test.go @@ -329,6 +329,29 @@ func TestSubscriptionImmutable(t *testing.T) { }, }, want: nil, + }, { + name: "valid, kafkachannel hack", + c: &Subscription{ + Spec: SubscriptionSpec{ + Channel: corev1.ObjectReference{ + Name: channelName, + Kind: "KafkaChannel", + APIVersion: "messaging.knative.dev/v1beta1", + }, + Subscriber: getValidDestination(), + }, + }, + og: &Subscription{ + Spec: SubscriptionSpec{ + Channel: corev1.ObjectReference{ + Name: channelName, + Kind: "KafkaChannel", + APIVersion: "messaging.knative.dev/v1alpha1", + }, + Subscriber: getValidDestination(), + }, + }, + want: nil, }, { name: "Channel changed", c: &Subscription{ diff --git a/pkg/apis/messaging/v1beta1/subscription_defaults.go b/pkg/apis/messaging/v1beta1/subscription_defaults.go index 16fd42ea588..6694bb17a45 100644 --- a/pkg/apis/messaging/v1beta1/subscription_defaults.go +++ b/pkg/apis/messaging/v1beta1/subscription_defaults.go @@ -25,5 +25,9 @@ func (s *Subscription) SetDefaults(ctx context.Context) { } func (ss *SubscriptionSpec) SetDefaults(ctx context.Context) { - // TODO anything? + // HACK if a channel ref is a kafka channel ref, we need to hack it around to use only v1beta1 + // TODO(slinkydeveloper) REMOVE AFTER 0.22 release + if ss.Channel.Kind == "KafkaChannel" && ss.Channel.APIVersion == "messaging.knative.dev/v1alpha1" { + ss.Channel.APIVersion = "messaging.knative.dev/v1beta1" + } } diff --git a/pkg/apis/messaging/v1beta1/subscription_validation.go b/pkg/apis/messaging/v1beta1/subscription_validation.go index 5cf8c2e8515..6d316efbb70 100644 --- a/pkg/apis/messaging/v1beta1/subscription_validation.go +++ b/pkg/apis/messaging/v1beta1/subscription_validation.go @@ -75,8 +75,16 @@ func (s *Subscription) CheckImmutableFields(ctx context.Context, original *Subsc return nil } + // TODO(slinkydeveloper) + // HACK around the immutability check to make sure the update script can upgrade the api version + // REMOVE AFTER 0.22 release + ignoredFields := []string{"Subscriber", "Reply"} + if original.Spec.Channel.Kind == "KafkaChannel" && original.Spec.Channel.APIVersion == "messaging.knative.dev/v1alpha1" && s.Spec.Channel.APIVersion == "messaging.knative.dev/v1beta1" { + ignoredFields = append(ignoredFields, "Channel.APIVersion") + } + // Only Subscriber and Reply are mutable. - ignoreArguments := cmpopts.IgnoreFields(SubscriptionSpec{}, "Subscriber", "Reply") + ignoreArguments := cmpopts.IgnoreFields(SubscriptionSpec{}, ignoredFields...) if diff, err := kmp.ShortDiff(original.Spec, s.Spec, ignoreArguments); err != nil { return &apis.FieldError{ Message: "Failed to diff Subscription", diff --git a/pkg/apis/messaging/v1beta1/subscription_validation_test.go b/pkg/apis/messaging/v1beta1/subscription_validation_test.go index c9a1a9efcdc..71e20fa4495 100644 --- a/pkg/apis/messaging/v1beta1/subscription_validation_test.go +++ b/pkg/apis/messaging/v1beta1/subscription_validation_test.go @@ -282,6 +282,29 @@ func TestSubscriptionImmutable(t *testing.T) { }, }, want: nil, + }, { + name: "valid, kafkachannel hack", + c: &Subscription{ + Spec: SubscriptionSpec{ + Channel: corev1.ObjectReference{ + Name: channelName, + Kind: "KafkaChannel", + APIVersion: "messaging.knative.dev/v1beta1", + }, + Subscriber: getValidDestination(), + }, + }, + og: &Subscription{ + Spec: SubscriptionSpec{ + Channel: corev1.ObjectReference{ + Name: channelName, + Kind: "KafkaChannel", + APIVersion: "messaging.knative.dev/v1alpha1", + }, + Subscriber: getValidDestination(), + }, + }, + want: nil, }, { name: "valid, new Reply", c: &Subscription{