| OLD | NEW |
| 1 # Copyright 2015 The Swarming Authors. All rights reserved. | 1 # Copyright 2015 The Swarming Authors. All rights reserved. |
| 2 # Use of this source code is governed by the Apache v2.0 license that can be | 2 # Use of this source code is governed by the Apache v2.0 license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import re | 5 import re |
| 6 | 6 |
| 7 from google.appengine.api import app_identity | 7 from google.appengine.api import app_identity |
| 8 from google.appengine.api import lib_config | 8 from google.appengine.api import lib_config |
| 9 from google.appengine.ext import ndb | 9 from google.appengine.ext import ndb |
| 10 | 10 |
| 11 # Config component is using google.protobuf package, it requires some python | 11 # Config component is using google.protobuf package, it requires some python |
| 12 # package magic hacking. | 12 # package magic hacking. |
| 13 from components import utils | 13 from components import utils |
| 14 utils.fix_protobuf_package() | 14 utils.fix_protobuf_package() |
| 15 | 15 |
| 16 from google import protobuf | 16 from google import protobuf |
| 17 | 17 |
| 18 from components import auth |
| 18 from components import utils | 19 from components import utils |
| 19 from components.datastore_utils import config | 20 from components.datastore_utils import config |
| 20 | 21 |
| 21 | 22 |
| 22 ################################################################################ | 23 ################################################################################ |
| 23 # Patterns | 24 # Patterns |
| 24 | 25 |
| 25 | 26 |
| 26 SERVICE_ID_PATTERN = r'[a-z0-9\-_]+' | 27 SERVICE_ID_PATTERN = r'[a-z0-9\-_]+' |
| 27 SERVICE_ID_RGX = re.compile(r'^%s$' % SERVICE_ID_PATTERN) | 28 SERVICE_ID_RGX = re.compile(r'^%s$' % SERVICE_ID_PATTERN) |
| 28 SERVICE_CONFIG_SET_RGX = re.compile(r'^services/(%s)$' % SERVICE_ID_PATTERN) | 29 SERVICE_CONFIG_SET_RGX = re.compile(r'^services/(%s)$' % SERVICE_ID_PATTERN) |
| 29 | 30 |
| 30 PROJECT_ID_PATTERN = SERVICE_ID_PATTERN | 31 PROJECT_ID_PATTERN = SERVICE_ID_PATTERN |
| 31 PROJECT_ID_RGX = re.compile(r'^%s$' % PROJECT_ID_PATTERN) | 32 PROJECT_ID_RGX = re.compile(r'^%s$' % PROJECT_ID_PATTERN) |
| 32 PROJECT_CONFIG_SET_RGX = re.compile(r'^projects/(%s)$' % PROJECT_ID_PATTERN) | 33 PROJECT_CONFIG_SET_RGX = re.compile(r'^projects/(%s)$' % PROJECT_ID_PATTERN) |
| 33 | 34 |
| 34 REF_CONFIG_SET_RGX = re.compile( | 35 REF_CONFIG_SET_RGX = re.compile( |
| 35 r'^projects/(%s)/(refs/.+$)' % PROJECT_ID_PATTERN) | 36 r'^projects/(%s)/(refs/.+)$' % PROJECT_ID_PATTERN) |
| 36 | 37 |
| 37 ALL_CONFIG_SET_RGX = [ | 38 ALL_CONFIG_SET_RGX = [ |
| 38 SERVICE_CONFIG_SET_RGX, | 39 SERVICE_CONFIG_SET_RGX, |
| 39 PROJECT_CONFIG_SET_RGX, | 40 PROJECT_CONFIG_SET_RGX, |
| 40 REF_CONFIG_SET_RGX, | 41 REF_CONFIG_SET_RGX, |
| 41 ] | 42 ] |
| 42 | 43 |
| 43 | 44 |
| 44 ################################################################################ | 45 ################################################################################ |
| 45 # Settings | 46 # Settings |
| 46 | 47 |
| 47 | 48 |
| 48 class ConstantConfig(object): | 49 class ConstantConfig(object): |
| 49 # In filesystem mode, the directory where configs are read from. | 50 # In filesystem mode, the directory where configs are read from. |
| 50 CONFIG_DIR = 'configs' | 51 CONFIG_DIR = 'configs' |
| 51 | 52 |
| 52 | 53 |
| 53 CONSTANTS = lib_config.register('components_config', ConstantConfig.__dict__) | 54 CONSTANTS = lib_config.register('components_config', ConstantConfig.__dict__) |
| 54 | 55 |
| 55 | 56 |
| 56 class ConfigSettings(config.GlobalConfig): | 57 class ConfigSettings(config.GlobalConfig): |
| 57 # Hostname of the config service. | 58 # Hostname of the config service. |
| 58 service_hostname = ndb.StringProperty(indexed=False) | 59 service_hostname = ndb.StringProperty(indexed=False) |
| 60 # Identity account used by config service. |
| 61 trusted_config_account = auth.IdentityProperty(indexed=False) |
| 59 | 62 |
| 60 | 63 |
| 61 ################################################################################ | 64 ################################################################################ |
| 62 # Config parsing | 65 # Config parsing |
| 63 | 66 |
| 64 | 67 |
| 65 class ConfigFormatError(Exception): | 68 class ConfigFormatError(Exception): |
| 66 """A config file is malformed.""" | 69 """A config file is malformed.""" |
| 67 | 70 |
| 68 | 71 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 86 return msg | 89 return msg |
| 87 | 90 |
| 88 | 91 |
| 89 ################################################################################ | 92 ################################################################################ |
| 90 # Rest | 93 # Rest |
| 91 | 94 |
| 92 | 95 |
| 93 @utils.cache | 96 @utils.cache |
| 94 def self_config_set(): | 97 def self_config_set(): |
| 95 return 'services/%s' % app_identity.get_application_id() | 98 return 'services/%s' % app_identity.get_application_id() |
| OLD | NEW |