A backend to REST Layer that stores configuration in a Kubernetes ConfigMap.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples
README.md
client.go
configmap.go
utils.go

README.md

REST Layer Kubernetes ConfigMap Backend

A backend to REST Layer that stores configuration in a Kubernetes ConfigMap.

Further reading about ConfigMaps:

See examples/main.go for usage example.

Feature overview

  • Offers CRUD-style REST API functionality
  • Can manage ConfigMaps in the namespace it is installed to or in any other namespace (given sufficient access privileges)
  • Maintains original ConfigMap labels on Update

Building

If you're using the GB build tool, you can fetch all dependencies using the following commands:

gb vendor fetch github.com/justinas/alice
gb vendor fetch github.com/rs/cors
gb vendor fetch github.com/rs/rest-layer/resource
gb vendor fetch github.com/rs/rest-layer/rest
gb vendor fetch github.com/rs/zerolog
gb vendor fetch github.com/rs/zerolog/hlog
gb vendor fetch github.com/rs/zerolog/log
gb vendor fetch github.com/segence/rest-layer-kubernetes-configmap

Kubernetes namespaces

The library can access any Kubernetes namespace as long as it has permissions (which can be controlled through RBAC, for example).

The client has to be configred with a default Kubernetes namespace, like in the following code example:

kHandler := configmap.NewHandler(*kubernetesClient, "some-default-namespace-name")

However, the library can access ConfigMaps in other namespaces.

Creating or updating a ConfigMap in another namespace

Add the namespace field into the payload, e.g.:

{
	"id": "test-config-map",
	"namespace": "my-namespace",
	"data": {
		...
	}
}

Querying or deleting a ConfigMap in another namespace

Add the ?filter= query parameter to the end of the URL.

E.g.: /api/config-map/test-config-map?filter={namespace:"my-namespace"}

REST end-points:

Operation HTTP method URL Example payload
Create new ConfigMap POST /api/config-map {{"id": "test-config-map", "data": {"config_value": "Hello"}}}
Update existing ConfigMap PUT /api/config-map/test-config-map {{"id": "test-config-map", "data": {"config_value": "Hello2"}}}
Delete existing ConfigMap DELETE /api/config-map/test-config-map None
Find existing ConfigMap GET /api/config-map/test-config-map None

REST call examples are also available in Postman format here. Make sure to override the {{configmap-handler}} variable to the actual host where the application is running, e.g. http://localhost:8080.

Testing

The functionality can be easily tested by running Minikube locally and using the out of cluster Kubernetes client configuration.