]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-daemon: Fix handling for symlinks on python2
authorMichael Fritch <mfritch@suse.com>
Sun, 24 Nov 2019 00:02:24 +0000 (17:02 -0700)
committerMichael Fritch <mfritch@suse.com>
Mon, 25 Nov 2019 23:45:13 +0000 (16:45 -0700)
Signed-off-by: Michael Fritch <mfritch@suse.com>
src/ceph-daemon/ceph-daemon

index 380c144cadd60777af10cf2484786b6b3d8ed40d..dabfd6a8522263373d0345c1b98ae5f03ad119e1 100755 (executable)
@@ -280,6 +280,25 @@ def make_log_dir(fsid, uid=None, gid=None):
     makedirs(log_dir, uid, gid, LOG_DIR_MODE)
     return log_dir
 
+def move_file(src, dst):
+    """
+    Move a file from src to dst
+    """
+    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)
+
+    return dst
+
 def find_program(filename):
     # type: (str) -> str
     name = find_executable(filename)
@@ -1497,8 +1516,7 @@ def command_adopt():
         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 glob(os.path.join(data_dir_src, '*')):
-            logger.debug('Move \'%s\' -> \'%s\'' % (data_file, data_dir_dst))
-            shutil.move(data_file, data_dir_dst)
+            move_file(data_file, data_dir_dst)
         logger.debug('Remove dir \'%s\'' % (data_dir_src))
         if os.path.ismount(data_dir_src):
             call_throws(['umount', data_dir_src])
@@ -1518,8 +1536,7 @@ def command_adopt():
         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 glob(log_dir_src):
-            logger.debug('Move \'%s\' -> \'%s\'' % (log_file, log_dir_dst))
-            shutil.move(log_file, log_dir_dst)
+            move_file(log_file, log_dir_dst)
 
         logger.info('Creating new units...')
         c = get_container(fsid, daemon_type, daemon_id)