summaryrefslogtreecommitdiff
path: root/troveclient/mcli.py
diff options
context:
space:
mode:
Diffstat (limited to 'troveclient/mcli.py')
-rw-r--r--troveclient/mcli.py246
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()