aboutsummaryrefslogtreecommitdiff
path: root/docker/base/set_configs.py
diff options
context:
space:
mode:
Diffstat (limited to 'docker/base/set_configs.py')
-rw-r--r--docker/base/set_configs.py49
1 files changed, 43 insertions, 6 deletions
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py
index c0a4af76c..4b025d55a 100644
--- a/docker/base/set_configs.py
+++ b/docker/base/set_configs.py
@@ -258,7 +258,7 @@ class ConfigFile(object):
def validate_config(config):
required_keys = {'source', 'dest'}
- required_dir_keys = {'path', 'owner', 'perm'}
+ required_path_keys = {'path', 'owner', 'perm'}
if 'command' not in config:
raise InvalidConfig('Config is missing required "command" key')
@@ -274,11 +274,24 @@ def validate_config(config):
raise InvalidConfig(
'Config needs preserve_properties or owner and perm')
- for data in config.get('directories', list()):
- if not set(data.keys()) >= required_dir_keys:
- message = ('directories config is missing required keys: %s'
- % (required_dir_keys - set(data.keys())))
- raise InvalidConfig(message)
+ for section in ('directories', 'files'):
+ for data in config.get(section, list()):
+ missing = required_path_keys - set(data.keys())
+ if missing:
+ raise InvalidConfig(
+ '%s config is missing required keys: %s'
+ % (section, missing))
+
+ for key in required_path_keys:
+ if data.get(key) is None:
+ raise InvalidConfig(
+ '%s config key "%s" must not be null'
+ % (section, key))
+
+ if glob.has_magic(data['path']):
+ raise InvalidConfig(
+ '%s config does not support glob paths: %s'
+ % (section, data['path']))
def validate_source(data):
@@ -375,6 +388,28 @@ def create_directories(config):
handle_permissions({'permissions': [data]})
+def create_files(config):
+ if 'files' not in config:
+ return
+ LOG.info('Creating files')
+ for data in config['files']:
+ path = data['path']
+ if os.path.islink(path):
+ raise OSError(
+ "Path is a symbolic link, expected regular file (%s)" % path)
+ if os.path.isdir(path):
+ raise OSError(
+ "Path is a directory, expected file (%s)" % path)
+ parent = os.path.dirname(path)
+ if parent and not os.path.isdir(parent):
+ raise OSError(
+ "Parent directory does not exist (%s)" % parent)
+ if not os.path.exists(path):
+ with open(path, 'a'):
+ pass
+ handle_permissions({'permissions': [data]})
+
+
def user_group(owner):
if ':' in owner:
user, group = owner.split(':', 1)
@@ -611,6 +646,7 @@ def execute_config_strategy(config):
LOG.info("Kolla config strategy set to: %s", config_strategy)
if config_strategy == "COPY_ALWAYS":
create_directories(config)
+ create_files(config)
handle_defaults(config)
copy_config(config)
handle_permissions(config)
@@ -621,6 +657,7 @@ def execute_config_strategy(config):
exit_code=0)
else:
create_directories(config)
+ create_files(config)
handle_defaults(config)
copy_config(config)
handle_permissions(config)