aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorMinSun <minsu@cisco.com>2019-04-25 14:54:42 +0800
committerJakub Darmach <jakub@stackhpc.com>2024-08-21 14:43:12 +0200
commit07d0b12efdbaaf38d41670d67a2ba47ac9ded1e4 (patch)
tree77caa34f192c0f4a75950be0e727225678cd5886 /docker
parent5dede104bcdfa72a8da32c46fe0bd27f54221d4f (diff)
downloadkolla-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')
-rw-r--r--docker/base/set_configs.py16
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):