Overview

Service: Open Servicebroker API Object, representing a service ServiceBroker: Provide functionality to interact with one or multiple Services Router: Provides an additional layer of indirection, to manage services from different broker implementations

Scenarios

Provide one or more services with one broker

Most basic setup, but supports the full set of features of OpenServiceBroker API.

from typing import Union, List

import openbrokerapi
from openbrokerapi.api import ServiceBroker
from openbrokerapi.catalog import ServicePlan
from openbrokerapi.service_broker import (
    Service,
    ProvisionDetails,
    ProvisionedServiceSpec,
    DeprovisionDetails,
    DeprovisionServiceSpec,
)


class MyServiceBroker(ServiceBroker):
    def catalog(self) -> Union[Service, List[Service]]:
        return Service(
            id="service id",
            name="service name",
            description="service description",
            bindable=False,
            plans=[
                ServicePlan(
                    id="plan id",
                    name="plan name",
                    description="plan description",
                )
            ],
        )

    def provision(
        self, instance_id: str, details: ProvisionDetails, async_allowed: bool, **kwargs
    ) -> ProvisionedServiceSpec:
        # Create service instance
        # ...

        return ProvisionedServiceSpec()

    def deprovision(
        self, instance_id: str, details: DeprovisionDetails, async_allowed: bool, **kwargs
    ) -> DeprovisionServiceSpec:
        # Delete service instance
        # ...

        return DeprovisionServiceSpec(is_async=False)


print("Start server on 127.0.0.1:5000")
print("Check the catalog at:")
print('> curl 127.0.0.1:5000/v2/catalog -H "X-Broker-API-Version: 2.14"')
openbrokerapi.api.serve(MyServiceBroker(), None)

Separate implementations as independent brokers

Most dynamic setup, a Router object forwards requests to seperate broker implementations.

from typing import Union, List

import openbrokerapi
from openbrokerapi.api import ServiceBroker
from openbrokerapi.catalog import ServicePlan
from openbrokerapi.service_broker import (
    Service,
    ProvisionDetails,
    ProvisionedServiceSpec,
    DeprovisionDetails,
    DeprovisionServiceSpec,
)


class MyServiceBroker1(ServiceBroker):
    def catalog(self) -> Union[Service, List[Service]]:
        return Service(
            id="service id 1",
            name="service name 1",
            description="service description 1",
            bindable=False,
            plans=[
                ServicePlan(
                    id="plan id",
                    name="plan name",
                    description="plan description",
                )
            ],
        )

    def provision(self, instance_id: str, details: ProvisionDetails, async_allowed: bool) -> ProvisionedServiceSpec:
        # Create service instance
        # ...

        return ProvisionedServiceSpec()

    def deprovision(self, instance_id: str, details: DeprovisionDetails, async_allowed: bool) -> DeprovisionServiceSpec:
        # Delete service instance
        # ...

        return DeprovisionServiceSpec(is_async=False)


class MyServiceBroker2(ServiceBroker):
    def catalog(self) -> Union[Service, List[Service]]:
        return Service(
            id="service id 2",
            name="service name 2",
            description="service description 2",
            bindable=False,
            plans=[
                ServicePlan(
                    id="plan id",
                    name="plan name",
                    description="plan description",
                )
            ],
        )

    def provision(
        self, instance_id: str, details: ProvisionDetails, async_allowed: bool, **kwargs
    ) -> ProvisionedServiceSpec:
        # Create service instance
        # ...

        return ProvisionedServiceSpec()

    def deprovision(
        self, instance_id: str, details: DeprovisionDetails, async_allowed: bool, **kwargs
    ) -> DeprovisionServiceSpec:
        # Delete service instance
        # ...

        return DeprovisionServiceSpec(is_async=False)


openbrokerapi.api.serve_multiple([MyServiceBroker1(), MyServiceBroker2()], None)

# Behind the scenes
# router = Router(MyServiceBroker1(), MyServiceBroker2())
# openbrokerapi.api.serve(router, None)