From d6263b114f5b03bc009e049cac1faec2f2e58601 Mon Sep 17 00:00:00 2001 From: Will Farrington Date: Fri, 4 Nov 2016 15:21:23 -0400 Subject: [PATCH] Add README --- examples/third-party-resources/README.md | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 examples/third-party-resources/README.md diff --git a/examples/third-party-resources/README.md b/examples/third-party-resources/README.md new file mode 100644 index 00000000..68c25a0c --- /dev/null +++ b/examples/third-party-resources/README.md @@ -0,0 +1,43 @@ +# Third Party Resources Example + +This particular example demonstrates how to perform basic operations such as: + +* How to register a new ThirdPartyResource (custom Resource type) +* How to create/get/list instances of your new Resource type (update/delete/etc work as well but are not demonstrated) + +## Running + +``` +# assumes you have a working kubeconfig, not required if operating in-cluster +go run *.go -kubeconfig=$HOME/.kube/config +``` + +## Use Cases + +ThirdPartyResources can be used to implement custom Resource types for your Kubernetes cluster. +These act like most other Resources in Kubernetes, and may be `kubectl apply`'d, etc. + +Some example use cases: + +* Provisioning/Management of external datastores/databases (eg. CloudSQL/RDS instances) +* Higher level abstractions around Kubernetes primitives (eg. a single Resource to define an etcd cluster, backed by a Service and a ReplicationController) + +## Defining types + +Each instance of your ThirdPartyResource has an attached Spec, which should be defined via a `struct{}` to provide data format validation. +In practice, this Spec is arbitrary key-value data that specifies the configuration/behavior of your Resource. + +For example, if you were implementing a ThirdPartyResource for a Database, you might provide a DatabaseSpec like the following: + +``` go +type DatabaseSpec struct { + Databases []string `json:"databases"` + Users []User `json:"users"` + Version string `json:"version"` +} + +type User struct { + Name string `json:"name"` + Password string `json:"password"` +} +``` \ No newline at end of file