diff options
-rw-r--r-- | tools/glusterfind/Makefile.am | 3 | ||||
-rw-r--r-- | tools/glusterfind/src/main.py | 49 | ||||
-rw-r--r-- | tools/glusterfind/src/tool.conf.in | 1 |
3 files changed, 40 insertions, 13 deletions
diff --git a/tools/glusterfind/Makefile.am b/tools/glusterfind/Makefile.am index c99a3ddcb37..872fff12047 100644 --- a/tools/glusterfind/Makefile.am +++ b/tools/glusterfind/Makefile.am @@ -5,3 +5,6 @@ EXTRA_DIST = bin_SCRIPTS = glusterfind CLEANFILES = $(bin_SCRIPTS) + +install-data-local: + $(mkdir_p) $(DESTDIR)$(GLUSTERD_WORKDIR)/glusterfind/.keys diff --git a/tools/glusterfind/src/main.py b/tools/glusterfind/src/main.py index 17043dca213..96d3d8d5f33 100644 --- a/tools/glusterfind/src/main.py +++ b/tools/glusterfind/src/main.py @@ -39,6 +39,13 @@ class StoreAbsPath(Action): setattr(namespace, self.dest, os.path.abspath(values)) +def get_pem_key_path(session, volume): + return os.path.join(conf.get_opt("session_dir"), + session, + volume, + "%s_%s_secret.pem" % (session, volume)) + + def node_run(volume, host, path, start, outfile, args, fallback=False): """ If host is local node, execute the command locally. If not local @@ -46,6 +53,7 @@ def node_run(volume, host, path, start, outfile, args, fallback=False): remote node using scp. """ localdir = is_host_local(host) + pem_key_path = get_pem_key_path(args.session, args.volume) # If Full backup is requested or start time is zero, use brickfind change_detector = conf.get_change_detector(args.change_detector) @@ -69,7 +77,7 @@ def node_run(volume, host, path, start, outfile, args, fallback=False): if not localdir: # prefix with ssh command if not local node cmd = ["ssh", - "-i", conf.get_opt("secret_pem"), + "-i", pem_key_path, "root@%s" % host] + cmd rc, out, err = execute(cmd, logger=logger) @@ -83,7 +91,7 @@ def node_run(volume, host, path, start, outfile, args, fallback=False): if not localdir: cmd_copy = ["scp", - "-i", conf.get_opt("secret_pem"), + "-i", pem_key_path, "root@%s:/%s" % (host, outfile), os.path.dirname(outfile)] execute(cmd_copy, exit_msg="%s - Copy command failed" % host, @@ -93,6 +101,8 @@ def node_run(volume, host, path, start, outfile, args, fallback=False): def node_cleanup(host, args): localdir = is_host_local(host) + pem_key_path = get_pem_key_path(args.session, args.volume) + # CHANGE_DETECTOR <SESSION> <VOLUME> <BRICK> <OUTFILE> <START> --debug # --gfidpath <TYPE> cmd = [conf.get_opt("nodecleanup"), @@ -102,7 +112,7 @@ def node_cleanup(host, args): if not localdir: # prefix with ssh command if not local node cmd = ["ssh", - "-i", conf.get_opt("secret_pem"), + "-i", pem_key_path, "root@%s" % host] + cmd execute(cmd, exit_msg="%s - Cleanup failed" % host, logger=logger) @@ -264,27 +274,41 @@ def _get_args(): return parser.parse_args() -def ssh_setup(): - if not os.path.exists(conf.get_opt("secret_pem")): +def ssh_setup(args): + pem_key_path = get_pem_key_path(args.session, args.volume) + + if not os.path.exists(pem_key_path): # Generate ssh-key cmd = ["ssh-keygen", "-N", "", "-f", - conf.get_opt("secret_pem")] + pem_key_path] execute(cmd, exit_msg="Unable to generate ssh key %s" - % conf.get_opt("secret_pem"), + % pem_key_path, logger=logger) - logger.info("Ssh key generated %s" % conf.get_opt("secret_pem")) + logger.info("Ssh key generated %s" % pem_key_path) + + try: + shutil.copyfile(pem_key_path + ".pub", + os.path.join(conf.get_opt("session_dir"), + ".keys", + "%s_%s_secret.pem.pub" % (args.session, + args.volume))) + except (IOError, OSError) as e: + fail("Failed to copy public key to %s: %s" + % (os.path.join(conf.get_opt("session_dir"), ".keys"), e), + logger=logger) # Copy pub file to all nodes cmd = ["gluster", "system::", "copy", "file", - "/" + os.path.basename(conf.get_opt("secret_pem")) + ".pub"] + "/glusterfind/.keys/%s.pub" % os.path.basename(pem_key_path)] + execute(cmd, exit_msg="Failed to distribute ssh keys", logger=logger) logger.info("Distributed ssh key to all nodes of Volume") @@ -295,7 +319,7 @@ def ssh_setup(): "execute", "add_secret_pub", "root", - os.path.basename(conf.get_opt("secret_pem")) + ".pub"] + "/glusterfind/.keys/%s.pub" % os.path.basename(pem_key_path)] execute(cmd, exit_msg="Failed to add ssh keys to authorized_keys file", logger=logger) @@ -320,7 +344,7 @@ def mode_create(session_dir, args): fail("Session %s already created" % args.session, logger=logger) if not os.path.exists(status_file) or args.force: - ssh_setup() + ssh_setup(args) execute(["gluster", "volume", "set", args.volume, "build-pgfid", "on"], @@ -419,7 +443,8 @@ def mode_list(session_dir, args): else: sessions = [] for d in os.listdir(session_dir): - sessions.append(d) + if d != ".keys": + sessions.append(d) output = [] for session in sessions: diff --git a/tools/glusterfind/src/tool.conf.in b/tools/glusterfind/src/tool.conf.in index 48ecdda06cc..54230cb4dca 100644 --- a/tools/glusterfind/src/tool.conf.in +++ b/tools/glusterfind/src/tool.conf.in @@ -1,6 +1,5 @@ [vars] session_dir=@GLUSTERD_WORKDIR@/glusterfind/ -secret_pem=@GLUSTERD_WORKDIR@/glusterfind.secret.pem working_dir=@GLUSTERFSD_MISCDIR@/glusterfind/ log_dir=/var/log/glusterfs/glusterfind/ nodecleanup=@GLUSTERFS_LIBEXECDIR@/glusterfind/nodecleanup.py |