From: Angus Salkeld Date: Mon, 27 May 2013 11:06:31 +0000 (+1000) Subject: Add a basic heat-manage X-Git-Tag: 2014.1~547^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=126bf9f28caf5e9015844b3d8acffb9abf77873c;p=openstack-build%2Fheat-build.git Add a basic heat-manage The heat/cmd/manage.py structure is copied from glance to give us some consistency. Removing unused cliutils ... blueprint heat-manage Change-Id: If3b69eb4c3672740515fd308ec868af1cd3c9396 --- diff --git a/bin/heat-db-setup b/bin/heat-db-setup index c1d7bb2b..5bb7a90a 100755 --- a/bin/heat-db-setup +++ b/bin/heat-db-setup @@ -249,7 +249,7 @@ if [ "${MYSQL_HEAT_PW}" != "${MYSQL_HEAT_PW_DEFAULT}" ] ; then sed -i -e "s/mysql:\/\/heat:\(.*\)@/mysql:\/\/heat:${MYSQL_HEAT_PW}@/" ${HEAT_CONFIG} fi -python -m heat.db.sync +heat-manage db_sync # Do a final sanity check on the database. diff --git a/bin/heat-manage b/bin/heat-manage new file mode 100755 index 00000000..1a03e17a --- /dev/null +++ b/bin/heat-manage @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# 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. + + +from heat.cmd import manage + +manage.main() diff --git a/heat/cmd/__init__.py b/heat/cmd/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/heat/cmd/manage.py b/heat/cmd/manage.py new file mode 100644 index 00000000..2e0a48d0 --- /dev/null +++ b/heat/cmd/manage.py @@ -0,0 +1,76 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# All Rights Reserved. +# +# 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. + +""" + CLI interface for heat management. +""" + +import sys + +from oslo.config import cfg + +from heat.db import api as db_api +from heat.db import migration +from heat.openstack.common import log +from heat import version + + +CONF = cfg.CONF + + +def do_db_version(): + """Print database's current migration level.""" + print migration.db_version() + + +def do_db_sync(): + """ + Place a database under migration control and upgrade, + creating first if necessary. + """ + migration.db_sync(CONF.command.version) + + +def add_command_parsers(subparsers): + parser = subparsers.add_parser('db_version') + parser.set_defaults(func=do_db_version) + + parser = subparsers.add_parser('db_sync') + parser.set_defaults(func=do_db_sync) + parser.add_argument('version', nargs='?') + parser.add_argument('current_version', nargs='?') + + +command_opt = cfg.SubCommandOpt('command', + title='Commands', + help='Available commands', + handler=add_command_parsers) + + +def main(): + CONF.register_cli_opt(command_opt) + try: + CONF(sys.argv[1:], project='heat', + version=version.version_info.version_string()) + log.setup("heat") + db_api.configure() + except RuntimeError as e: + sys.exit("ERROR: %s" % e) + + try: + CONF.command.func() + except Exception as e: + sys.exit("ERROR: %s" % e) diff --git a/heat/db/sync.py b/heat/db/sync.py deleted file mode 100755 index 7d8a7a5b..00000000 --- a/heat/db/sync.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# -# 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. - -import gettext - -import sys - -gettext.install('heat', unicode=1) - -from oslo.config import cfg -from heat.openstack.common import log as logging -from heat.db import api -from heat.db import migration - - -LOG = logging.getLogger(__name__) - - -if __name__ == '__main__': - cfg.CONF(project='heat', prog='heat-engine') - - api.configure() - - try: - migration.db_sync() - except Exception as exc: - print >>sys.stderr, str(exc) - sys.exit(1) diff --git a/heat/openstack/common/cliutils.py b/heat/openstack/common/cliutils.py deleted file mode 100644 index 411bd58f..00000000 --- a/heat/openstack/common/cliutils.py +++ /dev/null @@ -1,63 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# Copyright 2012 Red Hat, Inc. -# -# 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. - -import inspect - - -class MissingArgs(Exception): - - def __init__(self, missing): - self.missing = missing - - def __str__(self): - if len(self.missing) == 1: - return "An argument is missing" - else: - return ("%(num)d arguments are missing" % - dict(num=len(self.missing))) - - -def validate_args(fn, *args, **kwargs): - """Check that the supplied args are sufficient for calling a function. - - >>> validate_args(lambda a: None) - Traceback (most recent call last): - ... - MissingArgs: An argument is missing - >>> validate_args(lambda a, b, c, d: None, 0, c=1) - Traceback (most recent call last): - ... - MissingArgs: 2 arguments are missing - - :param fn: the function to check - :param arg: the positional arguments supplied - :param kwargs: the keyword arguments supplied - """ - argspec = inspect.getargspec(fn) - - num_defaults = len(argspec.defaults or []) - required_args = argspec.args[:len(argspec.args) - num_defaults] - - def isbound(method): - return getattr(method, 'im_self', None) is not None - - if isbound(fn): - required_args.pop(0) - - missing = [arg for arg in required_args if arg not in kwargs] - missing = missing[len(args):] - if missing: - raise MissingArgs(missing) diff --git a/openstack-common.conf b/openstack-common.conf index 2b5cb305..c5e551c8 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -4,7 +4,6 @@ module=eventlet_backdoor module=exception module=excutils -module=cliutils module=gettextutils module=importutils module=install_venv_common diff --git a/setup.cfg b/setup.cfg index e8bd2b1a..d4d04ffe 100644 --- a/setup.cfg +++ b/setup.cfg @@ -31,6 +31,7 @@ scripts = bin/heat-db-setup bin/heat-engine bin/heat-keystone-setup + bin/heat-manage bin/heat-watch [global]