]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Add a basic heat-manage
authorAngus Salkeld <asalkeld@redhat.com>
Mon, 27 May 2013 11:06:31 +0000 (21:06 +1000)
committerAngus Salkeld <asalkeld@redhat.com>
Mon, 27 May 2013 11:06:31 +0000 (21:06 +1000)
The heat/cmd/manage.py structure is copied from glance to give
us some consistency.

Removing unused cliutils ...

blueprint heat-manage
Change-Id: If3b69eb4c3672740515fd308ec868af1cd3c9396

bin/heat-db-setup
bin/heat-manage [new file with mode: 0755]
heat/cmd/__init__.py [new file with mode: 0644]
heat/cmd/manage.py [new file with mode: 0644]
heat/db/sync.py [deleted file]
heat/openstack/common/cliutils.py [deleted file]
openstack-common.conf
setup.cfg

index c1d7bb2b6e2797c5b35e152e29690ccd41bfe963..5bb7a90a0021ec9ef4ee7c3388e6c8a46b5703e8 100755 (executable)
@@ -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 (executable)
index 0000000..1a03e17
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/heat/cmd/manage.py b/heat/cmd/manage.py
new file mode 100644 (file)
index 0000000..2e0a48d
--- /dev/null
@@ -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 (executable)
index 7d8a7a5..0000000
+++ /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 (file)
index 411bd58..0000000
+++ /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)
index 2b5cb3053693ff4bd2791dac0f1142d15b709b77..c5e551c88638035f74f8df14d16b6bebd84a85ed 100644 (file)
@@ -4,7 +4,6 @@
 module=eventlet_backdoor
 module=exception
 module=excutils
-module=cliutils
 module=gettextutils
 module=importutils
 module=install_venv_common
index e8bd2b1a93ef083a1960626c707edcd85faa88e4..d4d04ffe78a9b0ee20c76f22a135abc89cc12c45 100644 (file)
--- 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]