Skip to content
This repository has been archived by the owner on Mar 4, 2024. It is now read-only.

juju-solutions/interface-etcd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

This interface layer handles the communication with Etcd via the etcd interface.

Usage

Requires

This interface layer will set the following states, as appropriate:

  • {relation_name}.connected The relation is established, but Etcd may not yet have provided any connection or service information.

  • {relation_name}.available Etcd has provided its connection string information, and is ready to serve as a KV store. The provided information can be accessed via the following methods:

    • etcd.get_connection_string()
    • etcd.get_version()
  • {relation_name}.tls.available Etcd has provided the connection string information, and the tls client credentials to communicate with it. The client credentials can be accessed via:

    • {relation_name}.get_client_credentials() returning a dictionary of the clinet certificate, key and CA.
    • {relation_name}.save_client_credentials(key, cert, ca) is a convenience method to save the client certificate, key and CA to files of your choosing.

For example, a common application for this is configuring an applications backend key/value storage, like Docker.

@when('etcd.available', 'docker.available')
def swarm_etcd_cluster_setup(etcd):
    con_string = etcd.connection_string().replace('http', 'etcd')
    opts = {}
    opts['connection_string'] = con_string
    render('docker-compose.yml', 'files/swarm/docker-compose.yml', opts)

Provides

A charm providing this interface is providing the Etcd rest api service.

This interface layer will set the following states, as appropriate:

  • {relation_name}.connected One or more clients of any type have been related. The charm should call the following methods to provide the appropriate information to the clients:

    • {relation_name}.set_connection_string(string, version)
    • {relation_name}.set_client_credentials(key, cert, ca)

Example:

@when('db.connected')
def send_connection_details(db):
    cert = leader_get('client_certificate')
    key = leader_get('client_key')
    ca = leader_get('certificate_authority')
    # Set the key, cert, and ca on the db relation
    db.set_client_credentials(key, cert, ca)

    port = hookenv.config().get('port')
    # Get all the peers participating in the cluster relation.
    addresses = cluster.get_peer_addresses()
    connections = []
    for address in addresses:
        connections.append('http://{0}:{1}'.format(address, port))
    # Set the connection string on the db relation.
    db.set_connection_string(','.join(conections))

Contact Information

Maintainer

Etcd

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages