diff --git a/armada/api/controller/versions.py b/armada/api/controller/versions.py new file mode 100644 index 00000000..25ec170c --- /dev/null +++ b/armada/api/controller/versions.py @@ -0,0 +1,36 @@ +# Copyright 2017 AT&T Intellectual Property. All other 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. + +import json + +import falcon + +from armada import api + + +class Versions(api.BaseResource): + """Versions resource + + Returns the list of supported versions of the Armada API. + """ + + def on_get(self, req, resp): + resp.status = falcon.HTTP_200 + resp.body = json.dumps({ + 'v1.0': { + 'path': '/api/v1.0', + 'status': 'stable' + } + }) + resp.content_type = 'application/json' diff --git a/armada/api/server.py b/armada/api/server.py index e2282ab9..341297ff 100644 --- a/armada/api/server.py +++ b/armada/api/server.py @@ -28,6 +28,7 @@ from armada.api.controller.health import Health from armada.api.controller.tiller import Release from armada.api.controller.tiller import Status from armada.api.controller.validation import Validate +from armada.api.controller.versions import Versions conf.set_app_default_configs() CONF = cfg.CONF @@ -64,6 +65,7 @@ def create(enable_middleware=CONF.middleware): for route, service in url_routes_v1: api.add_route("/api/v1.0/{}".format(route), service) + api.add_route('/versions', Versions()) # Initialize policy config options. policy.Enforcer(CONF) diff --git a/armada/tests/unit/api/test_versions_controller.py b/armada/tests/unit/api/test_versions_controller.py new file mode 100644 index 00000000..7f70fe94 --- /dev/null +++ b/armada/tests/unit/api/test_versions_controller.py @@ -0,0 +1,31 @@ +# Copyright 2017 AT&T Intellectual Property. All other 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. + +from armada.tests.unit.api import base + + +class VersionsControllerTest(base.BaseControllerTest): + + def test_list_versions(self): + """ + Validate that /api/v1.0/health returns 204. + """ + result = self.app.simulate_get('/versions') + expected = { + 'v1.0': { + 'path': '/api/v1.0', + 'status': 'stable' + } + } + self.assertDictEqual(expected, result.json)