/interface-public-address

The public address interface is used for loadbalancers who's subordinates need the public address of the balancer.

Primary LanguagePython

Overview

This interface layer implements a public address protocol useful for load balancers and their subordinates. The load balancers (providers) set their own public address and port, which is then available to the subordinates (requirers).

Usage

Provides

By providing the public-address interface, your charm is providing an HTTP server that can load-balance for another HTTP based service.

Your charm need only provide the address and port on which it is serving its content, as soon as the {relation_name}.available state is set:

from charmhelpers.core import hookenv
@when('website.available')
def configure_website(website):
    website.set_address_port(hookenv.unit_get('public-address'), hookenv.config('port'))

Requires

By requiring the public-address interface, your charm is consuming one or more HTTP servers, to load-balance a set of servers, etc.

Your charm should respond to the {relation_name}.available state, which indicates that there is at least one HTTP server connected.

The get_addresses_ports() method returns a list of available addresses and ports.

The return value is a list of dicts of the following form:

[
    {
        'public-address': address_of_host,
        'port': port_for_host,
    },
    # ...
]

A trivial example of handling this interface would be:

from charmhelpers.core import hookenv
@when('loadbalancer.available')
def update_reverse_proxy_config(loadbalancer):
    hosts = loadbalancer.get_addresses_ports()
    for host in hosts:
        hookenv.log('The loadbalancer for this unit is {}:{}'.format(
                host['public-address'],
                host['port']))