// Module is included in the following assemblies:
//
// serverless/knative_cli/knative-cli.adoc

[id="basic-workflow_{context}"]
= Basic workflow using `kn`

Use this basic workflow to create, read, update, delete (CRUD) operations on a service. The following example deploys a link:https://github.com/knative/docs/tree/master/docs/serving/samples/hello-world/helloworld-go[simple Hello World service] that reads the environment variable `TARGET` and prints its output.

.Procedure

. Create a service in the `default` namespace from an image.
+
----
$ kn service create hello --image gcr.io/knative-samples/helloworld-go --env TARGET=Knative
Creating service 'hello' in namespace 'default':

  0.085s The Route is still working to reflect the latest desired specification.
  0.101s Configuration "hello" is waiting for a Revision to become ready.
 11.590s ...
 11.650s Ingress has not yet been reconciled.
 11.726s Ready to serve.

Service 'hello' created with latest revision 'hello-gsdks-1' and URL:
http://hello.default.apps-crc.testing
----

. List the service.
+
----
$ kn service list
NAME    URL                                     LATEST          AGE     CONDITIONS   READY   REASON
hello   http://hello.default.apps-crc.testing   hello-gsdks-1   8m35s   3 OK / 3     True
----

. Check if the service is working by using the `curl` service endpoint command:
+
----
$ curl http://hello.default.apps-crc.testing

Hello Knative!
----

. Update the service.
+
----
$ kn service update hello --env TARGET=Kn
Updating Service 'hello' in namespace 'default':

 10.136s Traffic is not yet migrated to the latest revision.
 10.175s Ingress has not yet been reconciled.
 10.348s Ready to serve.

Service 'hello' updated with latest revision 'hello-dghll-2' and URL:
http://hello.default.apps-crc.testing
----
+
The service's environment variable `TARGET` is now set to `Kn`.


. Describe the service.
+
----
$ kn service describe hello
Name:       hello
Namespace:  default
Age:        13m
URL:        http://hello.default.apps-crc.testing
Address:    http://hello.default.svc.cluster.local

Revisions:
  100%  @latest (hello-dghll-2) [2] (1m)
        Image:  gcr.io/knative-samples/helloworld-go (pinned to 5ea96b)

Conditions:
  OK TYPE                   AGE REASON
  ++ Ready                   1m
  ++ ConfigurationsReady     1m
  ++ RoutesReady             1m
----

. Delete the service.
+
----
$ kn service delete hello
Service 'hello' successfully deleted in namespace 'default'.
----
+
You can then verify that the `hello` service is deleted by attempting to `list` it.
+
----
$ kn service list hello
No services found.
----
