diff options
Diffstat (limited to 'geo-replication/src/peer_mountbroker.in')
| -rw-r--r-- | geo-replication/src/peer_mountbroker.in | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/geo-replication/src/peer_mountbroker.in b/geo-replication/src/peer_mountbroker.in index 4c97c6923c4..8ecf38ded41 100644 --- a/geo-replication/src/peer_mountbroker.in +++ b/geo-replication/src/peer_mountbroker.in @@ -1,10 +1,12 @@ -#!/usr/bin/env python +#!/usr/bin/python3 + +from __future__ import print_function + import os from argparse import ArgumentParser, RawDescriptionHelpFormatter import json import sys - PROG_DESCRIPTION = """ GlusterFS Mountbroker user management """ @@ -14,19 +16,19 @@ args = None def ok(message=""): if (not args and "-j" in sys.argv) or (args and args.json): - print json.dumps({"ok": True, "message": message}) + print(json.dumps({"ok": True, "message": message})) else: if message: - print message + print(message) sys.exit(0) def notok(message=""): if (not args and "-j" in sys.argv) or (args and args.json): - print json.dumps({"ok": False, "message": message}) + print(json.dumps({"ok": False, "message": message})) else: - print "error: %s" % message + print("error: %s" % message) # Always return zero due to limitation while executing # as `gluster system:: execute` @@ -64,7 +66,7 @@ class MountbrokerUserMgmt(object): def _get_write_data(self): op = "volume management\n" op += " type mgmt/glusterd\n" - for k, v in self._options.iteritems(): + for k, v in self._options.items(): op += " option %s %s\n" % (k, v) for line in self.commented_lines: op += " %s\n" % line @@ -86,8 +88,31 @@ class MountbrokerUserMgmt(object): del(self._options[key]) def add_user(self, user, volumes): + vols = set() + for k, v in self._options.items(): + if k.startswith("mountbroker-geo-replication.") \ + and user == k.split(".")[-1]: + vols.update(v.split(",")) + + vols.update(volumes) self.set_opt("mountbroker-geo-replication.%s" % user, - ",".join(volumes)) + ",".join(vols)) + + def remove_volume(self, user, volumes): + vols = set() + for k, v in self._options.items(): + if k.startswith("mountbroker-geo-replication.") \ + and user == k.split(".")[-1]: + vols.update(v.split(",")) + + for v1 in volumes: + vols.discard(v1) + + if vols: + self.set_opt("mountbroker-geo-replication.%s" % user, + ",".join(vols)) + else: + self.remove_opt("mountbroker-geo-replication.%s" % user) def remove_user(self, user): self.remove_opt("mountbroker-geo-replication.%s" % user) @@ -95,7 +120,7 @@ class MountbrokerUserMgmt(object): def info(self): data = {"users": []} - for k, v in self._options.iteritems(): + for k, v in self._options.items(): if k.startswith("mountbroker-geo-replication."): data["users"].append( {"name": k.split(".")[-1], "volumes": v.split(",")} @@ -109,7 +134,7 @@ class MountbrokerUserMgmt(object): def format_info(data): op = "%s %s\n" % ("Option".ljust(50), "Value".ljust(50)) op += ("-" * 101) + "\n" - for key, value in data.iteritems(): + for key, value in data.items(): if key != "users": op += "%s %s\n" % (key.ljust(50), value) @@ -129,13 +154,18 @@ def _get_args(): subparsers = parser.add_subparsers(title='subcommands', dest='cmd') parser_useradd = subparsers.add_parser('user') parser_userdel = subparsers.add_parser('userdel') + parser_volumedel = subparsers.add_parser('volumedel') subparsers.add_parser('info') parser_opt = subparsers.add_parser('opt') parser_optdel = subparsers.add_parser('optdel') parser_useradd.add_argument('username', help="Username", type=str) parser_useradd.add_argument('volumes', type=str, default='', - help="Volumes list. ',' seperated") + help="Volumes list. ',' separated") + + parser_volumedel.add_argument('username', help="Username", type=str) + parser_volumedel.add_argument('volumes', type=str, default='', + help="Volumes list. ',' separated") parser_userdel.add_argument('username', help="Username", type=str) @@ -163,6 +193,10 @@ def main(): volumes = [v.strip() for v in args.volumes.split(",") if v.strip() != ""] m.add_user(args.username, volumes) + elif args.cmd == "volumedel": + volumes = [v.strip() for v in args.volumes.split(",") + if v.strip() != ""] + m.remove_volume(args.username, volumes) elif args.cmd == "info": info = m.info() if not args.json: |
