144 lines
5.1 KiB
Python
Executable File
144 lines
5.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# -*- encoding: utf-8 -*-
|
|
import argparse
|
|
import logging
|
|
import os
|
|
import pickle
|
|
import sys
|
|
|
|
import eventlet
|
|
from keystoneclient.v2_0 import client as ksclient
|
|
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
from swsync import filler
|
|
from swsync import utils
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(prog='swift-filler',
|
|
add_help=True)
|
|
parser.add_argument('--delete',
|
|
action='store_true',
|
|
help='Suppress created accounts/users')
|
|
parser.add_argument('--create',
|
|
action='store_true',
|
|
help='Create account/users/containers/data')
|
|
parser.add_argument('-l',
|
|
action='store_true',
|
|
help='Load previous indexes and append newly'
|
|
' created to it')
|
|
parser.add_argument('-a',
|
|
help='Specify account amount')
|
|
parser.add_argument('-u',
|
|
help='Specify user amount by account')
|
|
parser.add_argument('-c',
|
|
help='Specify container amount by account')
|
|
parser.add_argument('-f',
|
|
help='Specify file amount by account')
|
|
parser.add_argument('-s',
|
|
help='Specify the MAX file size. Files '
|
|
'will be from 1024 Bytes to MAX Bytes')
|
|
parser.add_argument('-d', '--log-level',
|
|
dest='log_level',
|
|
default='info',
|
|
help='Specify the log level')
|
|
parser.add_argument('--config',
|
|
dest='config',
|
|
help='Optional configuration file path')
|
|
args = parser.parse_args()
|
|
|
|
utils.set_logging(args.log_level)
|
|
|
|
if args.config and os.path.isfile(args.config):
|
|
try:
|
|
conf = utils.parse_ini(args.config)
|
|
except Exception, exc:
|
|
logging.info('Unable to parse provided conf file')
|
|
logging.error(exc)
|
|
sys.exit(1)
|
|
else:
|
|
try:
|
|
conf = utils.parse_ini()
|
|
except(utils.ConfigurationError):
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
utils.CONFIG = conf
|
|
|
|
if not args.create and not args.delete:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
if args.create and args.delete:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
sw_c_concu = int(utils.get_config('concurrency',
|
|
'filler_swift_client_concurrency'))
|
|
ks_c_concu = int(utils.get_config('concurrency',
|
|
'filler_keystone_client_concurrency'))
|
|
pile = eventlet.GreenPile(sw_c_concu)
|
|
pool = eventlet.GreenPool(ks_c_concu)
|
|
|
|
_config = utils.get_config('auth',
|
|
'keystone_origin_admin_credentials').split(':')
|
|
tenant_name, username, password = _config
|
|
client = ksclient.Client(
|
|
auth_url=utils.get_config('auth', 'keystone_origin'),
|
|
username=username,
|
|
password=password,
|
|
tenant_name=tenant_name)
|
|
|
|
index_path = utils.get_config('filler', 'index_path')
|
|
index_containers_path = utils.get_config('filler', 'index_containers_path')
|
|
|
|
if args.l:
|
|
index = filler.load_index()
|
|
index_containers = filler.load_containers_index()
|
|
else:
|
|
index = {}
|
|
index_containers = {}
|
|
if args.create:
|
|
if args.a is None or not args.a.isdigit():
|
|
logging.info("Provide account amount by setting '-a' option")
|
|
sys.exit(1)
|
|
if args.u is None or not args.u.isdigit():
|
|
logging.info("Provide user by account "
|
|
"amount by setting '-u' option")
|
|
sys.exit(1)
|
|
if args.s is None:
|
|
fmax = 1024
|
|
else:
|
|
if args.s.isdigit():
|
|
fmax = max(1024, int(args.s))
|
|
else:
|
|
fmax = 1024
|
|
created = filler.create_swift_account(client, pile,
|
|
int(args.a),
|
|
int(args.u), index=index)
|
|
if args.f is not None and args.c is not None:
|
|
if args.f.isdigit() and args.c.isdigit():
|
|
filler.fill_swift(pool, created, int(args.c),
|
|
int(args.f), fmax,
|
|
index_containers=index_containers)
|
|
else:
|
|
logging.info("'-c' and '-f' options must be integers")
|
|
sys.exit(1)
|
|
pickle.dump(index, open(index_path, 'w'))
|
|
pickle.dump(index_containers, open(index_containers_path, 'w'))
|
|
if args.delete:
|
|
index = filler.load_index()
|
|
for k, v in index.items():
|
|
user_info_list = [user[1] for user in v]
|
|
# Take the first user we find
|
|
filler.delete_account_content(k, v[0])
|
|
filler.delete_account(client, user_info_list, k)
|
|
del index[k]
|
|
if not os.path.exists(index_path):
|
|
logging.info("No index_path to load.")
|
|
sys.exit(1)
|
|
pickle.dump(index, open(index_path, 'w'))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|