diff options
Diffstat (limited to 'tools')
| -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  | 
