##// END OF EJS Templates
env-config: use proper ALL keys reconfiguration based on env vars
super-admin -
r4825:a78e628e default
parent child Browse files
Show More
@@ -34,6 +34,8 b' def _sanitize_settings_and_apply_default'
34 default_store = os.path.join(os.path.dirname(settings['__file__']), 'upload_store')
34 default_store = os.path.join(os.path.dirname(settings['__file__']), 'upload_store')
35 settings_maker.make_setting(config_keys.store_path, default_store)
35 settings_maker.make_setting(config_keys.store_path, default_store)
36
36
37 settings_maker.env_expand()
38
37
39
38 def includeme(config):
40 def includeme(config):
39 from rhodecode.apps.file_store.views import FileStoreView
41 from rhodecode.apps.file_store.views import FileStoreView
@@ -48,6 +48,8 b' def _sanitize_settings_and_apply_default'
48 settings_maker.make_setting(config_keys.ssh_git_bin, '~/.rccontrol/vcsserver-1/profile/bin/git')
48 settings_maker.make_setting(config_keys.ssh_git_bin, '~/.rccontrol/vcsserver-1/profile/bin/git')
49 settings_maker.make_setting(config_keys.ssh_svn_bin, '~/.rccontrol/vcsserver-1/profile/bin/svnserve')
49 settings_maker.make_setting(config_keys.ssh_svn_bin, '~/.rccontrol/vcsserver-1/profile/bin/svnserve')
50
50
51 settings_maker.env_expand()
52
51
53
52 def includeme(config):
54 def includeme(config):
53 settings = config.registry.settings
55 settings = config.registry.settings
@@ -48,6 +48,8 b' def _sanitize_settings_and_apply_default'
48 settings_maker.make_setting(config_keys.reload_command, '')
48 settings_maker.make_setting(config_keys.reload_command, '')
49 settings_maker.make_setting(config_keys.template, '')
49 settings_maker.make_setting(config_keys.template, '')
50
50
51 settings_maker.env_expand()
52
51 # Convert negative timeout values to zero.
53 # Convert negative timeout values to zero.
52 if settings[config_keys.reload_timeout] < 0:
54 if settings[config_keys.reload_timeout] < 0:
53 settings[config_keys.reload_timeout] = 0
55 settings[config_keys.reload_timeout] = 0
@@ -525,6 +525,13 b' def sanitize_settings_and_apply_defaults'
525 settings_maker.make_setting('is_test', False, parser='bool')
525 settings_maker.make_setting('is_test', False, parser='bool')
526 settings_maker.make_setting('gzip_responses', False, parser='bool')
526 settings_maker.make_setting('gzip_responses', False, parser='bool')
527
527
528 # statsd
529 settings_maker.make_setting('statsd.enabled', False, parser='bool')
530 settings_maker.make_setting('statsd.statsd_host', '0.0.0.0')
531 settings_maker.make_setting('statsd.statsd_port', 8125, parser='int')
532 settings_maker.make_setting('statsd.statsd_prefix', '')
533 settings_maker.make_setting('statsd.statsd_ipv6', False, parser='bool')
534
528 settings_maker.make_setting('vcs.svn.compatible_version', '')
535 settings_maker.make_setting('vcs.svn.compatible_version', '')
529 settings_maker.make_setting('vcs.hooks.protocol', 'http')
536 settings_maker.make_setting('vcs.hooks.protocol', 'http')
530 settings_maker.make_setting('vcs.hooks.host', '127.0.0.1')
537 settings_maker.make_setting('vcs.hooks.host', '127.0.0.1')
@@ -549,17 +556,6 b' def sanitize_settings_and_apply_defaults'
549
556
550 settings_maker.make_setting('appenlight', False, parser='bool')
557 settings_maker.make_setting('appenlight', False, parser='bool')
551
558
552 _sanitize_cache_settings(settings)
553
554 # configure instance id
555 config_utils.set_instance_id(settings)
556
557 return settings
558
559
560 def _sanitize_cache_settings(settings):
561 settings_maker = SettingsMaker(settings)
562
563 temp_store = tempfile.gettempdir()
559 temp_store = tempfile.gettempdir()
564 default_cache_dir = os.path.join(temp_store, 'rc_cache')
560 default_cache_dir = os.path.join(temp_store, 'rc_cache')
565
561
@@ -609,3 +605,10 b' def _sanitize_cache_settings(settings):'
609 settings_maker.make_setting('rc_cache.sql_cache_short.backend', 'dogpile.cache.rc.memory_lru')
605 settings_maker.make_setting('rc_cache.sql_cache_short.backend', 'dogpile.cache.rc.memory_lru')
610 settings_maker.make_setting('rc_cache.sql_cache_short.expiration_time', 30, parser='int')
606 settings_maker.make_setting('rc_cache.sql_cache_short.expiration_time', 30, parser='int')
611 settings_maker.make_setting('rc_cache.sql_cache_short.max_size', 10000, parser='int')
607 settings_maker.make_setting('rc_cache.sql_cache_short.max_size', 10000, parser='int')
608
609 settings_maker.env_expand()
610
611 # configure instance id
612 config_utils.set_instance_id(settings)
613
614 return settings
@@ -27,6 +27,8 b' import tempfile'
27 import logging.config
27 import logging.config
28 log = logging.getLogger(__name__)
28 log = logging.getLogger(__name__)
29
29
30 set_keys = {}
31
30
32
31 def str2bool(_str):
33 def str2bool(_str):
32 """
34 """
@@ -119,6 +121,27 b' class SettingsMaker(object):'
119 def _key_transformator(cls, key):
121 def _key_transformator(cls, key):
120 return "{}_{}".format('RC'.upper(), key.upper().replace('.', '_').replace('-', '_'))
122 return "{}_{}".format('RC'.upper(), key.upper().replace('.', '_').replace('-', '_'))
121
123
124 def maybe_env_key(self, key):
125 # now maybe we have this KEY in env, search and use the value with higher priority.
126 transformed_key = self._key_transformator(key)
127 envvar_value = os.environ.get(transformed_key)
128 if envvar_value:
129 log.debug('using `%s` key instead of `%s` key for config', transformed_key, key)
130
131 return envvar_value
132
133 def env_expand(self):
134 replaced = {}
135 for k, v in self.settings.items():
136 if k not in set_keys:
137 envvar_value = self.maybe_env_key(k)
138 if envvar_value:
139 replaced[k] = envvar_value
140 set_keys[k] = envvar_value
141
142 # replace ALL keys updated
143 self.settings.update(replaced)
144
122 def enable_logging(self, logging_conf=None, level='INFO', formatter='generic'):
145 def enable_logging(self, logging_conf=None, level='INFO', formatter='generic'):
123 """
146 """
124 Helper to enable debug on running instance
147 Helper to enable debug on running instance
@@ -133,7 +156,8 b' class SettingsMaker(object):'
133 logging_conf = self.settings.get('logging.logging_conf_file') or ''
156 logging_conf = self.settings.get('logging.logging_conf_file') or ''
134
157
135 if not os.path.isfile(logging_conf):
158 if not os.path.isfile(logging_conf):
136 log.error('Unable to setup logging based on %s, file does not exist...', logging_conf)
159 log.error('Unable to setup logging based on %s, '
160 'file does not exist.... specify path using logging.logging_conf_file= config setting. ', logging_conf)
137 return
161 return
138
162
139 with open(logging_conf, 'rb') as f:
163 with open(logging_conf, 'rb') as f:
@@ -151,7 +175,6 b' class SettingsMaker(object):'
151 os.remove(f.name)
175 os.remove(f.name)
152
176
153 def make_setting(self, key, default, lower=False, default_when_empty=False, parser=None):
177 def make_setting(self, key, default, lower=False, default_when_empty=False, parser=None):
154
155 input_val = self.settings.get(key, default)
178 input_val = self.settings.get(key, default)
156
179
157 if default_when_empty and not input_val:
180 if default_when_empty and not input_val:
@@ -172,11 +195,10 b' class SettingsMaker(object):'
172 None: lambda i: i
195 None: lambda i: i
173 }[parser]
196 }[parser]
174
197
175 # now maybe we have this KEY in env, search and use the value with higher priority.
198 envvar_value = self.maybe_env_key(key)
176 transformed_key = self._key_transformator(key)
177 envvar_value = os.environ.get(transformed_key)
178 if envvar_value:
199 if envvar_value:
179 log.debug('using `%s` key instead of `%s` key for config', transformed_key, key)
180 input_val = envvar_value
200 input_val = envvar_value
201 set_keys[key] = input_val
202
181 self.settings[key] = parser_func(input_val)
203 self.settings[key] = parser_func(input_val)
182 return self.settings[key]
204 return self.settings[key]
General Comments 0
You need to be logged in to leave comments. Login now