aboutsummaryrefslogtreecommitdiff
path: root/docker/base/set_configs.py
diff options
context:
space:
mode:
authorMichal Nasiadka <mnasiadka@gmail.com>2026-04-27 15:28:17 +0200
committerMichal Nasiadka <mnasiadka@gmail.com>2026-05-05 10:34:26 +0000
commit33c0e26e8a0290f0b6d647bb67e18a4f500907fc (patch)
treed87fa00b1bb4c60e664111bd895bf629c903e060 /docker/base/set_configs.py
parent1627e5da6d6ac754be3e0afe61eeddf6e38f93b6 (diff)
downloadkolla-33c0e26e8a0290f0b6d647bb67e18a4f500907fc.tar.gz
kolla-33c0e26e8a0290f0b6d647bb67e18a4f500907fc.zip
set_configs: Add support for creating directories and setting perms
Change-Id: Id63c035fafaa68a9004c65161c5a3a3ad5544f02 Signed-off-by: Michal Nasiadka <mnasiadka@gmail.com>
Diffstat (limited to 'docker/base/set_configs.py')
-rw-r--r--docker/base/set_configs.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py
index 80c32e507..1a80bd877 100644
--- a/docker/base/set_configs.py
+++ b/docker/base/set_configs.py
@@ -257,6 +257,7 @@ class ConfigFile(object):
def validate_config(config):
required_keys = {'source', 'dest'}
+ required_dir_keys = {'path', 'owner', 'perm'}
if 'command' not in config:
raise InvalidConfig('Config is missing required "command" key')
@@ -272,6 +273,12 @@ 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)
+
def validate_source(data):
source = data.get('source')
@@ -334,6 +341,19 @@ def copy_config(config):
LOG.exception('Failed to set permission of %s to 0o644', cmd)
+def create_directories(config):
+ if 'directories' not in config:
+ return
+ LOG.info('Creating directories')
+ for data in config['directories']:
+ path = data['path']
+ try:
+ os.makedirs(path, exist_ok=True)
+ except Exception:
+ raise OSError("Can't create destination directory (%s)" % (path))
+ handle_permissions({'permissions': [data]})
+
+
def user_group(owner):
if ':' in owner:
user, group = owner.split(':', 1)
@@ -560,6 +580,7 @@ def execute_config_strategy(config):
config_strategy = os.environ.get("KOLLA_CONFIG_STRATEGY")
LOG.info("Kolla config strategy set to: %s", config_strategy)
if config_strategy == "COPY_ALWAYS":
+ create_directories(config)
handle_defaults(config)
copy_config(config)
handle_permissions(config)
@@ -569,6 +590,7 @@ def execute_config_strategy(config):
"The config strategy prevents copying new configs",
exit_code=0)
else:
+ create_directories(config)
handle_defaults(config)
copy_config(config)
handle_permissions(config)