From c1783221873845d072b739c7ebd8d0a75fe00bb9 Mon Sep 17 00:00:00 2001 From: Yao Lu Date: Fri, 23 Dec 2016 11:39:53 +0800 Subject: use command escalator version and tox genconfig Change-Id: I78e15e4224b362c6737786a7f6a7d127b82596ce Signed-off-by: Yao Lu --- api/escalator/api/v1/router.py | 8 ++ api/escalator/api/v1/versions.py | 87 +++++++++++++++++++++ api/etc/oslo-config-generator/escalator-api.conf | 11 ++- api/setup.cfg | 2 +- client/escalatorclient/v1/client.py | 2 +- client/escalatorclient/v1/shell.py | 98 +----------------------- client/escalatorclient/v1/versions.py | 80 +------------------ 7 files changed, 106 insertions(+), 182 deletions(-) create mode 100644 api/escalator/api/v1/versions.py diff --git a/api/escalator/api/v1/router.py b/api/escalator/api/v1/router.py index 54b09c4..e1709ca 100644 --- a/api/escalator/api/v1/router.py +++ b/api/escalator/api/v1/router.py @@ -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 index 0000000..a026dc1 --- /dev/null +++ b/api/escalator/api/v1/versions.py @@ -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) diff --git a/api/etc/oslo-config-generator/escalator-api.conf b/api/etc/oslo-config-generator/escalator-api.conf index 7f3bd46..0a42a8a 100644 --- a/api/etc/oslo-config-generator/escalator-api.conf +++ b/api/etc/oslo-config-generator/escalator-api.conf @@ -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 diff --git a/api/setup.cfg b/api/setup.cfg index f568387..21c80a2 100644 --- a/api/setup.cfg +++ b/api/setup.cfg @@ -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] diff --git a/client/escalatorclient/v1/client.py b/client/escalatorclient/v1/client.py index f74300f..d5bf6bc 100644 --- a/client/escalatorclient/v1/client.py +++ b/client/escalatorclient/v1/client.py @@ -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) diff --git a/client/escalatorclient/v1/shell.py b/client/escalatorclient/v1/shell.py index fbc2459..401ad76 100644 --- a/client/escalatorclient/v1/shell.py +++ b/client/escalatorclient/v1/shell.py @@ -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='', - 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='', - help='name of version.') -@utils.arg('type', metavar='', - help='version type.eg redhat7.0...') -@utils.arg('--size', metavar='', - help='size of the version file.') -@utils.arg('--checksum', metavar='', - help='md5 of version file') -@utils.arg('--version', metavar='', - help='version number of version file') -@utils.arg('--description', metavar='', - help='description of version file') -@utils.arg('--status', metavar='', - 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='', - help='ID of versions.') -@utils.arg('--name', metavar='', - help='name of version.') -@utils.arg('--type', metavar='', - help='version type.eg redhat7.0...') -@utils.arg('--size', metavar='', - help='size of the version file.') -@utils.arg('--checksum', metavar='', - help='md5 of version file') -@utils.arg('--version', metavar='', - help='version number of version file') -@utils.arg('--description', metavar='', - help='description of version file') -@utils.arg('--status', metavar='', - 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='', 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='', help='Filter version to those that have this name.') @utils.arg('--status', metavar='', @@ -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='', - 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) diff --git a/client/escalatorclient/v1/versions.py b/client/escalatorclient/v1/versions.py index f98a3ed..143c4c6 100644 --- a/client/escalatorclient/v1/versions.py +++ b/client/escalatorclient/v1/versions.py @@ -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) -- cgit 1.2.3-korg