|
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)
|