4
from charmhelpers.core import hookenv
5
from charmhelpers.contrib.openstack.context import OSContextGenerator
8
class RelationContext(OSContextGenerator):
10
if not hookenv.relation_ids(self.interface):
14
for rid in hookenv.relation_ids(self.interface):
15
for unit in hookenv.related_units(rid):
16
reldata = hookenv.relation_get(rid=rid, unit=unit)
17
required = set(self.required_keys)
18
if set(reldata.keys()).issuperset(required):
19
ns = ctx.setdefault(self.interface, {})
20
for k, v in reldata.items():
27
class ConfigContext(OSContextGenerator):
29
return hookenv.config()
32
class StorableContext(object):
34
def store_context(self, file_name, config_data):
35
with open(file_name, 'w') as file_stream:
36
yaml.dump(config_data, file_stream)
38
def read_context(self, file_name):
39
with open(file_name, 'r') as file_stream:
40
data = yaml.load(file_stream)
42
raise OSError("%s is empty" % file_name)
46
# Stores `config_data` hash into yaml file with `file_name` as a name
47
# if `file_name` already exists, then it loads data from `file_name`.
48
class StoredContext(OSContextGenerator, StorableContext):
50
def __init__(self, file_name, config_data):
51
self.data = config_data
52
if os.path.exists(file_name):
53
self.data = self.read_context(file_name)
55
self.store_context(file_name, config_data)
56
self.data = config_data
62
class StaticContext(OSContextGenerator):
63
def __init__(self, data):
70
class NatsContext(RelationContext):
72
required_keys = ['nats_port', 'nats_address', 'nats_user', 'nats_password']
75
class RouterContext(RelationContext):
77
required_keys = ['domain']
80
class LoggregatorContext(RelationContext):
81
interface = 'loggregator'
82
required_keys = ['shared_secret', 'loggregator_address']