aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-06-28 18:34:04 +0000
committerGerrit Code Review <review@openstack.org>2017-06-28 18:34:04 +0000
commitb500866531fa8bcae9ae09a6fe28de276e3e1724 (patch)
tree5572c766a14d5b8607978a1f11a11df29c5ee6e8 /docker
parente85e4d15423e4c56874888e27d4583658ce09da5 (diff)
parent748a056b0964e2abf93ad66951957c834a32b81b (diff)
downloadkolla-b500866531fa8bcae9ae09a6fe28de276e3e1724.tar.gz
kolla-b500866531fa8bcae9ae09a6fe28de276e3e1724.zip
Merge "Allow setting copied files group more precisely"
Diffstat (limited to 'docker')
-rw-r--r--docker/base/set_configs.py48
1 files changed, 22 insertions, 26 deletions
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py
index 4598bedcc..59dc2f38b 100644
--- a/docker/base/set_configs.py
+++ b/docker/base/set_configs.py
@@ -99,19 +99,8 @@ class ConfigFile(object):
self._set_permission(dest)
def _set_permission(self, path):
- user = pwd.getpwnam(self.owner)
- uid, gid = user.pw_uid, user.pw_gid
- LOG.info('Setting file %s owner to %s:%s', path,
- self.owner, self.owner)
- os.chown(path, uid, gid)
- # NOTE(Jeffrey4l): py3 need '0oXXX' format for octal literals, and py2
- # support such format too.
- perm = self.perm
- if len(perm) == 4 and perm[1] != 'o':
- perm = ''.join([perm[:1], 'o', perm[1:]])
- perm = int(perm, base=0)
- LOG.info('Setting file %s permission to %s', path, self.perm)
- os.chmod(path, perm)
+ handle_permissions({'owner': self.owner, 'path': path,
+ 'perm': self.perm})
def copy(self):
@@ -156,15 +145,16 @@ class ConfigFile(object):
self.perm, actual_perm)
return False
# check owner
+ desired_user, desired_group = user_group(self.owner)
actual_user = pwd.getpwuid(file_stat.st_uid)
- if actual_user.pw_name != self.owner:
+ if actual_user.pw_name != desired_user:
LOG.error('Dest file does not have expected user: %s,'
- ' actual: %s ', self.owner, actual_user.pw_name)
+ ' actual: %s ', desired_user, actual_user.pw_name)
return False
actual_group = grp.getgrgid(file_stat.st_gid)
- if actual_group.gr_name != self.owner:
+ if actual_group.gr_name != desired_group:
LOG.error('Dest file does not have expected group: %s,'
- ' actual: %s ', self.owner, actual_group.gr_name)
+ ' actual: %s ', desired_group, actual_group.gr_name)
return False
return True
@@ -296,6 +286,16 @@ def copy_config(config):
f.write(config['command'])
+def user_group(owner):
+ if ':' in owner:
+ user, group = owner.split(':', 1)
+ if not group:
+ group = user
+ else:
+ user, group = owner, owner
+ return user, group
+
+
def handle_permissions(config):
for permission in config.get('permissions', list()):
path = permission.get('path')
@@ -303,15 +303,9 @@ def handle_permissions(config):
recurse = permission.get('recurse', False)
perm = permission.get('perm')
- if ':' in owner:
- user, group = owner.split(':', 1)
- if not group:
- group = user
- else:
- user, group = owner, owner
-
- uid = pwd.getpwnam(user).pw_uid
- gid = grp.getgrnam(group).gr_gid
+ desired_user, desired_group = user_group(owner)
+ uid = pwd.getpwnam(desired_user).pw_uid
+ gid = grp.getgrnam(desired_group).gr_gid
def set_perms(path, uid, gid, perm):
LOG.info('Setting permission for %s', path)
@@ -325,6 +319,8 @@ def handle_permissions(config):
LOG.exception('Set permission failed for %s', path)
if perm:
+ # NOTE(Jeffrey4l): py3 need '0oXXX' format for octal literals,
+ # and py2 support such format too.
if len(perm) == 4 and perm[1] != 'o':
perm = ''.join([perm[:1], 'o', perm[1:]])
perm = int(perm, base=0)