Add support for loading kolla config from ENV

Implements: blueprint zookeeper

Change-Id: Ibabcb5d6d304be9290633338c513f16651d4479a
This commit is contained in:
Angus Salkeld 2015-11-10 13:10:11 +10:00 committed by Michal Rostecki
parent df0ef8ddb5
commit 2f1c00a467
2 changed files with 44 additions and 10 deletions

View File

@ -140,21 +140,38 @@ def set_permissions(data):
def load_config():
config_file = '/var/lib/kolla/config_files/config.json'
LOG.info('Loading config file at {}'.format(config_file))
def load_from_env():
config_raw = os.environ.get("KOLLA_CONFIG")
if config_raw is None:
return None
# Attempt to read config file
with open(config_file) as f:
# Attempt to read config
try:
config = json.load(f)
return json.loads(config_raw)
except ValueError:
LOG.error('Invalid json file found at {}'.format(config_file))
sys.exit(1)
except IOError as e:
LOG.error('Could not read file {}. Failed with error {}'.format(
config_file, e))
LOG.error('Invalid json for Kolla config')
sys.exit(1)
def load_from_file():
config_file = '/var/lib/kolla/config_files/config.json'
LOG.info('Loading config file at {}'.format(config_file))
# Attempt to read config file
with open(config_file) as f:
try:
return json.load(f)
except ValueError:
LOG.error('Invalid json file found at {}'.format(config_file))
sys.exit(1)
except IOError as e:
LOG.error('Could not read file {}. Failed with error {}'
.format(config_file, e))
sys.exit(1)
config = load_from_env()
if config is None:
config = load_from_file()
LOG.info('Validating config file')
validate_config(config)

View File

@ -45,3 +45,20 @@ class LoadFromFile(base.BaseTestCase):
mock.call().__enter__(),
mock.call().write(u'/bin/true'),
mock.call().__exit__(None, None, None)], mo.mock_calls)
class LoadFromEnv(base.BaseTestCase):
def test_load_ok(self):
in_config = json.dumps({'command': '/bin/true',
'config_files': {}})
mo = mock.mock_open()
with mock.patch.object(set_configs, 'open', mo):
with mock.patch.dict('os.environ', {'KOLLA_CONFIG': in_config}):
set_configs.load_config()
self.assertEqual([mock.call('/run_command', 'w+'),
mock.call().__enter__(),
mock.call().write(u'/bin/true'),
mock.call().__exit__(None, None, None)],
mo.mock_calls)