From 7874617e1b28987e75d812229feb631280f5bcac Mon Sep 17 00:00:00 2001 From: tengqm Date: Tue, 5 May 2015 21:59:45 -0400 Subject: [PATCH] Initial version of clustering service support This patch adds support to senlin, the clustering service for OpenStack. In patches that follow this, resources and proxy methods will be added. Change-Id: I8a5f1d528119ef78cb80f6209ba3c4f9025b8d36 --- openstack/clustering/__init__.py | 0 openstack/clustering/clustering_service.py | 27 ++++++++++++ openstack/clustering/version.py | 31 +++++++++++++ openstack/tests/unit/clustering/__init__.py | 0 .../clustering/test_clustering_service.py | 28 ++++++++++++ .../tests/unit/clustering/test_version.py | 43 +++++++++++++++++++ 6 files changed, 129 insertions(+) create mode 100644 openstack/clustering/__init__.py create mode 100644 openstack/clustering/clustering_service.py create mode 100644 openstack/clustering/version.py create mode 100644 openstack/tests/unit/clustering/__init__.py create mode 100644 openstack/tests/unit/clustering/test_clustering_service.py create mode 100644 openstack/tests/unit/clustering/test_version.py diff --git a/openstack/clustering/__init__.py b/openstack/clustering/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/openstack/clustering/clustering_service.py b/openstack/clustering/clustering_service.py new file mode 100644 index 00000000..c3eb67c1 --- /dev/null +++ b/openstack/clustering/clustering_service.py @@ -0,0 +1,27 @@ +# 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 openstack.auth import service_filter + + +class ClusteringService(service_filter.ServiceFilter): + """The clustering service.""" + + valid_versions = [service_filter.ValidVersion('v1')] + UNVERSIONED = None + + def __init__(self, version=None): + """Create a clustering service.""" + super(ClusteringService, self).__init__( + service_type='clustering', + version=version + ) diff --git a/openstack/clustering/version.py b/openstack/clustering/version.py new file mode 100644 index 00000000..3920a507 --- /dev/null +++ b/openstack/clustering/version.py @@ -0,0 +1,31 @@ +# 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 openstack.clustering import clustering_service +from openstack import resource + + +class Version(resource.Resource): + resource_key = 'version' + resources_key = 'versions' + base_path = '/' + service = clustering_service.ClusteringService( + version=clustering_service.ClusteringService.UNVERSIONED + ) + + # capabilities + allow_list = True + + # Properties + links = resource.prop('links') + status = resource.prop('status') diff --git a/openstack/tests/unit/clustering/__init__.py b/openstack/tests/unit/clustering/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/openstack/tests/unit/clustering/test_clustering_service.py b/openstack/tests/unit/clustering/test_clustering_service.py new file mode 100644 index 00000000..c52e7713 --- /dev/null +++ b/openstack/tests/unit/clustering/test_clustering_service.py @@ -0,0 +1,28 @@ +# 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 testtools + +from openstack.clustering import clustering_service + + +class TestClusteringService(testtools.TestCase): + + def test_service(self): + sot = clustering_service.ClusteringService() + self.assertEqual('clustering', sot.service_type) + self.assertEqual('public', sot.visibility) + self.assertIsNone(sot.region) + self.assertIsNone(sot.service_name) + self.assertEqual(1, len(sot.valid_versions)) + self.assertEqual('v1', sot.valid_versions[0].module) + self.assertEqual('v1', sot.valid_versions[0].path) diff --git a/openstack/tests/unit/clustering/test_version.py b/openstack/tests/unit/clustering/test_version.py new file mode 100644 index 00000000..728d134e --- /dev/null +++ b/openstack/tests/unit/clustering/test_version.py @@ -0,0 +1,43 @@ +# 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 testtools + +from openstack.clustering import version + +IDENTIFIER = 'IDENTIFIER' +EXAMPLE = { + 'id': IDENTIFIER, + 'links': '2', + 'status': '3', +} + + +class TestVersion(testtools.TestCase): + + def test_basic(self): + sot = version.Version() + self.assertEqual('version', sot.resource_key) + self.assertEqual('versions', sot.resources_key) + self.assertEqual('/', sot.base_path) + self.assertEqual('clustering', sot.service.service_type) + self.assertFalse(sot.allow_create) + self.assertFalse(sot.allow_retrieve) + self.assertFalse(sot.allow_update) + self.assertFalse(sot.allow_delete) + self.assertTrue(sot.allow_list) + + def test_make_it(self): + sot = version.Version(EXAMPLE) + self.assertEqual(EXAMPLE['id'], sot.id) + self.assertEqual(EXAMPLE['links'], sot.links) + self.assertEqual(EXAMPLE['status'], sot.status)