From 905b0231e93ce2409a45dd6c4f5f983689fdb790 Mon Sep 17 00:00:00 2001 From: Harry Huang Date: Wed, 1 Nov 2017 11:56:50 +0800 Subject: Add compass-deck RESTful API and DB Handlers for Compass Change-Id: I1ce411f279943764c286ea48dca9185d453cf254 Signed-off-by: Harry Huang --- compass-deck/bin/manage_db.py | 165 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100755 compass-deck/bin/manage_db.py (limited to 'compass-deck/bin/manage_db.py') diff --git a/compass-deck/bin/manage_db.py b/compass-deck/bin/manage_db.py new file mode 100755 index 0000000..3e56433 --- /dev/null +++ b/compass-deck/bin/manage_db.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +# +# Copyright 2014 Huawei Technologies Co. Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""utility binary to manage database.""" +import os +import os.path +import sys + + +current_dir = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(current_dir) + + +import switch_virtualenv + +from flask.ext.script import Manager + +from compass.api import app +from compass.db.api import database +from compass.db.api import switch as switch_api +from compass.db.api import user as user_api +from compass.utils import flags +from compass.utils import logsetting +from compass.utils import setting_wrapper as setting +from compass.utils import util + + +flags.add('table_name', + help='table name', + default='') +flags.add('clusters', + help=( + 'clusters and hosts of each cluster, the format is as ' + 'clusterid:hostname1,hostname2,...;...'), + default='') +flags.add_bool('async', + help='ryn in async mode', + default=True) +flags.add('switch_machines_file', + help=( + 'files for switches and machines ' + 'connected to each switch. each line in the file ' + 'is machine,,,, ' + 'or switch,,,' + ',,'), + default='') +flags.add('search_cluster_properties', + help='comma separated properties to search in cluster config', + default='') +flags.add('print_cluster_properties', + help='comma separated cluster config properties to print', + default='') +flags.add('search_host_properties', + help='comma separated properties to search in host config', + default='') +flags.add('print_host_properties', + help='comma separated host config properties to print', + default='') + + +app_manager = Manager(app, usage="Perform database operations") + + +TABLE_MAPPING = { +} + + +@app_manager.command +def list_config(): + "List the commands." + for key, value in app.config.items(): + print key, value + + +@app_manager.command +def checkdb(): + """check if db exists.""" + if setting.DATABASE_TYPE == 'file': + if os.path.exists(setting.DATABASE_FILE): + sys.exit(0) + else: + sys.exit(1) + + sys.exit(0) + + +@app_manager.command +def createdb(): + """Creates database from sqlalchemy models.""" + database.init() + try: + database.drop_db() + except Exception: + pass + + if setting.DATABASE_TYPE == 'file': + if os.path.exists(setting.DATABASE_FILE): + os.remove(setting.DATABASE_FILE) + database.create_db() + if setting.DATABASE_TYPE == 'file': + os.chmod(setting.DATABASE_FILE, 0o777) + + +@app_manager.command +def dropdb(): + """Drops database from sqlalchemy models.""" + database.init() + database.drop_db() + + +@app_manager.command +def set_switch_machines(): + """Set switches and machines. + + .. note:: + --switch_machines_file is the filename which stores all switches + and machines information. + each line in fake_switches_files presents one machine. + the format of each line machine,,,, + or switch,,,, + , + """ + if not flags.OPTIONS.switch_machines_file: + print 'flag --switch_machines_file is missing' + return + database.init() + switches, switch_machines = util.get_switch_machines_from_file( + flags.OPTIONS.switch_machines_file) + user = user_api.get_user_object( + setting.COMPASS_ADMIN_EMAIL + ) + switch_mapping = {} + for switch in switches: + added_switch = switch_api.add_switch( + False, user=user, **switch + ) + switch_mapping[switch['ip']] = added_switch['id'] + for switch_ip, machines in switch_machines.items(): + if switch_ip not in switch_mapping: + print 'switch ip %s not found' % switch_ip + sys.exit(1) + switch_id = switch_mapping[switch_ip] + for machine in machines: + switch_api.add_switch_machine( + switch_id, False, user=user, **machine + ) + + +if __name__ == "__main__": + flags.init() + logsetting.init() + app_manager.run() -- cgit 1.2.3-korg