diff options
| author | MinSun <minsu@cisco.com> | 2019-04-25 14:54:42 +0800 |
|---|---|---|
| committer | Jakub Darmach <jakub@stackhpc.com> | 2024-08-21 14:43:12 +0200 |
| commit | 07d0b12efdbaaf38d41670d67a2ba47ac9ded1e4 (patch) | |
| tree | 77caa34f192c0f4a75950be0e727225678cd5886 /docker/base | |
| parent | 5dede104bcdfa72a8da32c46fe0bd27f54221d4f (diff) | |
| download | kolla-07d0b12efdbaaf38d41670d67a2ba47ac9ded1e4.tar.gz kolla-07d0b12efdbaaf38d41670d67a2ba47ac9ded1e4.zip | |
Add exclude for permissions in kolla config.json file
When using recursive mode to set permissions for a directory as
defined in kolla config.json, all the subdirectories and files will
receive the same permissions. This change adds the option to exclude
specific files or directories - either a name or a regular expression
can be used.
Closes-Bug: #1931294
Closes-Bug: #1972168
Co-Authored-By: Jakub Darmach <jakub@stackhpc.com>
Change-Id: If2f39736e2af34cd91d0976051ff66f06e96ab42
Diffstat (limited to 'docker/base')
| -rw-r--r-- | docker/base/set_configs.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py index 0cb0e414c..e2b235e7f 100644 --- a/docker/base/set_configs.py +++ b/docker/base/set_configs.py @@ -19,6 +19,7 @@ import json import logging import os import pwd +import re import shutil import sys @@ -345,6 +346,7 @@ def handle_permissions(config): owner = permission.get('owner') recurse = permission.get('recurse', False) perm = permission.get('perm') + exclude = permission.get('exclude', []) desired_user, desired_group = user_group(owner) uid = pwd.getpwnam(desired_user).pw_uid @@ -375,14 +377,24 @@ def handle_permissions(config): LOG.exception('Failed to set permission of %s to %s', path, perm) + def handle_exclusion(root, path_suffix): + full_path = os.path.join(root, path_suffix) + LOG.debug("Checking for exclusion: %s" % full_path) + if exclude: + for exclude_ in exclude: + if not re.search(exclude_, full_path): + set_perms(full_path, uid, gid, perm) + else: + set_perms(full_path, uid, gid, perm) + for dest in glob.glob(path): set_perms(dest, uid, gid, perm) if recurse and os.path.isdir(dest): for root, dirs, files in os.walk(dest): for dir_ in dirs: - set_perms(os.path.join(root, dir_), uid, gid, perm) + handle_exclusion(root, dir_) for file_ in files: - set_perms(os.path.join(root, file_), uid, gid, perm) + handle_exclusion(root, file_) def execute_config_strategy(config): |
