use command escalator version and tox genconfig 55/26455/13
authorYao Lu <lu.yao135@zte.com.cn>
Fri, 23 Dec 2016 03:39:53 +0000 (11:39 +0800)
committerYao Lu <lu.yao135@zte.com.cn>
Fri, 3 Mar 2017 07:24:04 +0000 (07:24 +0000)
Change-Id: I78e15e4224b362c6737786a7f6a7d127b82596ce
Signed-off-by: Yao Lu <lu.yao135@zte.com.cn>
api/escalator/api/v1/router.py
api/escalator/api/v1/versions.py [new file with mode: 0644]
api/etc/oslo-config-generator/escalator-api.conf
api/setup.cfg
client/escalatorclient/v1/client.py
client/escalatorclient/v1/shell.py
client/escalatorclient/v1/versions.py

index 54b09c4..e1709ca 100644 (file)
@@ -13,6 +13,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 from escalator.common import wsgi
+from escalator.api.v1 import versions
 
 
 class API(wsgi.Router):
@@ -22,4 +23,11 @@ class API(wsgi.Router):
     def __init__(self, mapper):
         wsgi.Resource(wsgi.RejectMethodController())
 
+        versions_resource = versions.create_resource()
+
+        mapper.connect("/versions",
+                       controller=versions_resource,
+                       action='version',
+                       conditions={'method': ['POST']})
+
         super(API, self).__init__(mapper)
diff --git a/api/escalator/api/v1/versions.py b/api/escalator/api/v1/versions.py
new file mode 100644 (file)
index 0000000..a026dc1
--- /dev/null
@@ -0,0 +1,87 @@
+# Copyright 2013 OpenStack Foundation
+# 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.
+
+"""
+/hosts endpoint for Escalator v1 API
+"""
+from oslo_log import log as logging
+from escalator import i18n
+from escalator import notifier
+from escalator.common import utils
+from escalator.common import wsgi
+from escalator.version import version_info
+
+
+LOG = logging.getLogger(__name__)
+_ = i18n._
+_LE = i18n._LE
+_LI = i18n._LI
+_LW = i18n._LW
+
+
+class Controller():
+    """
+    WSGI controller for hosts resource in Escalator v1 API
+
+    """
+    def __init__(self):
+        self.notifier = notifier.Notifier()
+
+    @utils.mutating
+    def version(self, req, version):
+        """
+        Get version of esclator.
+        :param req: The WSGI/Webob Request object
+        """
+        if version.get('type') == 'pbr':
+            return {"escalator_version":
+                    version_info.version_string_with_vcs()}
+        else:
+            # reserved for external version
+            return {"escalator_version": '1.0.0-1.1.0'}
+
+
+class VersionDeserializer(wsgi.JSONRequestDeserializer):
+    """Handles deserialization of specific controller method requests."""
+
+    def _deserialize(self, request):
+        result = {}
+        result['file_meta'] = utils.get_dict_meta(request)
+        return result
+
+    def version(self, request):
+        result = {}
+        result['version'] = utils.get_dict_meta(request)
+        return result
+
+
+class VersionSerializer(wsgi.JSONResponseSerializer):
+    """Handles serialization of specific controller method responses."""
+
+    def __init__(self):
+        self.notifier = notifier.Notifier()
+
+    def version(self, response, result):
+        response.status = 201
+        response.headers['Content-Type'] = 'application/json'
+        response.body = self.to_json(result)
+        return response
+
+
+def create_resource():
+    """Version resource factory method"""
+    deserializer = VersionDeserializer()
+    serializer = VersionSerializer()
+    return wsgi.Resource(Controller(), deserializer, serializer)
index 7f3bd46..0a42a8a 100644 (file)
@@ -1,10 +1,9 @@
 [DEFAULT]
 output_file = etc/escalator-api.conf.sample
 namespace = escalator.api
-namespace = oslo_concurrency
-namespace = oslo_messaging
-namespace = oslo_db
-namespace = oslo_db.concurrency
-namespace = oslo_policy
+namespace = oslo.concurrency
+namespace = oslo.db
+namespace = oslo.db.concurrency
+namespace = oslo.policy
 namespace = keystoneclient.middleware.auth_token
-namespace = oslo_log
+namespace = oslo.log
index f568387..21c80a2 100644 (file)
@@ -27,7 +27,7 @@ setup-hooks =
 [entry_points]
 console_scripts =
         escalator-api = escalator.cmd.api:main
-oslo_config.opts =
+oslo.config.opts =
         escalator.api = escalator.opts:list_api_opts
 
 [build_sphinx]
index f74300f..d5bf6bc 100644 (file)
@@ -33,4 +33,4 @@ class Client(object):
         endpoint, version = utils.strip_version(endpoint)
         self.version = version or 1.0
         self.http_client = http.HTTPClient(endpoint, *args, **kwargs)
-        self.node = VersionManager(self.http_client)
+        self.versions = VersionManager(self.http_client)
index fbc2459..401ad76 100644 (file)
@@ -17,11 +17,9 @@ from __future__ import print_function
 
 import copy
 import functools
-from oslo_utils import encodeutils
 from oslo_utils import strutils
 import escalatorclient.v1.versions
 from escalatorclient.common import utils
-from escalatorclient import exc
 
 _bool_strict = functools.partial(strutils.bool_from_string, strict=True)
 
@@ -43,96 +41,12 @@ def do_version(dc, args):
     fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
 
     # Filter out values we can't use
-    VERSION_PARAMS = escalatorclient.v1.version.VERSION_PARAMS
+    VERSION_PARAMS = escalatorclient.v1.versions.VERSION_PARAMS
     fields = dict(filter(lambda x: x[0] in VERSION_PARAMS, fields.items()))
-    version = dc.version.version(**fields)
+    version = dc.versions.version(**fields)
     _escalator_show(version)
 
 
-@utils.arg('id', metavar='<ID>',
-           help='Filter version to those that have this id.')
-def do_version_detail(dc, args):
-    """Get backend_types of escalator."""
-    version = utils.find_resource(dc.versions, args.id)
-    _escalator_show(version)
-
-
-@utils.arg('name', metavar='<NAME>',
-           help='name of version.')
-@utils.arg('type', metavar='<TYPE>',
-           help='version type.eg redhat7.0...')
-@utils.arg('--size', metavar='<SIZE>',
-           help='size of the version file.')
-@utils.arg('--checksum', metavar='<CHECKSUM>',
-           help='md5 of version file')
-@utils.arg('--version', metavar='<VERSION>',
-           help='version number of version file')
-@utils.arg('--description', metavar='<DESCRIPTION>',
-           help='description of version file')
-@utils.arg('--status', metavar='<STATUS>',
-           help='version file status.default:init')
-def do_version_add(dc, args):
-    """Add a version."""
-
-    fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
-
-    # Filter out values we can't use
-    CREATE_PARAMS = escalatorclient.v1.versions.CREATE_PARAMS
-    fields = dict(filter(lambda x: x[0] in CREATE_PARAMS, fields.items()))
-
-    version = dc.versions.add(**fields)
-    _escalator_show(version)
-
-
-@utils.arg('id', metavar='<ID>',
-           help='ID of versions.')
-@utils.arg('--name', metavar='<NAME>',
-           help='name of version.')
-@utils.arg('--type', metavar='<TYPE>',
-           help='version type.eg redhat7.0...')
-@utils.arg('--size', metavar='<SIZE>',
-           help='size of the version file.')
-@utils.arg('--checksum', metavar='<CHECKSUM>',
-           help='md5 of version file')
-@utils.arg('--version', metavar='<VERSION>',
-           help='version number of version file')
-@utils.arg('--description', metavar='<DESCRIPTION>',
-           help='description of version file')
-@utils.arg('--status', metavar='<STATUS>',
-           help='version file status.default:init')
-def do_version_update(dc, args):
-    """Add a version."""
-
-    fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
-
-    # Filter out values we can't use
-    CREATE_PARAMS = escalatorclient.v1.versions.CREATE_PARAMS
-    fields = dict(filter(lambda x: x[0] in CREATE_PARAMS, fields.items()))
-    version_id = fields.get('id', None)
-    version = dc.versions.update(version_id, **fields)
-    _escalator_show(version)
-
-
-@utils.arg('id', metavar='<ID>', nargs='+',
-           help='ID of versions.')
-def do_version_delete(dc, args):
-    """Delete specified template(s)."""
-    fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
-    versions = fields.get('id', None)
-    for version in versions:
-        try:
-            if args.verbose:
-                print('Requesting version delete for %s ...' %
-                      encodeutils.safe_decode(version), end=' ')
-            dc.versions.delete(version)
-            if args.verbose:
-                print('[Done]')
-        except exc.HTTPException as e:
-            if args.verbose:
-                print('[Fail]')
-            print('%s: Unable to delete version %s' % (e, version))
-
-
 @utils.arg('--name', metavar='<NAME>',
            help='Filter version to those that have this name.')
 @utils.arg('--status', metavar='<STATUS>',
@@ -168,11 +82,3 @@ def do_cluster_version_list(dc, args):
                'checksum', 'description', 'status', 'VERSION_PATCH']
 
     utils.print_list(versions, columns)
-
-
-@utils.arg('id', metavar='<ID>',
-           help='Filter version patch to those that have this id.')
-def do_version_patch_detail(dc, args):
-    """Get version_patch of escalator."""
-    version = utils.find_resource(dc.version_patchs, args.id)
-    _escalator_show(version)
index f98a3ed..143c4c6 100644 (file)
@@ -105,23 +105,6 @@ class VersionManager(base.ManagerWithFind):
                     pass
         return meta
 
-    def get(self, version, **kwargs):
-        """Get the metadata for a specific version.
-
-        :param version: image object or id to look up
-        :rtype: :class:`version`
-        """
-        version_id = base.getid(version)
-        resp, body = self.client.get('/v1/versions/%s'
-                                     % urlparse.quote(str(version_id)))
-        # meta = self._version_meta_from_headers(resp.headers)
-        return_request_id = kwargs.get('return_req_id', None)
-        if return_request_id is not None:
-            return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
-        # return version(self, meta)
-        return Version(self, self._format_version_meta_for_user(
-            body['version']))
-
     def _build_params(self, parameters):
         params = {'limit': parameters.get('page_size', DEFAULT_PAGE_SIZE)}
 
@@ -223,65 +206,6 @@ class VersionManager(base.ManagerWithFind):
             params['marker'] = last_version
             seen_last_page = 0
 
-    def add(self, **kwargs):
-        """Add a version
-
-        TODO(bcwaldon): document accepted params
-        """
-
-        fields = {}
-        for field in kwargs:
-            if field in CREATE_PARAMS:
-                fields[field] = kwargs[field]
-            elif field == 'return_req_id':
-                continue
-            else:
-                msg = 'create() got an unexpected keyword argument \'%s\''
-                raise TypeError(msg % field)
-
-        hdrs = self._version_meta_to_headers(fields)
-
-        resp, body = self.client.post('/v1/versions',
-                                      headers=None,
-                                      data=hdrs)
-        return_request_id = kwargs.get('return_req_id', None)
-        if return_request_id is not None:
-            return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
-
-        return Version(self, self._format_version_meta_for_user(
-            body['version']))
-
-    def delete(self, version, **kwargs):
-        """Delete an version."""
-        url = "/v1/versions/%s" % base.getid(version)
-        resp, body = self.client.delete(url)
-        return_request_id = kwargs.get('return_req_id', None)
-        if return_request_id is not None:
-            return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
-
-    def update(self, version, **kwargs):
-        """Update an version
-
-        TODO(bcwaldon): document accepted params
-        """
-        hdrs = {}
-        fields = {}
-        for field in kwargs:
-            if field in CREATE_PARAMS:
-                fields[field] = kwargs[field]
-            elif field == 'return_req_id':
-                continue
-        hdrs.update(self._version_meta_to_headers(fields))
-
-        url = '/v1/versions/%s' % base.getid(version)
-        resp, body = self.client.put(url, headers=None, data=hdrs)
-        return_request_id = kwargs.get('return_req_id', None)
-        if return_request_id is not None:
-            return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
-
-        return Version(self, self._format_version_meta_for_user(
-            body['version_meta']))
-
     def version(self, **kwargs):
         """Get internal or external version of escalator.
 
@@ -295,7 +219,7 @@ class VersionManager(base.ManagerWithFind):
                 msg = 'install() got an unexpected keyword argument \'%s\''
                 raise TypeError(msg % field)
 
-        url = '/v1/version'
-        hdrs = self._restore_meta_to_headers(fields)
+        url = '/v1/versions'
+        hdrs = self._version_meta_to_headers(fields)
         resp, body = self.client.post(url, headers=None, data=hdrs)
         return Version(self, body)