Merge "[DOC] Correct requirements for doc chain building"
[optf/osdf.git] / osdf / config / consulconfig.py
1 from consul.base import Timeout
2 from consul.tornado import Consul
3 import json
4 from osdf.logging.osdf_logging import debug_log
5 from tornado.gen import coroutine
6 from tornado.ioloop import IOLoop
7
8
9 class Config(object):
10     def __init__(self, loop, osdf_final_config):
11         self.config = osdf_final_config
12         osdf_config = self.config['osdf_config']
13         self.consul = Consul(host=osdf_config['consulHost'], port=osdf_config['consulPort'],
14                              scheme=osdf_config['consulScheme'], verify=osdf_config['consulVerify'],
15                              cert=osdf_config['consulCert'])
16         result = json.dumps(self.config)
17         self.consul.kv.put("osdfconfiguration", result)
18         loop.add_callback(self.watch)
19
20     @coroutine
21     def watch(self):
22         index = None
23         while True:
24             try:
25                 index, data = yield self.consul.kv.get('osdfconfiguration', index=index)
26                 if data is not None:
27                     self.update_config(data)
28             except Timeout:
29                 pass
30             except Exception as e:
31                 debug_log.debug('Exception Encountered {}'.format(e))
32
33     def update_config(self, data):
34         new_config = json.loads(data['Value'].decode('utf-8'))
35         osdf_deployment = new_config['osdf_config']
36         osdf_core = new_config['common_config']
37         self.config['osdf_config'].update(osdf_deployment)
38         self.config['common_config'].update(osdf_core)
39         debug_log.debug("updated config {}".format(new_config))
40         debug_log.debug("value changed")
41
42
43 def call_consul_kv(osdf_config):
44     osdf_final_config = {
45         'osdf_config': osdf_config.deployment,
46         'common_config': osdf_config.core
47     }
48     io_loop = IOLoop()
49     io_loop.make_current()
50     IOLoop.current(instance=False)
51     _ = Config(io_loop, osdf_final_config)
52     io_loop.start()