Move monitors at driver level

Following changes for cluster-drivers, move coe specific monitors
at driver level. This change is needed to add the driver field
properly.

Change-Id: Id4658b8f7400bf3c86c8ff81756fb33d1211a0b3
Implements: blueprint bay-drivers
This commit is contained in:
Spyros Trigazis 2017-01-22 21:45:16 +01:00
parent faccdccc7c
commit f997a332da
11 changed files with 42 additions and 44 deletions

View File

@ -16,23 +16,16 @@
import abc import abc
from oslo_log import log from oslo_log import log
from oslo_utils import importutils
import six import six
import magnum.conf import magnum.conf
from magnum.objects import fields from magnum.drivers.common.driver import Driver
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
CONF = magnum.conf.CONF CONF = magnum.conf.CONF
COE_CLASS_PATH = {
fields.ClusterType.SWARM: 'magnum.conductor.swarm_monitor.SwarmMonitor',
fields.ClusterType.KUBERNETES: 'magnum.conductor.k8s_monitor.K8sMonitor',
fields.ClusterType.MESOS: 'magnum.conductor.mesos_monitor.MesosMonitor'
}
@six.add_metaclass(abc.ABCMeta) @six.add_metaclass(abc.ABCMeta)
class MonitorBase(object): class MonitorBase(object):
@ -62,10 +55,10 @@ class MonitorBase(object):
def create_monitor(context, cluster): def create_monitor(context, cluster):
if cluster.cluster_template.coe in COE_CLASS_PATH: cluster_driver = Driver.get_driver_for_cluster(context, cluster)
coe_cls = importutils.import_class( monitor = cluster_driver.get_monitor(context, cluster)
COE_CLASS_PATH[cluster.cluster_template.coe]) if monitor:
return coe_cls(context, cluster) return monitor
LOG.debug("Cannot create monitor with cluster type '%s'", LOG.debug("Cannot create monitor with cluster type '%s'",
cluster.cluster_template.coe) cluster.cluster_template.coe)

View File

@ -174,3 +174,8 @@ class Driver(object):
def delete_cluster(self, context, cluster): def delete_cluster(self, context, cluster):
raise NotImplementedError("Subclasses must implement " raise NotImplementedError("Subclasses must implement "
"'delete_cluster'.") "'delete_cluster'.")
def get_monitor(self, context, cluster):
"""return the monitor with container data for this driver."""
return None

View File

@ -12,6 +12,7 @@
# 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 k8s_monitor
from magnum.drivers.heat import driver from magnum.drivers.heat import driver
from magnum.drivers.k8s_coreos_v1 import template_def from magnum.drivers.k8s_coreos_v1 import template_def
@ -28,3 +29,6 @@ class Driver(driver.HeatDriver):
def get_template_definition(self): def get_template_definition(self):
return template_def.CoreOSK8sTemplateDefinition() return template_def.CoreOSK8sTemplateDefinition()
def get_monitor(self, context, cluster):
return k8s_monitor.K8sMonitor(context, cluster)

View File

@ -12,6 +12,7 @@
# 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 k8s_monitor
from magnum.drivers.heat import driver from magnum.drivers.heat import driver
from magnum.drivers.k8s_fedora_atomic_v1 import template_def from magnum.drivers.k8s_fedora_atomic_v1 import template_def
@ -28,3 +29,6 @@ class Driver(driver.HeatDriver):
def get_template_definition(self): def get_template_definition(self):
return template_def.AtomicK8sTemplateDefinition() return template_def.AtomicK8sTemplateDefinition()
def get_monitor(self, context, cluster):
return k8s_monitor.K8sMonitor(context, cluster)

View File

@ -12,6 +12,7 @@
# 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 k8s_monitor
from magnum.drivers.heat import driver from magnum.drivers.heat import driver
from magnum.drivers.k8s_fedora_ironic_v1 import template_def from magnum.drivers.k8s_fedora_ironic_v1 import template_def
@ -28,3 +29,6 @@ class Driver(driver.HeatDriver):
def get_template_definition(self): def get_template_definition(self):
return template_def.FedoraK8sIronicTemplateDefinition() return template_def.FedoraK8sIronicTemplateDefinition()
def get_monitor(self, context, cluster):
return k8s_monitor.K8sMonitor(context, cluster)

View File

@ -13,6 +13,7 @@
# under the License. # under the License.
from magnum.drivers.heat import driver from magnum.drivers.heat import driver
from magnum.drivers.mesos_ubuntu_v1 import monitor
from magnum.drivers.mesos_ubuntu_v1 import template_def from magnum.drivers.mesos_ubuntu_v1 import template_def
@ -28,3 +29,6 @@ class Driver(driver.HeatDriver):
def get_template_definition(self): def get_template_definition(self):
return template_def.UbuntuMesosTemplateDefinition() return template_def.UbuntuMesosTemplateDefinition()
def get_monitor(self, context, cluster):
return monitor.MesosMonitor(context, cluster)

View File

@ -13,6 +13,7 @@
# under the License. # under the License.
from magnum.drivers.heat import driver from magnum.drivers.heat import driver
from magnum.drivers.swarm_fedora_atomic_v1 import monitor
from magnum.drivers.swarm_fedora_atomic_v1 import template_def from magnum.drivers.swarm_fedora_atomic_v1 import template_def
@ -28,3 +29,6 @@ class Driver(driver.HeatDriver):
def get_template_definition(self): def get_template_definition(self):
return template_def.AtomicSwarmTemplateDefinition() return template_def.AtomicSwarmTemplateDefinition()
def get_monitor(self, context, cluster):
return monitor.SwarmMonitor(context, cluster)

View File

@ -16,14 +16,12 @@
import mock import mock
from oslo_serialization import jsonutils from oslo_serialization import jsonutils
from magnum.conductor import k8s_monitor from magnum.drivers.common import k8s_monitor
from magnum.conductor import mesos_monitor from magnum.drivers.mesos_ubuntu_v1 import monitor as mesos_monitor
from magnum.conductor import monitors from magnum.drivers.swarm_fedora_atomic_v1 import monitor as swarm_monitor
from magnum.conductor import swarm_monitor
from magnum import objects from magnum import objects
from magnum.tests import base from magnum.tests import base
from magnum.tests.unit.db import utils from magnum.tests.unit.db import utils
from magnum.tests.unit.objects import utils as obj_utils
class MonitorsTestCase(base.TestCase): class MonitorsTestCase(base.TestCase):
@ -50,31 +48,13 @@ class MonitorsTestCase(base.TestCase):
self.k8s_monitor = k8s_monitor.K8sMonitor(self.context, self.cluster) self.k8s_monitor = k8s_monitor.K8sMonitor(self.context, self.cluster)
self.mesos_monitor = mesos_monitor.MesosMonitor(self.context, self.mesos_monitor = mesos_monitor.MesosMonitor(self.context,
self.cluster) self.cluster)
p = mock.patch('magnum.conductor.swarm_monitor.SwarmMonitor.' p = mock.patch('magnum.drivers.swarm_fedora_atomic_v1.monitor.'
'metrics_spec', new_callable=mock.PropertyMock) 'SwarmMonitor.metrics_spec',
new_callable=mock.PropertyMock)
self.mock_metrics_spec = p.start() self.mock_metrics_spec = p.start()
self.mock_metrics_spec.return_value = self.test_metrics_spec self.mock_metrics_spec.return_value = self.test_metrics_spec
self.addCleanup(p.stop) self.addCleanup(p.stop)
def test_create_monitor_success(self):
self.cluster.cluster_template = obj_utils.get_test_cluster_template(
self.context, uuid=self.cluster.cluster_template_id, coe='swarm')
monitor = monitors.create_monitor(self.context, self.cluster)
self.assertIsInstance(monitor, swarm_monitor.SwarmMonitor)
def test_create_monitor_k8s_cluster(self):
self.cluster.cluster_template = obj_utils.get_test_cluster_template(
self.context, uuid=self.cluster.cluster_template_id,
coe='kubernetes')
monitor = monitors.create_monitor(self.context, self.cluster)
self.assertIsInstance(monitor, k8s_monitor.K8sMonitor)
def test_create_monitor_mesos_cluster(self):
self.cluster.cluster_template = obj_utils.get_test_cluster_template(
self.context, uuid=self.cluster.cluster_template_id, coe='mesos')
monitor = monitors.create_monitor(self.context, self.cluster)
self.assertIsInstance(monitor, mesos_monitor.MesosMonitor)
@mock.patch('magnum.common.docker_utils.docker_for_cluster') @mock.patch('magnum.common.docker_utils.docker_for_cluster')
def test_swarm_monitor_pull_data_success(self, mock_docker_cluster): def test_swarm_monitor_pull_data_success(self, mock_docker_cluster):
mock_docker = mock.MagicMock() mock_docker = mock.MagicMock()
@ -176,7 +156,7 @@ class MonitorsTestCase(base.TestCase):
[{'Memory': 104857600.0, 'Cpu': 0.5}]) [{'Memory': 104857600.0, 'Cpu': 0.5}])
def test_k8s_monitor_get_metric_names(self): def test_k8s_monitor_get_metric_names(self):
k8s_metric_spec = 'magnum.conductor.k8s_monitor.K8sMonitor.'\ k8s_metric_spec = 'magnum.drivers.common.k8s_monitor.K8sMonitor.'\
'metrics_spec' 'metrics_spec'
with mock.patch(k8s_metric_spec, with mock.patch(k8s_metric_spec,
new_callable=mock.PropertyMock) as mock_k8s_metric: new_callable=mock.PropertyMock) as mock_k8s_metric:
@ -185,7 +165,7 @@ class MonitorsTestCase(base.TestCase):
self.assertEqual(sorted(['metric1', 'metric2']), sorted(names)) self.assertEqual(sorted(['metric1', 'metric2']), sorted(names))
def test_k8s_monitor_get_metric_unit(self): def test_k8s_monitor_get_metric_unit(self):
k8s_metric_spec = 'magnum.conductor.k8s_monitor.K8sMonitor.' \ k8s_metric_spec = 'magnum.drivers.common.k8s_monitor.K8sMonitor.'\
'metrics_spec' 'metrics_spec'
with mock.patch(k8s_metric_spec, with mock.patch(k8s_metric_spec,
new_callable=mock.PropertyMock) as mock_k8s_metric: new_callable=mock.PropertyMock) as mock_k8s_metric:
@ -293,8 +273,8 @@ class MonitorsTestCase(base.TestCase):
self._test_mesos_monitor_pull_data(mock_url_get, {}, 0, 0, 0, 0) self._test_mesos_monitor_pull_data(mock_url_get, {}, 0, 0, 0, 0)
def test_mesos_monitor_get_metric_names(self): def test_mesos_monitor_get_metric_names(self):
mesos_metric_spec = 'magnum.conductor.mesos_monitor.MesosMonitor.'\ mesos_metric_spec = ('magnum.drivers.mesos_ubuntu_v1.monitor.'
'metrics_spec' 'MesosMonitor.metrics_spec')
with mock.patch(mesos_metric_spec, with mock.patch(mesos_metric_spec,
new_callable=mock.PropertyMock) as mock_mesos_metric: new_callable=mock.PropertyMock) as mock_mesos_metric:
mock_mesos_metric.return_value = self.test_metrics_spec mock_mesos_metric.return_value = self.test_metrics_spec
@ -302,8 +282,8 @@ class MonitorsTestCase(base.TestCase):
self.assertEqual(sorted(['metric1', 'metric2']), sorted(names)) self.assertEqual(sorted(['metric1', 'metric2']), sorted(names))
def test_mesos_monitor_get_metric_unit(self): def test_mesos_monitor_get_metric_unit(self):
mesos_metric_spec = 'magnum.conductor.mesos_monitor.MesosMonitor.' \ mesos_metric_spec = ('magnum.drivers.mesos_ubuntu_v1.monitor.'
'metrics_spec' 'MesosMonitor.metrics_spec')
with mock.patch(mesos_metric_spec, with mock.patch(mesos_metric_spec,
new_callable=mock.PropertyMock) as mock_mesos_metric: new_callable=mock.PropertyMock) as mock_mesos_metric:
mock_mesos_metric.return_value = self.test_metrics_spec mock_mesos_metric.return_value = self.test_metrics_spec