Blame tools/glusterfind/src/nodeagent.py

Packit Service 35f350
#!/usr/bin/python3
Packit Service e080da
# -*- coding: utf-8 -*-
Packit Service e080da
Packit Service e080da
# Copyright (c) 2015 Red Hat, Inc. <http://www.redhat.com/>
Packit Service e080da
# This file is part of GlusterFS.
Packit Service e080da
#
Packit Service e080da
# This file is licensed to you under your choice of the GNU Lesser
Packit Service e080da
# General Public License, version 3 or any later version (LGPLv3 or
Packit Service e080da
# later), or the GNU General Public License, version 2 (GPLv2), in all
Packit Service e080da
# cases as published by the Free Software Foundation.
Packit Service e080da
Packit Service e080da
import shutil
Packit Service e080da
import sys
Packit Service e080da
import os
Packit Service e080da
import logging
Packit Service e080da
from argparse import ArgumentParser, RawDescriptionHelpFormatter
Packit Service e080da
try:
Packit Service e080da
    import urllib.parse as urllib
Packit Service e080da
except ImportError:
Packit Service e080da
    import urllib
Packit Service e080da
from errno import ENOTEMPTY
Packit Service e080da
Packit Service e080da
from utils import setup_logger, mkdirp, handle_rm_error
Packit Service e080da
import conf
Packit Service e080da
Packit Service e080da
logger = logging.getLogger()
Packit Service e080da
Packit Service e080da
Packit Service e080da
def mode_cleanup(args):
Packit Service e080da
    working_dir = os.path.join(conf.get_opt("working_dir"),
Packit Service e080da
                               args.session,
Packit Service e080da
                               args.volume,
Packit Service e080da
                               args.tmpfilename)
Packit Service e080da
Packit Service e080da
    mkdirp(os.path.join(conf.get_opt("log_dir"), args.session, args.volume),
Packit Service e080da
           exit_on_err=True)
Packit Service e080da
    log_file = os.path.join(conf.get_opt("log_dir"),
Packit Service e080da
                            args.session,
Packit Service e080da
                            args.volume,
Packit Service e080da
                            "changelog.log")
Packit Service e080da
Packit Service e080da
    setup_logger(logger, log_file)
Packit Service e080da
Packit Service e080da
    try:
Packit Service e080da
        shutil.rmtree(working_dir, onerror=handle_rm_error)
Packit Service e080da
    except (OSError, IOError) as e:
Packit Service e080da
        logger.error("Failed to delete working directory: %s" % e)
Packit Service e080da
        sys.exit(1)
Packit Service e080da
Packit Service e080da
Packit Service e080da
def mode_create(args):
Packit Service e080da
    session_dir = os.path.join(conf.get_opt("session_dir"),
Packit Service e080da
                               args.session)
Packit Service e080da
    status_file = os.path.join(session_dir, args.volume,
Packit Service e080da
                     "%s.status" % urllib.quote_plus(args.brick))
Packit Service e080da
Packit Service e080da
    mkdirp(os.path.join(session_dir, args.volume), exit_on_err=True,
Packit Service e080da
           logger=logger)
Packit Service e080da
Packit Service e080da
    if not os.path.exists(status_file) or args.reset_session_time:
Packit Service e080da
        with open(status_file, "w") as f:
Packit Service e080da
            f.write(args.time_to_update)
Packit Service e080da
Packit Service e080da
    sys.exit(0)
Packit Service e080da
Packit Service e080da
Packit Service e080da
def mode_post(args):
Packit Service e080da
    session_dir = os.path.join(conf.get_opt("session_dir"), args.session)
Packit Service e080da
    status_file = os.path.join(session_dir, args.volume,
Packit Service e080da
                     "%s.status" % urllib.quote_plus(args.brick))
Packit Service e080da
Packit Service e080da
    mkdirp(os.path.join(session_dir, args.volume), exit_on_err=True,
Packit Service e080da
           logger=logger)
Packit Service e080da
    status_file_pre = status_file + ".pre"
Packit Service e080da
Packit Service e080da
    if os.path.exists(status_file_pre):
Packit Service e080da
        os.rename(status_file_pre, status_file)
Packit Service e080da
        sys.exit(0)
Packit Service e080da
Packit Service e080da
Packit Service e080da
def mode_delete(args):
Packit Service e080da
    session_dir = os.path.join(conf.get_opt("session_dir"),
Packit Service e080da
                               args.session)
Packit Service e080da
    shutil.rmtree(os.path.join(session_dir, args.volume),
Packit Service e080da
                  onerror=handle_rm_error)
Packit Service e080da
Packit Service e080da
    # If the session contains only this volume, then cleanup the
Packit Service e080da
    # session directory. If a session contains multiple volumes
Packit Service e080da
    # then os.rmdir will fail with ENOTEMPTY
Packit Service e080da
    try:
Packit Service e080da
        os.rmdir(session_dir)
Packit Service e080da
    except OSError as e:
Packit Service e080da
        if not e.errno == ENOTEMPTY:
Packit Service e080da
            logger.warn("Failed to delete session directory: %s" % e)
Packit Service e080da
Packit Service e080da
Packit Service e080da
def _get_args():
Packit Service e080da
    parser = ArgumentParser(formatter_class=RawDescriptionHelpFormatter,
Packit Service e080da
                            description="Node Agent")
Packit Service e080da
    subparsers = parser.add_subparsers(dest="mode")
Packit Service e080da
Packit Service e080da
    parser_cleanup = subparsers.add_parser('cleanup')
Packit Service e080da
    parser_cleanup.add_argument("session", help="Session Name")
Packit Service e080da
    parser_cleanup.add_argument("volume", help="Volume Name")
Packit Service e080da
    parser_cleanup.add_argument("tmpfilename", help="Temporary File Name")
Packit Service e080da
    parser_cleanup.add_argument("--debug", help="Debug", action="store_true")
Packit Service e080da
Packit Service e080da
    parser_session_create = subparsers.add_parser('create')
Packit Service e080da
    parser_session_create.add_argument("session", help="Session Name")
Packit Service e080da
    parser_session_create.add_argument("volume", help="Volume Name")
Packit Service e080da
    parser_session_create.add_argument("brick", help="Brick Path")
Packit Service e080da
    parser_session_create.add_argument("time_to_update", help="Time to Update")
Packit Service e080da
    parser_session_create.add_argument("--reset-session-time",
Packit Service e080da
                                       help="Reset Session Time",
Packit Service e080da
                                       action="store_true")
Packit Service e080da
    parser_session_create.add_argument("--debug", help="Debug",
Packit Service e080da
                                       action="store_true")
Packit Service e080da
Packit Service e080da
    parser_post = subparsers.add_parser('post')
Packit Service e080da
    parser_post.add_argument("session", help="Session Name")
Packit Service e080da
    parser_post.add_argument("volume", help="Volume Name")
Packit Service e080da
    parser_post.add_argument("brick", help="Brick Path")
Packit Service e080da
    parser_post.add_argument("--debug", help="Debug",
Packit Service e080da
                             action="store_true")
Packit Service e080da
Packit Service e080da
    parser_delete = subparsers.add_parser('delete')
Packit Service e080da
    parser_delete.add_argument("session", help="Session Name")
Packit Service e080da
    parser_delete.add_argument("volume", help="Volume Name")
Packit Service e080da
    parser_delete.add_argument("--debug", help="Debug",
Packit Service e080da
                               action="store_true")
Packit Service e080da
    return parser.parse_args()
Packit Service e080da
Packit Service e080da
Packit Service e080da
if __name__ == "__main__":
Packit Service e080da
    args = _get_args()
Packit Service e080da
Packit Service e080da
    # globals() will have all the functions already defined.
Packit Service e080da
    # mode_<args.mode> will be the function name to be called
Packit Service e080da
    globals()["mode_" + args.mode](args)