~cf-charmers/charms/trusty/etcd/trunk

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/contrib/cloudfoundry/contexts.py

  • Committer: Alexander Prismakov
  • Date: 2014-05-30 12:51:24 UTC
  • Revision ID: prismakov@gmail.com-20140530125124-2l3jn9isfi1d7hjl
new charmchelpers

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
import os
2
 
import yaml
3
 
 
4
 
from charmhelpers.core import hookenv
5
 
from charmhelpers.contrib.openstack.context import OSContextGenerator
6
 
 
7
 
 
8
 
class RelationContext(OSContextGenerator):
9
 
    def __call__(self):
10
 
        if not hookenv.relation_ids(self.interface):
11
 
            return {}
12
 
 
13
 
        ctx = {}
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():
21
 
                        ns[k] = v
22
 
                    return ctx
23
 
 
24
 
        return {}
25
 
 
26
 
 
27
 
class ConfigContext(OSContextGenerator):
28
 
    def __call__(self):
29
 
        return hookenv.config()
30
 
 
31
 
 
32
 
class StorableContext(object):
33
 
    
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)
37
 
 
38
 
    def read_context(self, file_name):
39
 
        with open(file_name, 'r') as file_stream:
40
 
            data = yaml.load(file_stream)
41
 
            if not data:
42
 
                raise OSError("%s is empty" % file_name)
43
 
            return data
44
 
 
45
 
 
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):
49
 
 
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)
54
 
        else:
55
 
            self.store_context(file_name, config_data)
56
 
            self.data = config_data
57
 
 
58
 
    def __call__(self):
59
 
        return self.data
60
 
 
61
 
 
62
 
class StaticContext(OSContextGenerator):
63
 
    def __init__(self, data):
64
 
        self.data = data
65
 
 
66
 
    def __call__(self):
67
 
        return self.data
68
 
 
69
 
 
70
 
class NatsContext(RelationContext):
71
 
    interface = 'nats'
72
 
    required_keys = ['nats_port', 'nats_address', 'nats_user', 'nats_password']
73
 
 
74
 
 
75
 
class RouterContext(RelationContext):
76
 
    interface = 'router'
77
 
    required_keys = ['domain']
78
 
 
79
 
 
80
 
class LoggregatorContext(RelationContext):
81
 
    interface = 'loggregator'
82
 
    required_keys = ['shared_secret', 'loggregator_address']
83