Skip to main content

Kubernetes Service Binding Library for Python Applications

Project description

pyservicebinding

Kubernetes Service Binding Library for Python Applications

PyPI - Downloads Release Supported Python Versions CI

The Service Binding Specification for Kubernetes standardizes exposing backing service secrets to applications. This project provides a Python module to consume the bindings projected into the container. The Application Projection section of the spec describes how the bindings are projected into the application. The primary mechanism of projection is through files mounted at a specific directory. The bindings directory path can be discovered through SERVICE_BINDING_ROOT environment variable. The operator must have injected SERVICE_BINDING_ROOT environment to all the containers where bindings are created.

Within this service binding root directory, there could be multiple bindings projected from different Service Bindings. For example, suppose an application requires to connect to a database and cache server. In that case, one Service Binding can provide the database, and the other Service Binding can offer bindings to the cache server.

Let's take a look at the example given in the spec:

$SERVICE_BINDING_ROOT
├── account-database
│   ├── type
│   ├── provider
│   ├── uri
│   ├── username
│   └── password
└── transaction-event-stream
    ├── type
    ├── connection-count
    ├── uri
    ├── certificates
    └── private-key

In the above example, there are two bindings under the SERVICE_BINDING_ROOT directory. The account-database and transaction-event-system are the names of the bindings. Files within each bindings directory has a special file named type, and you can rely on the value of that file to identify the type of the binding projected into that directory. In certain directories, you can also see another file named provider. The provider is an additional identifier to narrow down the type further. This module use the type field and, optionally, provider field to look up the bindings.

Installation

You can install this package using pip:

pip install pyservicebinding

Usage

The ServiceBinding object can be instantiated like this:

from pyservicebinding import binding
try:
    sb = binding.ServiceBinding()
except binding.ServiceBindingRootMissingError as msg:
    # log the error message and retry/exit
    print("SERVICE_BINDING_ROOT env var not set")

To get bindings for a specific type, say postgresql:

bindings_list = sb.bindings("postgresql")

To get bindings for a specific type, say mysql, and provider, say mariadb:

bindings_list = sb.bindings("mysql", "mariadb")

To get all bindings irrespective of the type and provider:

bindings_list = sb.all_bindings()

This is the complete API of the module:

class ServiceBindingRootMissingError(Exception):
    pass


class ServiceBinding:

    def __init__(self):
        """
        - raise ServiceBindingRootMissingError if SERVICE_BINDING_ROOT env var not set
        """

    def all_bindings(self) -> list[dict[str, str]]:
        """Get all bindings as a list of dictionaries

        - return empty list if no bindings found
        """

    def bindings(self, _type: str, provider: typing.Optional[str] = None) -> list[dict[str, str]]:
        """Get filtered bindings as a list of dictionaries

        - return empty dictionary if no binding found
        - filter the result with the given _type input
        - if provider input is given, filter bindings using the given type and provider
        """

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyservicebinding-0.3.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

pyservicebinding-0.3.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file pyservicebinding-0.3.0.tar.gz.

File metadata

  • Download URL: pyservicebinding-0.3.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.12

File hashes

Hashes for pyservicebinding-0.3.0.tar.gz
Algorithm Hash digest
SHA256 a90da775bb4e54aac82ea06457fbf29c2ad1f4f10b3eb895dfd8fb679ae9f6fe
MD5 f17778a8b07af79e07847e790f41cf56
BLAKE2b-256 4370c0accaab949bc7e0e9e632d4ca432ac172f372a305d82f0802e10a5d8e80

See more details on using hashes here.

File details

Details for the file pyservicebinding-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pyservicebinding-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c6b2a9d29fa3d85a6932e27fd9ef59b6b92148d8f426b8b413434d4aff5e32f
MD5 c2ea13a3cf3c10a2fab4a3fd8ad26fb7
BLAKE2b-256 78a52a891984a8ade71255edc5e2fdcf9ed9d0060bead132aee4acd9be1c9f8e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page