diff options
| author | Michael Basnight <mbasnight@gmail.com> | 2013-06-17 23:34:27 -0700 |
|---|---|---|
| committer | Michael Basnight <mbasnight@gmail.com> | 2013-06-21 20:15:23 +0000 |
| commit | 9916c8f2733b683d859770d05dacd2c9c82912d7 (patch) | |
| tree | 084a0d53580cbbd34ed8f28de9302d6c78f7050d /troveclient/mcli.py | |
| parent | bc90b3e088d3d4b83b5b3de0f9f83d9b6956947d (diff) | |
| download | python-troveclient-0.1.3.tar.gz | |
Rename from reddwarf to trove.0.1.3
Implements Blueprint reddwarf-trove-rename
Change-Id: Ib2d694c7466887ca297bea4250eca17cdc06b7bf
Diffstat (limited to 'troveclient/mcli.py')
| -rw-r--r-- | troveclient/mcli.py | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/troveclient/mcli.py b/troveclient/mcli.py new file mode 100644 index 0000000..87179c1 --- /dev/null +++ b/troveclient/mcli.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python + +# Copyright 2011 OpenStack LLC +# +# 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. + +""" +Trove Management Command line tool +""" + +import json +import optparse +import os +import sys + + +# If ../trove/__init__.py exists, add ../ to Python search path, so that +# it will override what happens to be installed in /usr/(local/)lib/python... +possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), + os.pardir, + os.pardir)) +if os.path.exists(os.path.join(possible_topdir, 'troveclient', + '__init__.py')): + sys.path.insert(0, possible_topdir) + + +from troveclient import common + + +oparser = None + + +def _pretty_print(info): + print json.dumps(info, sort_keys=True, indent=4) + + +class HostCommands(common.AuthedCommandsBase): + """Commands to list info on hosts""" + + params = [ + 'name', + ] + + def update_all(self): + """Update all instances on a host""" + self._require('name') + self.dbaas.hosts.update_all(self.name) + + def get(self): + """List details for the specified host""" + self._require('name') + self._pretty_print(self.dbaas.hosts.get, self.name) + + def list(self): + """List all compute hosts""" + self._pretty_list(self.dbaas.hosts.index) + + +class QuotaCommands(common.AuthedCommandsBase): + """List and update quota limits for a tenant.""" + + params = ['id', + 'instances', + 'volumes', + 'backups'] + + def list(self): + """List all quotas for a tenant""" + self._require('id') + self._pretty_print(self.dbaas.quota.show, self.id) + + def update(self): + """Update quota limits for a tenant""" + self._require('id') + self._pretty_print(self.dbaas.quota.update, self.id, + dict((param, getattr(self, param)) + for param in self.params if param != 'id')) + + +class RootCommands(common.AuthedCommandsBase): + """List details about the root info for an instance.""" + + params = [ + 'id', + ] + + def history(self): + """List root history for the instance.""" + self._require('id') + self._pretty_print(self.dbaas.management.root_enabled_history, self.id) + + +class AccountCommands(common.AuthedCommandsBase): + """Commands to list account info""" + + params = [ + 'id', + ] + + def list(self): + """List all accounts with non-deleted instances""" + self._pretty_print(self.dbaas.accounts.index) + + def get(self): + """List details for the account provided""" + self._require('id') + self._pretty_print(self.dbaas.accounts.show, self.id) + + +class InstanceCommands(common.AuthedCommandsBase): + """List details about an instance.""" + + params = [ + 'deleted', + 'id', + 'limit', + 'marker', + 'host', + ] + + def get(self): + """List details for the instance.""" + self._require('id') + self._pretty_print(self.dbaas.management.show, self.id) + + def list(self): + """List all instances for account""" + deleted = None + if self.deleted is not None: + if self.deleted.lower() in ['true']: + deleted = True + elif self.deleted.lower() in ['false']: + deleted = False + self._pretty_paged(self.dbaas.management.index, deleted=deleted) + + def hwinfo(self): + """Show hardware information details about an instance.""" + self._require('id') + self._pretty_print(self.dbaas.hwinfo.get, self.id) + + def diagnostic(self): + """List diagnostic details about an instance.""" + self._require('id') + self._pretty_print(self.dbaas.diagnostics.get, self.id) + + def stop(self): + """Stop MySQL on the given instance.""" + self._require('id') + self._pretty_print(self.dbaas.management.stop, self.id) + + def reboot(self): + """Reboot the instance.""" + self._require('id') + self._pretty_print(self.dbaas.management.reboot, self.id) + + def migrate(self): + """Migrate the instance.""" + self._require('id') + self._pretty_print(self.dbaas.management.migrate, self.id, self.host) + + def reset_task_status(self): + """Set the instance's task status to NONE.""" + self._require('id') + self._pretty_print(self.dbaas.management.reset_task_status, self.id) + + +class StorageCommands(common.AuthedCommandsBase): + """Commands to list devices info""" + + params = [] + + def list(self): + """List details for the storage device""" + self._pretty_list(self.dbaas.storage.index) + + +def config_options(oparser): + oparser.add_option("-u", "--url", default="http://localhost:5000/v1.1", + help="Auth API endpoint URL with port and version. \ + Default: http://localhost:5000/v1.1") + + +COMMANDS = {'account': AccountCommands, + 'host': HostCommands, + 'instance': InstanceCommands, + 'root': RootCommands, + 'storage': StorageCommands, + 'quota': QuotaCommands, + } + + +def main(): + # Parse arguments + oparser = common.CliOptions.create_optparser(True) + for k, v in COMMANDS.items(): + v._prepare_parser(oparser) + (options, args) = oparser.parse_args() + + if not args: + common.print_commands(COMMANDS) + + # Pop the command and check if it's in the known commands + cmd = args.pop(0) + if cmd in COMMANDS: + fn = COMMANDS.get(cmd) + command_object = None + try: + command_object = fn(oparser) + except Exception as ex: + if options.debug: + raise + print(ex) + + # Get a list of supported actions for the command + actions = common.methods_of(command_object) + + if len(args) < 1: + common.print_actions(cmd, actions) + + # Check for a valid action and perform that action + action = args.pop(0) + if action in actions: + try: + getattr(command_object, action)() + except Exception as ex: + if options.debug: + raise + print ex + else: + common.print_actions(cmd, actions) + else: + common.print_commands(COMMANDS) + + +if __name__ == '__main__': + main() |
