74 lines
1.6 KiB
Python
Executable File
74 lines
1.6 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
from kazoo.client import KazooClient
|
|
import argparse
|
|
import re
|
|
import sys
|
|
|
|
# Parse args
|
|
parser = argparse.ArgumentParser(description="""
|
|
Remove all childrens started with pattern(regexp is supported too).
|
|
|
|
|
|
USE THIS AT YOUR OWN RISK! THIS SOFTWARE MAY CONTAIN BUGS,
|
|
AND MAY DESTROY YOUR DATA AND KILL YOUR PARENTS,
|
|
EVEN IF USED CORRECTLY. YOU HAVE BEEN WARNED!
|
|
""")
|
|
parser.add_argument('--zk', help='Zookeeper hosts: node1:2181,node2:2181',
|
|
default='localhost:2181')
|
|
parser.add_argument('--path', help='Zookeeper path: /my/path/to',
|
|
default='/THIS_PATH_IS_NOT_EXISTS')
|
|
parser.add_argument('--child', help='Zookeeper child name start pattern: hell')
|
|
parser.add_argument('--regex', help='PCRE expression')
|
|
args = parser.parse_args()
|
|
|
|
|
|
def prepare_args():
|
|
path = args.path
|
|
|
|
# Remove / from path
|
|
if re.match('.+(/)$', path):
|
|
path = path[:-1]
|
|
|
|
# prepare regex
|
|
regex = None
|
|
if args.regex is not None:
|
|
regex = re.compile(args.regex)
|
|
|
|
return path, regex
|
|
|
|
|
|
def remove(child):
|
|
node = path + '/' + child
|
|
if regex is not None:
|
|
if regex.match(child):
|
|
rmr(node, child)
|
|
else:
|
|
if child.startswith(args.child):
|
|
rmr(node, child)
|
|
|
|
|
|
def rmr(node, child):
|
|
print('Found ' + child)
|
|
print('Delete ' + node)
|
|
try:
|
|
zk.delete(node)
|
|
except Exception as e:
|
|
print(str(e))
|
|
sys.exit(2)
|
|
|
|
|
|
zk = KazooClient(hosts=args.zk)
|
|
zk.start()
|
|
|
|
path, regex = prepare_args()
|
|
|
|
# Do it
|
|
try:
|
|
for child in zk.get_children(path):
|
|
remove(child)
|
|
except:
|
|
print('E: path ' + path + ' is not found')
|
|
|
|
zk.stop()
|