eaddb942fd
This is the first of several patches to add new Cluster commands that will replace the Bay terminalogy in Magnum. This patch adds the new Cluster and ClusterTemplate commands in addition to the Bay and Baymodel commands. Additional patches will be created for client, docs, and additional functional tests. Change-Id: Ie686281a6f98a1a9931158d2a79eee6ac21ed9a1 Implements: blueprint rename-bay-to-cluster
107 lines
3.2 KiB
Python
107 lines
3.2 KiB
Python
# Copyright 2012 New Dream Network, LLC (DreamHost)
|
|
#
|
|
# 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 pecan
|
|
from pecan import rest
|
|
from wsme import types as wtypes
|
|
|
|
from magnum.api.controllers import base
|
|
from magnum.api.controllers import link
|
|
from magnum.api.controllers import v1
|
|
from magnum.api.controllers import versions
|
|
from magnum.api import expose
|
|
|
|
|
|
class Version(base.APIBase):
|
|
"""An API version representation."""
|
|
|
|
id = wtypes.text
|
|
"""The ID of the version, also acts as the release number"""
|
|
|
|
links = [link.Link]
|
|
"""A Link that point to a specific version of the API"""
|
|
|
|
status = wtypes.text
|
|
"""The current status of the version: CURRENT, SUPPORTED, UNSUPPORTED"""
|
|
|
|
max_version = wtypes.text
|
|
"""The max microversion supported by this version"""
|
|
|
|
min_version = wtypes.text
|
|
"""The min microversion supported by this version"""
|
|
|
|
@staticmethod
|
|
def convert(id, status, max, min):
|
|
version = Version()
|
|
version.id = id
|
|
version.links = [link.Link.make_link('self', pecan.request.host_url,
|
|
id, '', bookmark=True)]
|
|
version.status = status
|
|
version.max_version = max
|
|
version.min_version = min
|
|
return version
|
|
|
|
|
|
class Root(base.APIBase):
|
|
|
|
name = wtypes.text
|
|
"""The name of the API"""
|
|
|
|
description = wtypes.text
|
|
"""Some information about this API"""
|
|
|
|
versions = [Version]
|
|
"""Links to all the versions available in this API"""
|
|
|
|
@staticmethod
|
|
def convert():
|
|
root = Root()
|
|
root.name = "OpenStack Magnum API"
|
|
root.description = ("Magnum is an OpenStack project which aims to "
|
|
"provide container cluster management.")
|
|
root.versions = [Version.convert('v1', "CURRENT",
|
|
versions.CURRENT_MAX_VER,
|
|
versions.BASE_VER)]
|
|
return root
|
|
|
|
|
|
class RootController(rest.RestController):
|
|
|
|
_versions = ['v1']
|
|
"""All supported API versions"""
|
|
|
|
_default_version = 'v1'
|
|
"""The default API version"""
|
|
|
|
v1 = v1.Controller()
|
|
|
|
@expose.expose(Root)
|
|
def get(self):
|
|
# NOTE: The reason why convert() it's being called for every
|
|
# request is because we need to get the host url from
|
|
# the request object to make the links.
|
|
return Root.convert()
|
|
|
|
@pecan.expose()
|
|
def _route(self, args):
|
|
"""Overrides the default routing behavior.
|
|
|
|
It redirects the request to the default version of the magnum API
|
|
if the version number is not specified in the url.
|
|
"""
|
|
|
|
if args[0] and args[0] not in self._versions:
|
|
args = [self._default_version] + args
|
|
return super(RootController, self)._route(args)
|