##// END OF EJS Templates
feat(config-maker): ensure dirs for LFS objects are set and existing
super-admin -
r5604:43293df5 default
parent child Browse files
Show More
@@ -1,237 +1,240 b''
1 1 # Copyright (C) 2010-2023 RhodeCode GmbH
2 2 #
3 3 # This program is free software: you can redistribute it and/or modify
4 4 # it under the terms of the GNU Affero General Public License, version 3
5 5 # (only), as published by the Free Software Foundation.
6 6 #
7 7 # This program is distributed in the hope that it will be useful,
8 8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 10 # GNU General Public License for more details.
11 11 #
12 12 # You should have received a copy of the GNU Affero General Public License
13 13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14 #
15 15 # This program is dual-licensed. If you wish to learn more about the
16 16 # RhodeCode Enterprise Edition, including its added features, Support services,
17 17 # and proprietary license terms, please see https://rhodecode.com/licenses/
18 18
19 19 import os
20 20 import tempfile
21 21 import logging
22 22
23 23 from pyramid.settings import asbool
24 24
25 25 from rhodecode.config.settings_maker import SettingsMaker
26 26 from rhodecode.config import utils as config_utils
27 27
28 28 log = logging.getLogger(__name__)
29 29
30 30
31 31 def sanitize_settings_and_apply_defaults(global_config, settings):
32 32 """
33 33 Applies settings defaults and does all type conversion.
34 34
35 35 We would move all settings parsing and preparation into this place, so that
36 36 we have only one place left which deals with this part. The remaining parts
37 37 of the application would start to rely fully on well-prepared settings.
38 38
39 39 This piece would later be split up per topic to avoid a big fat monster
40 40 function.
41 41 """
42 42 jn = os.path.join
43 43
44 44 global_settings_maker = SettingsMaker(global_config)
45 45 global_settings_maker.make_setting('debug', default=False, parser='bool')
46 46 debug_enabled = asbool(global_config.get('debug'))
47 47
48 48 settings_maker = SettingsMaker(settings)
49 49
50 50 settings_maker.make_setting(
51 51 'logging.autoconfigure',
52 52 default=False,
53 53 parser='bool')
54 54
55 55 ini_loc = os.path.dirname(global_config.get('__file__'))
56 56 logging_conf = jn(ini_loc, 'logging.ini')
57 57 settings_maker.enable_logging(logging_conf, level='INFO' if debug_enabled else 'DEBUG')
58 58
59 59 # Default includes, possible to change as a user
60 60 pyramid_includes = settings_maker.make_setting('pyramid.includes', [], parser='list:newline')
61 61 log.debug(
62 62 "Using the following pyramid.includes: %s",
63 63 pyramid_includes)
64 64
65 65 settings_maker.make_setting('rhodecode.edition', 'Community Edition')
66 66 settings_maker.make_setting('rhodecode.edition_id', 'CE')
67 67
68 68 if 'mako.default_filters' not in settings:
69 69 # set custom default filters if we don't have it defined
70 70 settings['mako.imports'] = 'from rhodecode.lib.base import h_filter'
71 71 settings['mako.default_filters'] = 'h_filter'
72 72
73 73 if 'mako.directories' not in settings:
74 74 mako_directories = settings.setdefault('mako.directories', [
75 75 # Base templates of the original application
76 76 'rhodecode:templates',
77 77 ])
78 78 log.debug(
79 79 "Using the following Mako template directories: %s",
80 80 mako_directories)
81 81
82 82 # NOTE(marcink): fix redis requirement for schema of connection since 3.X
83 83 if 'beaker.session.type' in settings and settings['beaker.session.type'] == 'ext:redis':
84 84 raw_url = settings['beaker.session.url']
85 85 if not raw_url.startswith(('redis://', 'rediss://', 'unix://')):
86 86 settings['beaker.session.url'] = 'redis://' + raw_url
87 87
88 88 settings_maker.make_setting('__file__', global_config.get('__file__'))
89 89
90 90 # TODO: johbo: Re-think this, usually the call to config.include
91 91 # should allow to pass in a prefix.
92 92 settings_maker.make_setting('rhodecode.api.url', '/_admin/api')
93 93
94 94 # Sanitize generic settings.
95 95 settings_maker.make_setting('default_encoding', 'UTF-8', parser='list')
96 96 settings_maker.make_setting('gzip_responses', False, parser='bool')
97 97 settings_maker.make_setting('startup.import_repos', 'false', parser='bool')
98 98
99 99 # License settings.
100 100 settings_maker.make_setting('license.hide_license_info', False, parser='bool')
101 101 settings_maker.make_setting('license.import_path', '')
102 102 settings_maker.make_setting('license.import_path_mode', 'if-missing')
103 103
104 104 # statsd
105 105 settings_maker.make_setting('statsd.enabled', False, parser='bool')
106 106 settings_maker.make_setting('statsd.statsd_host', 'statsd-exporter', parser='string')
107 107 settings_maker.make_setting('statsd.statsd_port', 9125, parser='int')
108 108 settings_maker.make_setting('statsd.statsd_prefix', '')
109 109 settings_maker.make_setting('statsd.statsd_ipv6', False, parser='bool')
110 110
111 111 settings_maker.make_setting('vcs.svn.compatible_version', '')
112 112 settings_maker.make_setting('vcs.svn.redis_conn', 'redis://redis:6379/0')
113 113 settings_maker.make_setting('vcs.svn.proxy.enabled', True, parser='bool')
114 114 settings_maker.make_setting('vcs.svn.proxy.host', 'http://svn:8090', parser='string')
115 115 settings_maker.make_setting('vcs.hooks.protocol.v2', 'celery')
116 116 settings_maker.make_setting('vcs.hooks.host', '*')
117 117 settings_maker.make_setting('vcs.scm_app_implementation', 'http')
118 118 settings_maker.make_setting('vcs.server', '')
119 119 settings_maker.make_setting('vcs.server.protocol', 'http')
120 120 settings_maker.make_setting('vcs.server.enable', 'true', parser='bool')
121 121 settings_maker.make_setting('vcs.hooks.direct_calls', 'false', parser='bool')
122 122 settings_maker.make_setting('vcs.start_server', 'false', parser='bool')
123 123 settings_maker.make_setting('vcs.backends', 'hg, git, svn', parser='list')
124 124 settings_maker.make_setting('vcs.connection_timeout', 3600, parser='int')
125 settings_maker.make_setting('vcs.git.lfs.storage_location', '/var/opt/rhodecode_repo_store/.cache/git_lfs_store')
125 settings_maker.make_setting('vcs.git.lfs.storage_location',
126 '/var/opt/rhodecode_repo_store/.cache/git_lfs_store',
127 parser='dir:ensured', default_when_empty=True)
126 128 settings_maker.make_setting('vcs.hg.largefiles.storage_location',
127 '/var/opt/rhodecode_repo_store/.cache/hg_largefiles_store')
129 '/var/opt/rhodecode_repo_store/.cache/hg_largefiles_store',
130 parser='dir:ensured', default_when_empty=True)
128 131
129 132 settings_maker.make_setting('vcs.methods.cache', True, parser='bool')
130 133
131 134 # repo_store path
132 135 settings_maker.make_setting('repo_store.path', '/var/opt/rhodecode_repo_store')
133 136 # Support legacy values of vcs.scm_app_implementation. Legacy
134 137 # configurations may use 'rhodecode.lib.middleware.utils.scm_app_http', or
135 138 # disabled since 4.13 'vcsserver.scm_app' which is now mapped to 'http'.
136 139 scm_app_impl = settings['vcs.scm_app_implementation']
137 140 if scm_app_impl in ['rhodecode.lib.middleware.utils.scm_app_http', 'vcsserver.scm_app']:
138 141 settings['vcs.scm_app_implementation'] = 'http'
139 142
140 143 settings_maker.make_setting('appenlight', False, parser='bool')
141 144
142 145 temp_store = tempfile.gettempdir()
143 146 tmp_cache_dir = jn(temp_store, 'rc_cache')
144 147
145 148 # save default, cache dir, and use it for all backends later.
146 149 default_cache_dir = settings_maker.make_setting(
147 150 'cache_dir',
148 151 default=tmp_cache_dir, default_when_empty=True,
149 152 parser='dir:ensured')
150 153
151 154 # exception store cache
152 155 settings_maker.make_setting(
153 156 'exception_tracker.store_path',
154 157 default=jn(default_cache_dir, 'exc_store'), default_when_empty=True,
155 158 parser='dir:ensured'
156 159 )
157 160
158 161 settings_maker.make_setting(
159 162 'celerybeat-schedule.path',
160 163 default=jn(default_cache_dir, 'celerybeat_schedule', 'celerybeat-schedule.db'), default_when_empty=True,
161 164 parser='file:ensured'
162 165 )
163 166
164 167 # celery
165 168 broker_url = settings_maker.make_setting('celery.broker_url', 'redis://redis:6379/8')
166 169 settings_maker.make_setting('celery.result_backend', broker_url)
167 170
168 171 settings_maker.make_setting('exception_tracker.send_email', False, parser='bool')
169 172 settings_maker.make_setting('exception_tracker.email_prefix', '[RHODECODE ERROR]', default_when_empty=True)
170 173
171 174 # sessions, ensure file since no-value is memory
172 175 settings_maker.make_setting('beaker.session.type', 'file')
173 176 settings_maker.make_setting('beaker.session.data_dir', jn(default_cache_dir, 'session_data'))
174 177
175 178 # cache_general
176 179 settings_maker.make_setting('rc_cache.cache_general.backend', 'dogpile.cache.rc.file_namespace')
177 180 settings_maker.make_setting('rc_cache.cache_general.expiration_time', 60 * 60 * 12, parser='int')
178 181 settings_maker.make_setting('rc_cache.cache_general.arguments.filename', jn(default_cache_dir, 'rhodecode_cache_general.db'))
179 182
180 183 # cache_perms
181 184 settings_maker.make_setting('rc_cache.cache_perms.backend', 'dogpile.cache.rc.file_namespace')
182 185 settings_maker.make_setting('rc_cache.cache_perms.expiration_time', 60 * 60, parser='int')
183 186 settings_maker.make_setting('rc_cache.cache_perms.arguments.filename', jn(default_cache_dir, 'rhodecode_cache_perms_db'))
184 187
185 188 # cache_repo
186 189 settings_maker.make_setting('rc_cache.cache_repo.backend', 'dogpile.cache.rc.file_namespace')
187 190 settings_maker.make_setting('rc_cache.cache_repo.expiration_time', 60 * 60 * 24 * 30, parser='int')
188 191 settings_maker.make_setting('rc_cache.cache_repo.arguments.filename', jn(default_cache_dir, 'rhodecode_cache_repo_db'))
189 192
190 193 # cache_license
191 194 settings_maker.make_setting('rc_cache.cache_license.backend', 'dogpile.cache.rc.file_namespace')
192 195 settings_maker.make_setting('rc_cache.cache_license.expiration_time', 60 * 5, parser='int')
193 196 settings_maker.make_setting('rc_cache.cache_license.arguments.filename', jn(default_cache_dir, 'rhodecode_cache_license_db'))
194 197
195 198 # cache_repo_longterm memory, 96H
196 199 settings_maker.make_setting('rc_cache.cache_repo_longterm.backend', 'dogpile.cache.rc.memory_lru')
197 200 settings_maker.make_setting('rc_cache.cache_repo_longterm.expiration_time', 345600, parser='int')
198 201 settings_maker.make_setting('rc_cache.cache_repo_longterm.max_size', 10000, parser='int')
199 202
200 203 # sql_cache_short
201 204 settings_maker.make_setting('rc_cache.sql_cache_short.backend', 'dogpile.cache.rc.memory_lru')
202 205 settings_maker.make_setting('rc_cache.sql_cache_short.expiration_time', 30, parser='int')
203 206 settings_maker.make_setting('rc_cache.sql_cache_short.max_size', 10000, parser='int')
204 207
205 208 # archive_cache
206 209 settings_maker.make_setting('archive_cache.locking.url', 'redis://redis:6379/1')
207 210 settings_maker.make_setting('archive_cache.backend.type', 'filesystem')
208 211
209 212 settings_maker.make_setting('archive_cache.filesystem.store_dir', jn(default_cache_dir, 'archive_cache'), default_when_empty=True,)
210 213 settings_maker.make_setting('archive_cache.filesystem.cache_shards', 8, parser='int')
211 214 settings_maker.make_setting('archive_cache.filesystem.cache_size_gb', 10, parser='float')
212 215 settings_maker.make_setting('archive_cache.filesystem.eviction_policy', 'least-recently-stored')
213 216
214 217 settings_maker.make_setting('archive_cache.filesystem.retry', False, parser='bool')
215 218 settings_maker.make_setting('archive_cache.filesystem.retry_backoff', 1, parser='int')
216 219 settings_maker.make_setting('archive_cache.filesystem.retry_attempts', 10, parser='int')
217 220
218 221 settings_maker.make_setting('archive_cache.objectstore.url', 'http://s3-minio:9000', default_when_empty=True,)
219 222 settings_maker.make_setting('archive_cache.objectstore.key', '')
220 223 settings_maker.make_setting('archive_cache.objectstore.secret', '')
221 224 settings_maker.make_setting('archive_cache.objectstore.region', 'eu-central-1')
222 225 settings_maker.make_setting('archive_cache.objectstore.bucket', 'rhodecode-archive-cache', default_when_empty=True,)
223 226 settings_maker.make_setting('archive_cache.objectstore.bucket_shards', 8, parser='int')
224 227
225 228 settings_maker.make_setting('archive_cache.objectstore.cache_size_gb', 10, parser='float')
226 229 settings_maker.make_setting('archive_cache.objectstore.eviction_policy', 'least-recently-stored')
227 230
228 231 settings_maker.make_setting('archive_cache.objectstore.retry', False, parser='bool')
229 232 settings_maker.make_setting('archive_cache.objectstore.retry_backoff', 1, parser='int')
230 233 settings_maker.make_setting('archive_cache.objectstore.retry_attempts', 10, parser='int')
231 234
232 235 settings_maker.env_expand()
233 236
234 237 # configure instance id
235 238 config_utils.set_instance_id(settings)
236 239
237 240 return settings
General Comments 0
You need to be logged in to leave comments. Login now