Murano service broker for Cloud Foundry

Service broker overview

Service broker is a new murano component which implements Cloud Foundry Service Broker API.

This lets users build ‘hybrid’ infrastructures that are services like databases, message queues, key/value stores, and so on. This services can be uploaded and deployed with murano and made available to Cloud Foundry apps on demand. The result is lowered cost, shorter timetables, and quicker access to required tools — developers can ‘self serve’ by building any required service, then make it instantly available in Cloud Foundry.

Configure service broker

Manual installation

If you use local murano installation, you can configure and run murano service broker in a few simple steps:

  1. Change into the murano directory:

    cd ~/murano/murano
    
  2. Generate the murano service broker config file. Murano service broker has a common config file for service broker API services. Using tox, generate a sample configuration file:

    tox -e gencfconfig
    
  3. Copy the configuration file for further modifications:

    cd ~/murano/murano/etc/murano
    ln -s murano-cfapi.conf.sample murano-cfapi.conf
    
  4. Edit murano-cfapi.conf. Below is an example of the basic settings you may need to configure.

    Note

    The example below uses the SQLite database. Edit the [database] section to use another database.

    [DEFAULT]
    debug = true
    verbose = true
    
    ...
    
    [database]
    backend = sqlalchemy
    connection = sqlite:///murano_cfapi.sqlite
    
    ...
    
    [keystone_authtoken]
    www_authenticate_uri = 'http://%OPENSTACK_HOST_IP%:5000/v3'
    auth_host = '%OPENSTACK_HOST_IP%'
    auth_port = 5000
    auth_protocol = http
    admin_tenant_name = %OPENSTACK_ADMIN_TENANT%
    admin_user = %OPENSTACK_ADMIN_USER%
    admin_password = %OPENSTACK_ADMIN_PASSWORD%
    
    ...
    
    [cfapi]
    tenant = %TENANT_NAME%
    bind_host = %HOST_IP%
    bind_port = 8083
    auth_url = 'http://%OPENSTACK_HOST_IP%:5000/v3'
    

    Note

    The bind_host IP should be in the same network as the Cloud Foundry instance.

  5. Create database tables for murano service broker:

    cd ~/murano/murano
    tox -e venv -- murano-cfapi-db-manage \
      --config-file ./etc/murano/murano-cfapi.conf upgrade
    
  6. Launch the murano service broker API in a separate terminal:

    cd ~/murano/murano
    tox -e venv -- murano-cfapi --config-file ./etc/murano/murano-cfapi.conf
    

    Note

    Run the command in a new terminal as the process will be running in the terminal until you terminate it, therefore, blocking the current terminal.

Devstack installation

It is really easy to enable service broker in your devstack installation. You need simply update your local.conf with the following:

[[local|localrc]]
enable_plugin murano https://opendev.org/openstack/murano
enable_service murano-cfapi

How to use service broker

After service broker is configured and started you have nothing to do with service broker from murano side - it is an adapter which is used by Cloud Foundry PaaS.

To access and use murano packages through Cloud Foundry, you need to perform following steps:

  1. Log in to Cloud Foundry instance via ssh.

    ssh -i <key_name> <username>@<hostname>
    
  2. Log in to Cloud Foundry itself.

    cf login -a https://api.<smthg>.xip.io -u <user_name> -p <password>
    
  3. Add murano service broker.

    cf create-service-broker <broker_name> <OS_USERNAME> <OS_PASSWORD>  http://<service_broker_ip>:8083
    
  4. Enable access to murano packages.

    cf enable-service-access <service_name>
    

    Warning

    By default, access to all services is prohibited.

    Note

    You can use service-access command to see human-readable list of packages.

  5. Provision murano service through Cloud Foundry.

    cf create-service 'Apache HTTP Server' default MyApacheInstance  -c apache.json
    
    {
        "instance": {
            "flavor": "m1.medium",
            "?": {
                "type": "io.murano.resources.LinuxMuranoInstance"
            },
            "keyname": "nstarodubtsev",
            "assignFloatingIp": "True",
            "name": "<name_pattern>",
            "availabilityZone": "nova",
            "image": "1b9ff37e-dff3-4308-be08-9185705dad91"
        },
        "enablePHP": "True"
    }