Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/webhook/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ import (
sourcesv1alpha1 "knative.dev/eventing/pkg/apis/sources/v1alpha1"
sourcesv1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
sourcesv1beta1 "knative.dev/eventing/pkg/apis/sources/v1beta1"
sourcesv1beta2 "knative.dev/eventing/pkg/apis/sources/v1beta2"
"knative.dev/eventing/pkg/logconfig"
"knative.dev/eventing/pkg/reconciler/sinkbinding"
)
Expand Down Expand Up @@ -95,6 +96,8 @@ var ourTypes = map[schema.GroupVersionKind]resourcesemantics.GenericCRD{
sourcesv1beta1.SchemeGroupVersion.WithKind("PingSource"): &sourcesv1beta1.PingSource{},
sourcesv1beta1.SchemeGroupVersion.WithKind("SinkBinding"): &sourcesv1beta1.SinkBinding{},
sourcesv1beta1.SchemeGroupVersion.WithKind("ContainerSource"): &sourcesv1beta1.ContainerSource{},
// v1beta2
sourcesv1beta2.SchemeGroupVersion.WithKind("PingSource"): &sourcesv1beta2.PingSource{},
// v1
sourcesv1.SchemeGroupVersion.WithKind("ApiServerSource"): &sourcesv1.ApiServerSource{},
sourcesv1.SchemeGroupVersion.WithKind("SinkBinding"): &sourcesv1.SinkBinding{},
Expand Down Expand Up @@ -245,6 +248,7 @@ func NewConversionController(ctx context.Context, cmw configmap.Watcher) *contro
sourcesv1alpha1_ = sourcesv1alpha1.SchemeGroupVersion.Version
sourcesv1alpha2_ = sourcesv1alpha2.SchemeGroupVersion.Version
sourcesv1beta1_ = sourcesv1beta1.SchemeGroupVersion.Version
sourcesv1beta2_ = sourcesv1beta2.SchemeGroupVersion.Version
sourcesv1_ = sourcesv1.SchemeGroupVersion.Version
)

Expand Down Expand Up @@ -333,6 +337,7 @@ func NewConversionController(ctx context.Context, cmw configmap.Watcher) *contro
Zygotes: map[string]conversion.ConvertibleObject{
sourcesv1alpha2_: &sourcesv1alpha2.PingSource{},
sourcesv1beta1_: &sourcesv1beta1.PingSource{},
sourcesv1beta2_: &sourcesv1beta2.PingSource{},
},
},
sourcesv1.Kind("SinkBinding"): {
Expand Down
146 changes: 146 additions & 0 deletions config/core/resources/pingsource.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,152 @@ spec:
description: 'SinkURI is the current active sink URI that has been
configured for the Source.'
type: string
- <<: *version
name: v1beta2
served: true
storage: false
schema:
openAPIV3Schema:
type: object
description: 'PingSource describes an event source with a fixed payload produced on a specified cron schedule.'
properties:
spec:
type: object
description: 'PingSourceSpec defines the desired state of the PingSource (from the client).'
properties:
ceOverrides:
description: 'CloudEventOverrides defines overrides to control the
output format and modifications of the event sent to the sink.'
type: object
properties:
extensions:
description: 'Extensions specify what attribute are added or
overridden on the outbound event. Each `Extensions` key-value
pair are set on the event as an attribute extension independently.'
type: object
additionalProperties:
type: string
x-kubernetes-preserve-unknown-fields: true
contentType:
description: 'ContentType is the media type of `data` or `dataBase64`. Default is empty'
type: string
data:
description: 'Data is data used as the body of the event posted to the sink. Default is empty.
Mutually exclusive with `dataBase64`.'
type: string
dataBase64:
description: 'DataBase64 is base64 encoded binary data used as the body of the event posted to the sink.
Mutually exclusive with `data`.'
type: string
schedule:
description: 'Schedule is the cron schedule. Defaults to `* * *
* *`.'
type: string
sink:
description: 'Sink is a reference to an object that will resolve to
a uri to use as the sink.'
type: object
properties:
ref:
description: 'Ref points to an Addressable.'
type: object
properties:
apiVersion:
description: 'API version of the referent.'
type: string
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
type: string
namespace:
description: 'Namespace of the referent. More info:
https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
This is optional field, it gets defaulted to the
object holding it if left out.'
type: string
uri:
description: 'URI can be an absolute URL(non-empty scheme and
non-empty host) pointing to the target or a relative URI.
Relative URIs will be resolved using the base URI retrieved
from Ref.'
type: string
timezone:
description: 'Timezone modifies the actual time relative to the specified
timezone. Defaults to the system time zone. More general information
about time zones: https://www.iana.org/time-zones List of valid
timezone values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones'
type: string
status:
type: object
description: 'PingSourceStatus defines the observed state of PingSource (from the controller).'
properties:
annotations:
description: 'Annotations is additional Status fields for the Resource
to save some additional State as well as convey more information
to the user. This is roughly akin to Annotations on any k8s resource,
just the reconciler conveying richer information outwards.'
type: object
x-kubernetes-preserve-unknown-fields: true
ceAttributes:
description: 'CloudEventAttributes are the specific attributes that
the Source uses as part of its CloudEvents.'
type: array
items:
type: object
properties:
source:
description: 'Source is the CloudEvents source attribute.'
type: string
type:
description: 'Type refers to the CloudEvent type attribute.'
type: string
conditions:
description: 'Conditions the latest available observations of a resource''s
current state.'
type: array
items:
type: object
required:
- type
- status
properties:
lastTransitionTime:
description: 'LastTransitionTime is the last time the condition
transitioned from one status to another. We use VolatileTime
in place of metav1.Time to exclude this from creating
equality.Semantic differences (all other things held
constant).'
type: string
message:
description: 'A human readable message indicating details
about the transition.'
type: string
reason:
description: 'The reason for the condition''s last transition.'
type: string
severity:
description: 'Severity with which to treat failures of
this type of condition. When this is not specified,
it defaults to Error.'
type: string
status:
description: 'Status of the condition, one of True, False,
Unknown.'
type: string
type:
description: 'Type of condition.'
type: string
observedGeneration:
description: 'ObservedGeneration is the "Generation" of the Service
that was last processed by the controller.'
type: integer
format: int64
sinkUri:
description: 'SinkURI is the current active sink URI that has been
configured for the Source.'
type: string
names:
categories:
- all
Expand Down
4 changes: 2 additions & 2 deletions hack/update-codegen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ chmod +x ${CODEGEN_PKG}/generate-groups.sh
# instead of the $GOPATH directly. For normal projects this can be dropped.
${CODEGEN_PKG}/generate-groups.sh "deepcopy,client,informer,lister" \
knative.dev/eventing/pkg/client knative.dev/eventing/pkg/apis \
"eventing:v1beta1 eventing:v1 messaging:v1beta1 messaging:v1 flows:v1beta1 flows:v1 sources:v1alpha1 sources:v1alpha2 sources:v1beta1 sources:v1 configs:v1alpha1" \
"eventing:v1beta1 eventing:v1 messaging:v1beta1 messaging:v1 flows:v1beta1 flows:v1 sources:v1alpha1 sources:v1alpha2 sources:v1beta1 sources:v1beta2 sources:v1 configs:v1alpha1" \
--go-header-file ${REPO_ROOT_DIR}/hack/boilerplate/boilerplate.go.txt

# Deep copy config
Expand All @@ -64,7 +64,7 @@ ${CODEGEN_PKG}/generate-groups.sh "deepcopy" \
chmod +x ${KNATIVE_CODEGEN_PKG}/hack/generate-knative.sh
${KNATIVE_CODEGEN_PKG}/hack/generate-knative.sh "injection" \
knative.dev/eventing/pkg/client knative.dev/eventing/pkg/apis \
"eventing:v1beta1 eventing:v1 messaging:v1beta1 messaging:v1 flows:v1beta1 flows:v1 sources:v1alpha1 sources:v1alpha2 sources:v1beta1 sources:v1 duck:v1alpha1 duck:v1beta1 duck:v1 configs:v1alpha1" \
"eventing:v1beta1 eventing:v1 messaging:v1beta1 messaging:v1 flows:v1beta1 flows:v1 sources:v1alpha1 sources:v1alpha2 sources:v1beta1 sources:v1beta2 sources:v1 duck:v1alpha1 duck:v1beta1 duck:v1 configs:v1alpha1" \
--go-header-file ${REPO_ROOT_DIR}/hack/boilerplate/boilerplate.go.txt

# Make sure our dependencies are up-to-date
Expand Down
6 changes: 3 additions & 3 deletions pkg/adapter/mtping/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (
"knative.dev/pkg/logging"

"knative.dev/eventing/pkg/adapter/v2"
"knative.dev/eventing/pkg/apis/sources/v1beta1"
v1beta2 "knative.dev/eventing/pkg/apis/sources/v1beta2"
)

const (
Expand Down Expand Up @@ -93,7 +93,7 @@ func GetNoShutDownAfterValue() int {

// Implements MTAdapter

func (a *mtpingAdapter) Update(ctx context.Context, source *v1beta1.PingSource) {
func (a *mtpingAdapter) Update(ctx context.Context, source *v1beta2.PingSource) {
logging.FromContext(ctx).Info("Synchronizing schedule")

key := fmt.Sprintf("%s/%s", source.Namespace, source.Name)
Expand All @@ -113,7 +113,7 @@ func (a *mtpingAdapter) Update(ctx context.Context, source *v1beta1.PingSource)
a.entryidMu.Unlock()
}

func (a *mtpingAdapter) Remove(ctx context.Context, source *v1beta1.PingSource) {
func (a *mtpingAdapter) Remove(ctx context.Context, source *v1beta2.PingSource) {
key := fmt.Sprintf("%s/%s", source.Namespace, source.Name)

a.entryidMu.RLock()
Expand Down
8 changes: 4 additions & 4 deletions pkg/adapter/mtping/adapter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

sourcesv1beta1 "knative.dev/eventing/pkg/apis/sources/v1beta1"
"knative.dev/eventing/pkg/apis/sources/v1beta2"

"github.com/robfig/cron/v3"

Expand Down Expand Up @@ -70,7 +70,7 @@ func TestUpdateRemoveAdapter(t *testing.T) {
entryids: make(map[string]cron.EntryID),
}

adapter.Update(ctx, &sourcesv1beta1.PingSource{
adapter.Update(ctx, &v1beta2.PingSource{
ObjectMeta: metav1.ObjectMeta{
Name: "test-name",
Namespace: "test-ns",
Expand All @@ -81,7 +81,7 @@ func TestUpdateRemoveAdapter(t *testing.T) {
t.Error(`Expected cron entries to contain "test-ns/test-name"`)
}

adapter.Remove(ctx, &sourcesv1beta1.PingSource{
adapter.Remove(ctx, &v1beta2.PingSource{
ObjectMeta: metav1.ObjectMeta{
Name: "test-name",
Namespace: "test-ns",
Expand All @@ -96,7 +96,7 @@ type testRunner struct {
CronJobRunner
}

func (*testRunner) AddSchedule(*sourcesv1beta1.PingSource) cron.EntryID {
func (*testRunner) AddSchedule(*v1beta2.PingSource) cron.EntryID {
return cron.EntryID(1)
}
func (*testRunner) RemoveSchedule(cron.EntryID) {}
10 changes: 5 additions & 5 deletions pkg/adapter/mtping/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,20 @@ import (
"knative.dev/pkg/logging"

"knative.dev/eventing/pkg/adapter/v2"
"knative.dev/eventing/pkg/apis/sources/v1beta1"
pingsourceinformer "knative.dev/eventing/pkg/client/injection/informers/sources/v1beta1/pingsource"
pingsourcereconciler "knative.dev/eventing/pkg/client/injection/reconciler/sources/v1beta1/pingsource"
"knative.dev/eventing/pkg/apis/sources/v1beta2"
pingsourceinformer "knative.dev/eventing/pkg/client/injection/informers/sources/v1beta2/pingsource"
pingsourcereconciler "knative.dev/eventing/pkg/client/injection/reconciler/sources/v1beta2/pingsource"
)

// TODO: code generation

// MTAdapter is the interface the multi-tenant PingSource adapter must implement
type MTAdapter interface {
// Update is called when the source is ready and when the specification and/or status has changed.
Update(ctx context.Context, source *v1beta1.PingSource)
Update(ctx context.Context, source *v1beta2.PingSource)

// Remove is called when the source has been deleted.
Remove(ctx context.Context, source *v1beta1.PingSource)
Remove(ctx context.Context, source *v1beta2.PingSource)
}

// NewController initializes the controller. This is called by the shared adapter Main
Expand Down
10 changes: 5 additions & 5 deletions pkg/adapter/mtping/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@ import (

. "knative.dev/pkg/reconciler/testing"

"knative.dev/eventing/pkg/adapter/v2"
// Fake injection informers
_ "knative.dev/eventing/pkg/client/injection/informers/sources/v1beta2/pingsource/fake"

"knative.dev/eventing/pkg/adapter/v2"
"knative.dev/eventing/pkg/apis/sources/v1beta1"
_ "knative.dev/eventing/pkg/client/injection/informers/sources/v1beta1/pingsource/fake"
"knative.dev/eventing/pkg/apis/sources/v1beta2"
)

type testAdapter struct {
adapter.Adapter
}

func (testAdapter) Update(ctx context.Context, source *v1beta1.PingSource) {
func (testAdapter) Update(context.Context, *v1beta2.PingSource) {
}

func (testAdapter) Remove(ctx context.Context, source *v1beta1.PingSource) {
func (testAdapter) Remove(context.Context, *v1beta2.PingSource) {
}

func TestNew(t *testing.T) {
Expand Down
8 changes: 4 additions & 4 deletions pkg/adapter/mtping/pingsource.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ import (

"knative.dev/pkg/reconciler"

"knative.dev/eventing/pkg/apis/sources/v1beta1"
pingsourcereconciler "knative.dev/eventing/pkg/client/injection/reconciler/sources/v1beta1/pingsource"
"knative.dev/eventing/pkg/apis/sources/v1beta2"
pingsourcereconciler "knative.dev/eventing/pkg/client/injection/reconciler/sources/v1beta2/pingsource"
)

// TODO: code generation
Expand All @@ -39,7 +39,7 @@ var _ pingsourcereconciler.Interface = (*Reconciler)(nil)
// Check that our Reconciler implements FinalizeKind.
var _ pingsourcereconciler.Finalizer = (*Reconciler)(nil)

func (r *Reconciler) ReconcileKind(ctx context.Context, source *v1beta1.PingSource) reconciler.Event {
func (r *Reconciler) ReconcileKind(ctx context.Context, source *v1beta2.PingSource) reconciler.Event {
if !source.Status.IsReady() {
return fmt.Errorf("warning: PingSource is not ready")
}
Expand All @@ -50,7 +50,7 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, source *v1beta1.PingSour
return nil
}

func (r *Reconciler) FinalizeKind(ctx context.Context, source *v1beta1.PingSource) reconciler.Event {
func (r *Reconciler) FinalizeKind(ctx context.Context, source *v1beta2.PingSource) reconciler.Event {
// Update the adapter state
r.mtadapter.Remove(ctx, source)

Expand Down
Loading