A Python package for building Service Brokers supporting API version 2.13+.
Following Open Service Broker API Spec and Open Service Broker API
Check out the documentation.
To find out more about Platform Compatibility for OSBAPI versions, check out Platform Compatibility for OSBAPI
Not all features are supported with this library due to conflicting features.
This package is available for Python 3.5+.
pip3 install openbrokerapi
Or install the development version from github:
pip3 install git+https://github.com/eruvanos/openbrokerapi.git
You can start with a skeleton project or just from scratch.
from flask import Flask
from openbrokerapi import api
from openbrokerapi.catalog import (
ServicePlan,
)
from openbrokerapi.log_util import basic_config
from openbrokerapi.service_broker import (
ServiceBroker,
Service,
ProvisionedServiceSpec,
UpdateServiceSpec,
Binding,
DeprovisionServiceSpec,
LastOperation,
UnbindDetails,
ProvisionDetails,
UpdateDetails,
BindDetails,
DeprovisionDetails
)
class ExampleServiceBroker(ServiceBroker):
def catalog(self):
return Service(
id='00000000-0000-0000-0000-000000000000',
name='example-service',
description='Example Service does nothing',
bindable=True,
plans=[
ServicePlan(
id='00000000-0000-0000-0000-000000000000',
name='small',
description='example service plan',
),
],
tags=['example', 'service'],
plan_updateable=True,
)
def provision(self, instance_id: str, service_details: ProvisionDetails,
async_allowed: bool) -> ProvisionedServiceSpec:
pass
def bind(self, instance_id: str, binding_id: str, details: BindDetails) -> Binding:
pass
def update(self, instance_id: str, details: UpdateDetails, async_allowed: bool) -> UpdateServiceSpec:
pass
def unbind(self, instance_id: str, binding_id: str, details: UnbindDetails):
pass
def deprovision(self, instance_id: str, details: DeprovisionDetails, async_allowed: bool) -> DeprovisionServiceSpec:
pass
def last_operation(self, instance_id: str, operation_data: str) -> LastOperation:
pass
# Simply start the server
api.serve(ExampleServiceBroker(), api.BrokerCredentials("", ""))
# or start the server without authentication
api.serve(ExampleServiceBroker(), None)
# or start the server with multiple authentication
api.serve(ExampleServiceBroker(), [api.BrokerCredentials("", ""), api.BrokerCredentials("", "")])
# or with multiple service brokers and multiple credentials
api.serve([ExampleServiceBroker(), ExampleServiceBroker()], [api.BrokerCredentials("", ""), api.BrokerCredentials("", "")])
# or register blueprint to your own FlaskApp instance
app = Flask(__name__)
logger = basic_config() # Use root logger with a basic configuration provided by openbrokerapi.log_utils
openbroker_bp = api.get_blueprint(ExampleServiceBroker(), api.BrokerCredentials("", ""), logger)
app.register_blueprint(openbroker_bp)
app.run("0.0.0.0")
The included api.serve
function provides a server setup for local usage only.
For productive deployments use the blueprint from api.get_blueprint
to
setup a production ready server like Waitress
or other mentioned in Flask Deployment Docs
Openbrokerapi defines a handful of error types in errors.py for some common error cases that your service broker may encounter. Raise these from your ServiceBroker methods where appropriate, and openbrokerapi will do the "right thing" (™), and give Cloud Foundry an appropriate status code, as per the Service Broker API specification.
- Context object from update 2.12 and 2.13 is made available, but partially checked (only organization_guid and space_guid). This can change, when an update removes the redundant fields.
Please report bugs, issues or feature requests to Github Issues
You want to contribute, I really appreciate!
So let us check how you can contribute:
- Create an issue in the Github Issues. Please provide all information that you think are usefull to solve it.
- Use the Github Issues to create a feature request, so we can discuss and find a good interface for that feature.
- Create a Pull Request. There are some things that will make it easier to review your Pull Request:
- Use a new branch for every Pull Request
- Include just related commits in this branch
- Less commits are better, one would be the best (You can squash them.)
- Always add tests for your feature, if you are not familiar with writing tests, ask for help.
- Hint: To update your fork with the newest changes, follow these instructions.