With the Knative 0.13 release the ContainerSource is deprecated, and it is highly to use the SinkBinding instead.
With older releases (up to 0.12) the ContainerSource usage was like:
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: ContainerSource
metadata:
name: urbanobservatory-event-source
spec:
image: quay.io/openshift-knative/knative-eventing-sources-websocketsource:latest
args:
- '--source=wss://api.usb.urbanobservatory.ac.uk/stream'
- '--eventType=my.custom.event'
sink:
apiVersion: serving.knative.dev/v1
kind: Service
name: wss-event-displayThe referenced image of the ContainerSource needed an "sink" argument, see for details.
With the new release things are slightly different, but not much
Instead of a ContainerSource, you need to create a SinkBinding, like:
apiVersion: sources.knative.dev/v1alpha2
kind: SinkBinding
metadata:
name: bind-wss
spec:
subject:
apiVersion: apps/v1
kind: Deployment
selector:
matchLabels:
app: wss
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: wss-event-displayIn this example it reference a Kubernetes Deployment like you might have used before. Below is the referenced Deployment of our SinkBinding example:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wss
labels:
app: wss
spec:
selector:
matchLabels:
app: wss
template:
metadata:
labels:
app: wss
spec:
containers:
- image: quay.io/openshift-knative/knative-eventing-sources-websocketsource:latest
name: wss
args:
- '--source=wss://api.usb.urbanobservatory.ac.uk/stream'
- '--eventType=my.custom.event'The deployment looks like any other deployment, but what's important here is that the label app: wss is needed, for binding the two together. In side of the used image, it is required that it understands the semantics of the K_SINK environment variable, which is used to resolve the DNS name for the sink, that should receive the events.
Make sure you apply the SinkBinding before you apply the Deployment. The SinkBinding injects the K_SINK to the image of the deployment. So the code can read it to use it as its sink references for sending out events.
Running the above example will give a log like:
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: my.custom.event
source: wss://api.usb.urbanobservatory.ac.uk/stream
id: 3029a2f2-3ce1-48c0-9ed3-37d7ad88d0ef
time: 2020-03-05T13:46:15.329595422Z
Data,
{"signal":2,"data":{"brokerage":{"broker":{"id":"BMS-USB-5-JACE","meta":{"protocol":"BACNET","building":"Urban Sciences Building","buildingFloor":"5"}},"id":"Drivers.L6_C3_Electric_Meters.C3_Mechcanical_Plant.points.C3_HP_Current_L1","meta":{}},"entity":{"name":"Urban Sciences Building: Floor 5","meta":{"building":"Urban Sciences Building","buildingFloor":"5"}},"feed":{"metric":"C3 HP Current L1","meta":{}},"timeseries":{"unit":"no units","value":{"time":"2020-03-05T13:45:51.468Z","timeAccuracy":8.754,"data":0.47110211849212646,"type":"Real"}}},"recipients":0}
Converting an image that used to work with ContainerSource, to be ready to go with the SinkBinding, requires a little change like: