// Module included in the following assemblies: // // * serverless/eventing/event-sources/serverless-apiserversource.adoc // * serverless/reference/kn-eventing-ref.adoc :_mod-docs-content-type: PROCEDURE [id="apiserversource-kn_{context}"] = Creating an API server source by using the Knative CLI You can use the `kn source apiserver create` command to create an API server source by using the `kn` CLI. Using the `kn` CLI to create an API server source provides a more streamlined and intuitive user interface than modifying YAML files directly. .Prerequisites * The {ServerlessOperatorName} and Knative Eventing are installed on the cluster. * You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in {product-title}. * You have installed the OpenShift CLI (`oc`). * You have installed the Knative (`kn`) CLI. .Procedure include::snippets/serverless-service-account-apiserversource.adoc[] . Create an API server source that has an event sink. In the following example, the sink is a broker: + [source,terminal] ---- $ kn source apiserver create --sink broker: --resource "event:v1" --service-account --mode Resource ---- // need to revisit these docs and give better tutorial examples with different sinks; out of scope for the current PR . To check that the API server source is set up correctly, create a Knative service that dumps incoming messages to its log: + [source,terminal] ---- $ kn service create --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest ---- . If you used a broker as an event sink, create a trigger to filter events from the `default` broker to the service: + [source,terminal] ---- $ kn trigger create --sink ksvc: ---- . Create events by launching a pod in the default namespace: + [source,terminal] ---- $ oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest ---- . Check that the controller is mapped correctly by inspecting the output generated by the following command: + [source,terminal] ---- $ kn source apiserver describe ---- + .Example output [source,terminal] ---- Name: mysource Namespace: default Annotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer Age: 3m ServiceAccountName: events-sa Mode: Resource Sink: Name: default Namespace: default Kind: Broker (eventing.knative.dev/v1) Resources: Kind: event (v1) Controller: false Conditions: OK TYPE AGE REASON ++ Ready 3m ++ Deployed 3m ++ SinkProvided 3m ++ SufficientPermissions 3m ++ EventTypesProvided 3m ---- .Verification You can verify that the Kubernetes events were sent to Knative by looking at the message dumper function logs. . Get the pods: + [source,terminal] ---- $ oc get pods ---- . View the message dumper function logs for the pods: + [source,terminal] ---- $ oc logs $(oc get pod -o name | grep event-display) -c user-container ---- + .Example output [source,terminal] ---- ☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... } ---- .Deleting the API server source . Delete the trigger: + [source,terminal] ---- $ kn trigger delete ---- . Delete the event source: + [source,terminal] ---- $ kn source apiserver delete ---- . Delete the service account, cluster role, and cluster binding: + [source,terminal] ---- $ oc delete -f authentication.yaml ----