An open API service indexing awesome lists of open source software.

https://github.com/monasca/tiny-kubernetes

A minimal Kubernetes client for Python
https://github.com/monasca/tiny-kubernetes

Last synced: 3 months ago
JSON representation

A minimal Kubernetes client for Python

Awesome Lists containing this project

README

          

tiny-kubernetes
===============

`tiny-kubernetes` provides a thin wrapper on top of [requests][0] to make it
easier to work with Kubernetes APIs.

Features
--------

* Automatic authentication (`$KUBECONFIG`)
* Simplified response traversal (`never['do']['this']['again']`) thanks to
[DotMap][2]
* Sane exceptions
* No crazy complex client-side APIs to deal with

Why?
----

The official [kubernetes][1] package is, uh, complex. While it does support all
the advanced features the Kubernetes API offers (like WebSocket streaming) it is
often non-trivial to work with. tiny-kubernetes aims to provide most of the same
functionality with minimal overhead.

Installation
------------

```
pip install tiny-kubernetes
```

Usage
-----

```python
from tiny_kubernetes import KubernetesAPIClient

client = KubernetesAPIClient()
client.load_auto_config()

pods = client.get('/api/v1/namespaces/{}/pods', 'default')
for pod in pods['items']:
print pod.metadata.name
```

Notice that you can access (almost) all parts of the Kubernetes API response
using dot accessors (courtesy of [DotMap][2]). As `.items()` is a reserved name
in dictionaries, it needs to be accessed more traditionally, but most other
member names can use the shortened syntax.

The endpoint is formatted using [`str.format`][3] with the remaining positional
arguments. All keyword arguments are passed through to requests's
[`Session.request`][4], so you can include a body with `json={...}` or URL
parameters with `params={...}`.

A special `json_patch` method exists to help perform patches. It works around
a few potential requests bugs automatically. For example, it can be used to
append labels to a resource:

```python
client.json_patch([{
'op': 'add',
'path': '/metadata/labels/foo',
'value': 'bar'
}], '/api/v1/namespaces/{}/pods/{}', 'default', 'some-pod')
```

Notes
-----

* Temporary files may be created if using a local `$KUBECONFIG` with
base64-encoded certificates. Due to limitations in python's SSL library these
must be decoded and written to the filesystem to be used. They should be
cleaned up when the interpreter exits.

[0]: http://docs.python-requests.org/en/master/
[1]: https://github.com/kubernetes-incubator/client-python
[2]: https://github.com/drgrib/dotmap
[3]: https://docs.python.org/2/library/stdtypes.html#str.format
[4]: http://docs.python-requests.org/en/master/api/#requests.Session.request