Loadable Cluster Data Model Collectors
In this changeset, I made BaseClusterDataModelCollector instances pluggable. This corresponds to "part 1" of the work items detailed in the specifications. Change-Id: Iab1c7e264add9e2cbbbb767e3fd6e99a0c22c691 Partially-Implements: blueprint cluster-model-objects-wrapper
This commit is contained in:
@@ -30,9 +30,12 @@ class TestMapping(base.BaseTestCase):
|
||||
VM1_UUID = "73b09e16-35b7-4922-804e-e8f5d9b740fc"
|
||||
VM2_UUID = "a4cab39b-9828-413a-bf88-f76921bf1517"
|
||||
|
||||
def setUp(self):
|
||||
super(TestMapping, self).setUp()
|
||||
self.fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
|
||||
def test_get_node_from_vm(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
|
||||
vms = model.get_all_vms()
|
||||
keys = list(vms.keys())
|
||||
@@ -43,15 +46,13 @@ class TestMapping(base.BaseTestCase):
|
||||
self.assertEqual('Node_0', node.uuid)
|
||||
|
||||
def test_get_node_from_vm_id(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
|
||||
hyps = model.mapping.get_node_vms_from_id("BLABLABLA")
|
||||
self.assertEqual(0, hyps.__len__())
|
||||
|
||||
def test_get_all_vms(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
|
||||
vms = model.get_all_vms()
|
||||
self.assertEqual(2, vms.__len__())
|
||||
@@ -63,16 +64,14 @@ class TestMapping(base.BaseTestCase):
|
||||
self.assertEqual(self.VM2_UUID, vms[self.VM2_UUID].uuid)
|
||||
|
||||
def test_get_mapping(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
mapping_vm = model.mapping.get_mapping_vm()
|
||||
self.assertEqual(2, mapping_vm.__len__())
|
||||
self.assertEqual('Node_0', mapping_vm[self.VM1_UUID])
|
||||
self.assertEqual('Node_1', mapping_vm[self.VM2_UUID])
|
||||
|
||||
def test_migrate_vm(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
vms = model.get_all_vms()
|
||||
keys = list(vms.keys())
|
||||
vm0 = vms[keys[0]]
|
||||
@@ -86,8 +85,7 @@ class TestMapping(base.BaseTestCase):
|
||||
self.assertEqual(True, model.mapping.migrate_vm(vm1, hyp0, hyp1))
|
||||
|
||||
def test_unmap_from_id_log_warning(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
vms = model.get_all_vms()
|
||||
keys = list(vms.keys())
|
||||
vm0 = vms[keys[0]]
|
||||
@@ -100,8 +98,7 @@ class TestMapping(base.BaseTestCase):
|
||||
# hypervisor.uuid)), 1)
|
||||
|
||||
def test_unmap_from_id(self):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_hypervisors()
|
||||
vms = model.get_all_vms()
|
||||
keys = list(vms.keys())
|
||||
vm0 = vms[keys[0]]
|
||||
|
||||
@@ -37,7 +37,7 @@ class SolutionFaker(object):
|
||||
metrics = fake.FakerMetricsCollector()
|
||||
current_state_cluster = faker_cluster_state.FakerModelCollector()
|
||||
sercon = strategies.BasicConsolidation(config=mock.Mock())
|
||||
sercon._model = current_state_cluster.generate_scenario_1()
|
||||
sercon._compute_model = current_state_cluster.generate_scenario_1()
|
||||
sercon.ceilometer = mock.MagicMock(
|
||||
get_statistics=metrics.mock_get_statistics)
|
||||
return sercon.execute()
|
||||
@@ -49,7 +49,7 @@ class SolutionFakerSingleHyp(object):
|
||||
metrics = fake.FakerMetricsCollector()
|
||||
current_state_cluster = faker_cluster_state.FakerModelCollector()
|
||||
sercon = strategies.BasicConsolidation(config=mock.Mock())
|
||||
sercon._model = (
|
||||
sercon._compute_model = (
|
||||
current_state_cluster.generate_scenario_3_with_2_hypervisors())
|
||||
sercon.ceilometer = mock.MagicMock(
|
||||
get_statistics=metrics.mock_get_statistics)
|
||||
|
||||
@@ -36,7 +36,7 @@ class TestStrategyContext(base.DbTestCase):
|
||||
|
||||
strategy_context = d_strategy_ctx.DefaultStrategyContext()
|
||||
|
||||
@mock.patch.object(strategies.DummyStrategy, 'model',
|
||||
@mock.patch.object(strategies.DummyStrategy, 'compute_model',
|
||||
new_callable=mock.PropertyMock)
|
||||
@mock.patch.object(d_selector.DefaultStrategySelector, 'select')
|
||||
def test_execute_strategy(self, mock_call, m_model):
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
import mock
|
||||
|
||||
from watcher.decision_engine.model import hypervisor
|
||||
from watcher.decision_engine.model import model_root as modelroot
|
||||
from watcher.decision_engine.model import resource
|
||||
@@ -25,12 +27,14 @@ from watcher.decision_engine.model import vm_state
|
||||
from watcher.metrics_engine.cluster_model_collector import base
|
||||
|
||||
|
||||
class FakerModelCollector(base.BaseClusterModelCollector):
|
||||
class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
def __init__(self, config=None, osc=None):
|
||||
if config is None:
|
||||
config = mock.Mock()
|
||||
super(FakerModelCollector, self).__init__(config)
|
||||
|
||||
def get_latest_cluster_data_model(self):
|
||||
def execute(self):
|
||||
return self.generate_scenario_1()
|
||||
|
||||
def generate_scenario_1(self):
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
import mock
|
||||
|
||||
from watcher.decision_engine.model import hypervisor
|
||||
from watcher.decision_engine.model import model_root as modelroot
|
||||
from watcher.decision_engine.model import resource
|
||||
@@ -23,11 +25,14 @@ from watcher.decision_engine.model import vm as modelvm
|
||||
from watcher.metrics_engine.cluster_model_collector import base
|
||||
|
||||
|
||||
class FakerModelCollector(base.BaseClusterModelCollector):
|
||||
def __init__(self):
|
||||
pass
|
||||
class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
|
||||
def get_latest_cluster_data_model(self):
|
||||
def __init__(self, config=None, osc=None):
|
||||
if config is None:
|
||||
config = mock.Mock()
|
||||
super(FakerModelCollector, self).__init__(config)
|
||||
|
||||
def execute(self):
|
||||
return self.generate_scenario_1()
|
||||
|
||||
def generate_scenario_1(self):
|
||||
|
||||
@@ -40,7 +40,7 @@ class TestBasicConsolidation(base.BaseTestCase):
|
||||
self.fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.BasicConsolidation, "model",
|
||||
strategies.BasicConsolidation, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
@@ -33,7 +33,7 @@ class TestDummyStrategy(base.TestCase):
|
||||
self.fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.DummyStrategy, "model",
|
||||
strategies.DummyStrategy, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
@@ -42,7 +42,7 @@ class TestOutletTempControl(base.BaseTestCase):
|
||||
self.fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.OutletTempControl, "model",
|
||||
strategies.OutletTempControl, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
@@ -41,7 +41,7 @@ class TestUniformAirflow(base.BaseTestCase):
|
||||
self.fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.UniformAirflow, "model",
|
||||
strategies.UniformAirflow, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
@@ -36,7 +36,7 @@ class TestVMWorkloadConsolidation(base.BaseTestCase):
|
||||
self.fake_cluster = faker_cluster_and_metrics.FakerModelCollector()
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.VMWorkloadConsolidation, "model",
|
||||
strategies.VMWorkloadConsolidation, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
@@ -41,7 +41,7 @@ class TestWorkloadBalance(base.BaseTestCase):
|
||||
self.fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.WorkloadBalance, "model",
|
||||
strategies.WorkloadBalance, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
@@ -47,7 +47,7 @@ class TestWorkloadStabilization(base.BaseTestCase):
|
||||
'Node_4': {'cpu_util': 0.02, 'memory.resident': 4, 'vcpus': 40}}
|
||||
|
||||
p_model = mock.patch.object(
|
||||
strategies.WorkloadStabilization, "model",
|
||||
strategies.WorkloadStabilization, "compute_model",
|
||||
new_callable=mock.PropertyMock)
|
||||
self.m_model = p_model.start()
|
||||
self.addCleanup(p_model.stop)
|
||||
|
||||
Reference in New Issue
Block a user