Add a stub cluster_api driver (#1)
The plan is to slowly build up the ability to create K8s CRDs instead of heat templates in a separate driver. The starting point is adding the new experimental driver. Extracted from: https://review.opendev.org/c/openstack/magnum/+/815521 Change-Id: I32b7a91640f4f65b9662de080682761a2c182055
This commit is contained in:
parent
c7757b9325
commit
85112a457a
|
@ -0,0 +1,85 @@
|
||||||
|
# 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 oslo_log import log as logging
|
||||||
|
|
||||||
|
from magnum.drivers.common import driver
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Driver(driver.Driver):
|
||||||
|
@property
|
||||||
|
def provides(self):
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"server_type": "vm",
|
||||||
|
# TODO(johngarbutt) OS list should probably come from config?
|
||||||
|
"os": "ubuntu",
|
||||||
|
"coe": "kubernetes",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
def update_cluster_status(self, context, cluster):
|
||||||
|
raise NotImplementedError("don't support update_cluster_status yet")
|
||||||
|
|
||||||
|
def create_cluster(self, context, cluster, cluster_create_timeout):
|
||||||
|
raise NotImplementedError("don't support create yet")
|
||||||
|
|
||||||
|
def update_cluster(
|
||||||
|
self, context, cluster, scale_manager=None, rollback=False
|
||||||
|
):
|
||||||
|
raise NotImplementedError("don't support update yet")
|
||||||
|
|
||||||
|
def delete_cluster(self, context, cluster):
|
||||||
|
raise NotImplementedError("don't support delete yet")
|
||||||
|
|
||||||
|
def resize_cluster(
|
||||||
|
self,
|
||||||
|
context,
|
||||||
|
cluster,
|
||||||
|
resize_manager,
|
||||||
|
node_count,
|
||||||
|
nodes_to_remove,
|
||||||
|
nodegroup=None,
|
||||||
|
):
|
||||||
|
raise NotImplementedError("don't support removing nodes this way yet")
|
||||||
|
|
||||||
|
def upgrade_cluster(
|
||||||
|
self,
|
||||||
|
context,
|
||||||
|
cluster,
|
||||||
|
cluster_template,
|
||||||
|
max_batch_size,
|
||||||
|
nodegroup,
|
||||||
|
scale_manager=None,
|
||||||
|
rollback=False,
|
||||||
|
):
|
||||||
|
raise NotImplementedError("don't support upgrade yet")
|
||||||
|
|
||||||
|
def create_nodegroup(self, context, cluster, nodegroup):
|
||||||
|
raise NotImplementedError("we don't support node groups yet")
|
||||||
|
|
||||||
|
def update_nodegroup(self, context, cluster, nodegroup):
|
||||||
|
raise NotImplementedError("we don't support node groups yet")
|
||||||
|
|
||||||
|
def delete_nodegroup(self, context, cluster, nodegroup):
|
||||||
|
raise NotImplementedError("we don't support node groups yet")
|
||||||
|
|
||||||
|
def create_federation(self, context, federation):
|
||||||
|
raise NotImplementedError("Will not implement 'create_federation'")
|
||||||
|
|
||||||
|
def update_federation(self, context, federation):
|
||||||
|
raise NotImplementedError("Will not implement 'update_federation'")
|
||||||
|
|
||||||
|
def delete_federation(self, context, federation):
|
||||||
|
raise NotImplementedError("Will not implement 'delete_federation'")
|
|
@ -0,0 +1,141 @@
|
||||||
|
# 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 magnum import objects
|
||||||
|
from magnum.tests.unit.db import base
|
||||||
|
from magnum.tests.unit.objects import utils as obj_utils
|
||||||
|
|
||||||
|
from magnum_capi_helm import driver
|
||||||
|
|
||||||
|
|
||||||
|
class ClusterAPIDriverTest(base.DbTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
super(ClusterAPIDriverTest, self).setUp()
|
||||||
|
self.driver = driver.Driver()
|
||||||
|
self.cluster_obj = obj_utils.create_test_cluster(
|
||||||
|
self.context,
|
||||||
|
name="cluster_example_$A",
|
||||||
|
master_flavor_id="flavor_small",
|
||||||
|
flavor_id="flavor_medium",
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_provides(self):
|
||||||
|
self.assertEqual(
|
||||||
|
[{"server_type": "vm", "os": "ubuntu", "coe": "kubernetes"}],
|
||||||
|
self.driver.provides,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_update_cluster_status(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.update_cluster_status,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_create_cluster(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.create_cluster,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
cluster_create_timeout=10,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_delete_cluster(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.delete_cluster,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_update_cluster(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.update_cluster,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_resize_cluster(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.resize_cluster,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
None,
|
||||||
|
4,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_upgrade_cluster(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.upgrade_cluster,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
self.cluster_obj.cluster_template,
|
||||||
|
1,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_create_nodegroup(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.create_nodegroup,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
objects.NodeGroup(),
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_update_nodegroup(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.update_nodegroup,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
objects.NodeGroup(),
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_delete_nodegroup(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.delete_nodegroup,
|
||||||
|
self.context,
|
||||||
|
self.cluster_obj,
|
||||||
|
objects.NodeGroup(),
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_create_federation(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.create_federation,
|
||||||
|
self.context,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_update_federation(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.update_federation,
|
||||||
|
self.context,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_delete_federation(self):
|
||||||
|
self.assertRaises(
|
||||||
|
NotImplementedError,
|
||||||
|
self.driver.delete_federation,
|
||||||
|
self.context,
|
||||||
|
None,
|
||||||
|
)
|
|
@ -1,5 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
# 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
|
# not use this file except in compliance with the License. You may obtain
|
||||||
# a copy of the License at
|
# a copy of the License at
|
||||||
|
@ -12,16 +10,13 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
"""
|
from magnum.drivers.common import driver as common
|
||||||
test_magnum_capi_helm
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Tests for `magnum_capi_helm` module.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
from magnum_capi_helm import driver
|
||||||
from magnum_capi_helm.tests import base
|
from magnum_capi_helm.tests import base
|
||||||
|
|
||||||
|
|
||||||
class TestMagnum_capi_helm(base.TestCase):
|
class TestMagnumDriverLoads(base.TestCase):
|
||||||
def test_something(self):
|
def test_get_driver(self):
|
||||||
pass
|
cluster_driver = common.Driver.get_driver("vm", "ubuntu", "kubernetes")
|
||||||
|
self.assertIsInstance(cluster_driver, driver.Driver)
|
||||||
|
|
|
@ -24,3 +24,7 @@ classifier =
|
||||||
[files]
|
[files]
|
||||||
packages =
|
packages =
|
||||||
magnum_capi_helm
|
magnum_capi_helm
|
||||||
|
|
||||||
|
[entry_points]
|
||||||
|
magnum.drivers =
|
||||||
|
k8s_capi_helm_v1 = magnum_capi_helm.driver:Driver
|
||||||
|
|
6
tox.ini
6
tox.ini
|
@ -1,9 +1,6 @@
|
||||||
[tox]
|
[tox]
|
||||||
minversion = 3.2.0
|
minversion = 3.18.0
|
||||||
envlist = py3,black,pep8
|
envlist = py3,black,pep8
|
||||||
skipsdist = True
|
|
||||||
ignore_basepython_conflict = true
|
|
||||||
|
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
basepython = python3
|
basepython = python3
|
||||||
|
@ -14,6 +11,7 @@ setenv =
|
||||||
OS_STDERR_CAPTURE=1
|
OS_STDERR_CAPTURE=1
|
||||||
OS_TEST_TIMEOUT=60
|
OS_TEST_TIMEOUT=60
|
||||||
deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||||
|
-r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands = stestr run {posargs}
|
commands = stestr run {posargs}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue