Charmed-Kubernetes/kubeapi-load-balancer/hooks/relations/public-address/README.md

60 lines
1.7 KiB
Markdown

# 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:
```python
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:
```python
[
{
'public-address': address_of_host,
'port': port_for_host,
},
# ...
]
```
A trivial example of handling this interface would be:
```python
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']))
```