from distutils.spawn import find_executable
from functools import wraps
-from glob import iglob
+from glob import glob
container_path = None
makedirs(log_dir, uid, gid, LOG_DIR_MODE)
return log_dir
-def copy_file(src, dst, uid=None, gid=None):
- # type: (str, str, int, int) -> str
+def copy_files(src, dst, uid=None, gid=None):
+ # type: (List[str], str, int, int) -> None
"""
- Copy a file from src to dst
+ Copy a files from src to dst
"""
if not uid or not gid:
(uid, gid) = extract_uid_gid()
- if os.path.isdir(dst):
- dst = os.path.join(dst, os.path.basename(src))
+ for src_file in src:
+ dst_file = dst
+ if os.path.isdir(dst):
+ dst_file = os.path.join(dst, os.path.basename(src_file))
- logger.debug('Copy \'%s\' -> \'%s\'' % (src, dst))
- shutil.copyfile(src, dst)
- os.chown(dst, uid, gid)
+ logger.debug('copy file \'%s\' -> \'%s\'' % (src_file, dst_file))
+ shutil.copyfile(src_file, dst_file)
- return dst
+ logger.debug('chown %s:%s \'%s\'' % (uid, gid, dst_file))
+ os.chown(dst_file, uid, gid)
-def move_file(src, dst, uid=None, gid=None):
- # type: (str, str, int, int) -> str
+def move_files(src, dst, uid=None, gid=None):
+ # type: (List[str], str, int, int) -> None
"""
- Move a file from src to dst
+ Move files from src to dst
"""
if not uid or not gid:
(uid, gid) = extract_uid_gid()
- if os.path.isdir(dst):
- dst = os.path.join(dst, os.path.basename(src))
-
- if os.path.islink(src):
- # shutil.move() in python2 does not handle symlinks correctly
- src_rl = os.readlink(src)
- logger.debug('symlink \'%s\' -> \'%s\'' % (dst, src_rl))
- os.symlink(src_rl, dst)
- os.unlink(src)
- else:
- logger.debug('Move \'%s\' -> \'%s\'' % (src, dst))
- shutil.move(src, dst)
- os.chown(dst, uid, gid)
-
- return dst
+ for src_file in src:
+ dst_file = dst
+ if os.path.isdir(dst):
+ dst_file = os.path.join(dst, os.path.basename(src_file))
+
+ if os.path.islink(src_file):
+ # shutil.move() in py2 does not handle symlinks correctly
+ src_rl = os.readlink(src_file)
+ logger.debug("symlink '%s' -> '%s'" % (dst_file, src_rl))
+ os.symlink(src_rl, dst_file)
+ os.unlink(src_file)
+ else:
+ logger.debug("move file '%s' -> '%s'" % (src_file, dst_file))
+ shutil.move(src_file, dst_file)
+ logger.debug('chown %s:%s \'%s\'' % (uid, gid, dst_file))
+ os.chown(dst_file, uid, gid)
def find_program(filename):
# type: (str) -> str
def create_daemon_dirs(fsid, daemon_type, daemon_id, uid, gid,
config=None, keyring=None):
# type: (str, str, Union[int, str], int, int, str, str) -> None
- data_dir = make_data_dir(fsid, daemon_type, daemon_id)
+ data_dir = make_data_dir(fsid, daemon_type, daemon_id, uid=uid, gid=gid)
make_log_dir(fsid)
if config:
data_dir_src = ('/var/lib/ceph/%s/%s-%s' %
(daemon_type, args.cluster, daemon_id))
data_dir_src = os.path.abspath(args.legacy_dir + data_dir_src)
- data_dir_dst = make_data_dir(fsid, daemon_type, daemon_id)
- for data_file in iglob(os.path.join(data_dir_src, '*')):
- move_file(data_file, data_dir_dst, uid=uid, gid=gid)
+ data_dir_dst = make_data_dir(fsid, daemon_type, daemon_id,
+ uid=uid, gid=gid)
+ move_files(glob(os.path.join(data_dir_src, '*')),
+ data_dir_dst,
+ uid=uid, gid=gid)
logger.debug('Remove dir \'%s\'' % (data_dir_src))
if os.path.ismount(data_dir_src):
call_throws(['umount', data_dir_src])
config_src = '/etc/ceph/%s.conf' % (args.cluster)
config_src = os.path.abspath(args.legacy_dir + config_src)
config_dst = os.path.join(data_dir_dst, 'config')
- copy_file(config_src, config_dst, uid=uid, gid=gid)
+ copy_files([config_src], config_dst, uid=uid, gid=gid)
# logs
logger.info('Moving logs...')
(args.cluster, daemon_type, daemon_id))
log_dir_src = os.path.abspath(args.legacy_dir + log_dir_src)
log_dir_dst = make_log_dir(fsid, uid=uid, gid=gid)
- for log_file in iglob(log_dir_src):
- move_file(log_file, log_dir_dst, uid=uid, gid=gid)
+ move_files(glob(log_dir_src),
+ log_dir_dst,
+ uid=uid, gid=gid)
logger.info('Creating new units...')
c = get_container(fsid, daemon_type, daemon_id)