PingSource example

This example shows how to configure PingSource as an event source for functions.

Before you begin

  1. Set up Knative Serving.
  2. Set up Knative Eventing.

Create a Knative Service

To verify that PingSource is working, create a simple Knative Service that dumps incoming messages to its log.

{{< tabs name=”create-service” default=”By YAML” >}} {{% tab name=”By YAML” %}} Use following command to create the service from STDIN:

  1. cat <<EOF | kubectl create -f -
  2. apiVersion: serving.knative.dev/v1
  3. kind: Service
  4. metadata:
  5. name: event-display
  6. spec:
  7. template:
  8. spec:
  9. containers:
  10. - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display
  11. EOF

{{< /tab >}}

{{% tab name=”By filename” %}} Use following command to create the service from the service.yaml file:

  1. kubectl apply --filename service.yaml

{{< /tab >}} {{< /tabs >}}

Create a PingSource

For each set of ping events that you want to request, create an Event Source in the same namespace as the destination.

{{< tabs name=”create-source” default=”By YAML” >}} {{% tab name=”By YAML” %}} Use following command to create the event source from STDIN:

  1. cat <<EOF | kubectl create -f -
  2. apiVersion: sources.knative.dev/v1alpha2
  3. kind: PingSource
  4. metadata:
  5. name: test-ping-source
  6. spec:
  7. schedule: "*/2 * * * *"
  8. jsonData: '{"message": "Hello world!"}'
  9. sink:
  10. ref:
  11. apiVersion: serving.knative.dev/v1
  12. kind: Service
  13. name: event-display
  14. EOF

{{< /tab >}}

{{% tab name=”By filename” %}} Use following command to create the event source from the ping-source.yaml file:

  1. kubectl apply --filename ping-source.yaml

{{< /tab >}} {{< /tabs >}}

Verify

Verify that the message was sent to the Knative eventing system by looking at message dumper logs.

{{< tabs name=”view-event” default=”kubectl” >}} {{% tab name=”kubectl” %}}

Use following command to view the logs of the event-display service:

  1. kubectl logs -l serving.knative.dev/service=event-display -c user-container --since=10m

{{< /tab >}} {{% tab name=”kail” %}}

You can also use kail instead of kubectl logs to tail the logs of the subscriber.

  1. kail -l serving.knative.dev/service=event-display -c user-container --since=10m

{{< /tab >}} {{< /tabs >}}

You should see log lines showing the request headers and body from the source:

  1. ☁️ cloudevents.Event
  2. Validation: valid
  3. Context Attributes,
  4. specversion: 1.0
  5. type: dev.knative.sources.ping
  6. source: /apis/v1/namespaces/default/pingsources/test-ping-source
  7. id: d8e761eb-30c7-49a3-a421-cd5895239f2d
  8. time: 2019-12-04T14:24:00.000702251Z
  9. datacontenttype: application/json
  10. Data,
  11. {
  12. "message": "Hello world!"
  13. }

Cleanup

You can delete the PingSource instance by entering the following command:

{{< tabs name=”delete-source” default=”By name” >}} {{% tab name=”By name” %}}

  1. kubectl delete pingsources.sources.knative.dev test-ping-source

{{< /tab >}}

{{% tab name=”By filename” %}}

  1. kubectl delete --filename ping-source.yaml

{{< /tab >}} {{< /tabs >}}

Similarly, you can delete the Service instance via:

{{< tabs name=”delete-service” default=”By name” >}} {{% tab name=”By name” %}}

  1. kubectl delete service.serving.knative.dev event-display

{{< /tab >}} {{% tab name=”By filename” %}}

  1. kubectl delete --filename service.yaml

{{< /tab >}}

{{< /tabs >}}