diff options
| author | Michal Arbet <michal.arbet@ultimum.io> | 2026-05-25 09:56:17 +0200 |
|---|---|---|
| committer | Michal Arbet <michal.arbet@ultimum.io> | 2026-07-02 17:28:39 +0200 |
| commit | ebc7eb82969af107f5a54b29b8ef898cd759a997 (patch) | |
| tree | cc197428c022f7ae1d863b741f1cc6601e331504 /docker/base | |
| parent | 575baf05c4964d46f0c8f13bcdf193ce5e863c82 (diff) | |
| download | kolla-ebc7eb82969af107f5a54b29b8ef898cd759a997.tar.gz kolla-ebc7eb82969af107f5a54b29b8ef898cd759a997.zip | |
set_configs: Add support for creating files and setting perms
Change-Id: I74a6d05007488b69fa040c40d01a07afae369794
Needed-By: https://review.opendev.org/c/openstack/kolla-ansible/+/989850
Signed-off-by: Michal Arbet <michal.arbet@ultimum.io>
Diffstat (limited to 'docker/base')
| -rw-r--r-- | docker/base/set_configs.py | 49 |
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) |
