Merge "Graph cluster model instead of mapping one"
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
import mock
|
||||
|
||||
from watcher.common import nova_helper
|
||||
from watcher.common import utils
|
||||
from watcher.decision_engine.model.collector import nova
|
||||
from watcher.tests import base
|
||||
from watcher.tests import conf_fixture
|
||||
@@ -33,9 +34,13 @@ class TestNovaClusterDataModelCollector(base.TestCase):
|
||||
@mock.patch('keystoneclient.v3.client.Client', mock.Mock())
|
||||
@mock.patch.object(nova_helper, 'NovaHelper')
|
||||
def test_nova_cdmc_execute(self, m_nova_helper_cls):
|
||||
m_nova_helper = mock.Mock()
|
||||
m_nova_helper = mock.Mock(name="nova_helper")
|
||||
m_nova_helper_cls.return_value = m_nova_helper
|
||||
m_nova_helper.get_service.return_value = mock.Mock(
|
||||
host="test_hostname")
|
||||
|
||||
fake_compute_node = mock.Mock(
|
||||
id=1337,
|
||||
service={'id': 123},
|
||||
hypervisor_hostname='test_hostname',
|
||||
memory_mb=333,
|
||||
@@ -47,19 +52,16 @@ class TestNovaClusterDataModelCollector(base.TestCase):
|
||||
)
|
||||
fake_instance = mock.Mock(
|
||||
id='ef500f7e-dac8-470f-960c-169486fce71b',
|
||||
state=mock.Mock(**{'OS-EXT-STS:vm_state': 'VM_STATE'}),
|
||||
flavor={'ram': 333, 'disk': 222, 'vcpus': 4},
|
||||
human_id='fake_instance',
|
||||
flavor={'ram': 333, 'disk': 222, 'vcpus': 4, 'id': 1},
|
||||
)
|
||||
setattr(fake_instance, 'OS-EXT-STS:vm_state', 'VM_STATE')
|
||||
m_nova_helper.get_compute_node_list.return_value = [fake_compute_node]
|
||||
m_nova_helper.get_instances_by_node.return_value = [fake_instance]
|
||||
m_nova_helper.nova.services.find.return_value = mock.Mock(
|
||||
host='test_hostname')
|
||||
# m_nova_helper.get_instances_by_node.return_value = [fake_instance]
|
||||
m_nova_helper.get_instance_list.return_value = [fake_instance]
|
||||
|
||||
def m_get_flavor_instance(instance, cache):
|
||||
instance.flavor = {'ram': 333, 'disk': 222, 'vcpus': 4}
|
||||
return instance
|
||||
|
||||
m_nova_helper.get_flavor_instance.side_effect = m_get_flavor_instance
|
||||
m_nova_helper.get_flavor.return_value = utils.Struct(**{
|
||||
'ram': 333, 'disk': 222, 'vcpus': 4})
|
||||
|
||||
m_config = mock.Mock()
|
||||
m_osc = mock.Mock()
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_0" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_1" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_0" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_2" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_2" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_2" status="enabled" state="up" id="2" hostname="hostname_2" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_3" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_4" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_5" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_2" status="enabled" state="up" id="2" hostname="hostname_2" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_3" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_4" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_5" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_3" status="enabled" state="up" id="3" hostname="hostname_3" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_6" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_3" status="enabled" state="up" id="3" hostname="hostname_3" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_6" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_4" status="enabled" state="up" id="4" hostname="hostname_4" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_7" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_4" status="enabled" state="up" id="4" hostname="hostname_4" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_7" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_10" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_11" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_12" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_13" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_14" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_15" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_16" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_17" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_18" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_19" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_20" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_21" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_22" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_23" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_24" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_25" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_26" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_27" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_28" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_29" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_30" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_31" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_32" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_33" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_34" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_8" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_9" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_10" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_11" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_12" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_13" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_14" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_15" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_16" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_17" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_18" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_19" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_20" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_21" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_22" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_23" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_24" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_25" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_26" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_27" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_28" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_29" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_30" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_31" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_32" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_33" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_34" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_8" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_9" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="enabled" human_id="" status="enabled" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_0" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="enabled" human_id="" status="enabled" vcpus="40" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_0" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="enabled" human_id="" status="enabled" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_1" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="enabled" human_id="" status="enabled" vcpus="40" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_0" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_1" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_2" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_3" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_4" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_5" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_0" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_2" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_3" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_4" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_5" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64"/>
|
||||
<ComputeNode hostname="hostname_2" uuid="Node_2" id="2" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64"/>
|
||||
<ComputeNode hostname="hostname_3" uuid="Node_3" id="3" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64"/>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64"/>
|
||||
<ComputeNode hostname="hostname_2" uuid="Node_2" id="2" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64"/>
|
||||
<ComputeNode hostname="hostname_3" uuid="Node_3" id="3" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64"/>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="73b09e16-35b7-4922-804e-e8f5d9b740fc" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="73b09e16-35b7-4922-804e-e8f5d9b740fc" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="a4cab39b-9828-413a-bf88-f76921bf1517" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="a4cab39b-9828-413a-bf88-f76921bf1517" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" ResourceType.cpu_cores="10" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_6" ResourceType.cpu_cores="1" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_7" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_8" ResourceType.cpu_cores="4" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_9" ResourceType.cpu_cores="8" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" vcpus="10" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_6" vcpus="1" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_7" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_8" vcpus="4" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_9" vcpus="8" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" ResourceType.cpu_cores="10" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64"/>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" vcpus="10" disk="250" disk_capacity="250" memory="64"/>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" ResourceType.cpu_cores="1" ResourceType.disk="1" ResourceType.disk_capacity="1" ResourceType.memory="1"/>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" vcpus="1" disk="1" disk_capacity="1" memory="1"/>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" ResourceType.cpu_cores="4" ResourceType.disk="4" ResourceType.disk_capacity="4" ResourceType.memory="4">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_0" hostname="" ResourceType.cpu_cores="4" ResourceType.disk="0" ResourceType.disk_capacity="0" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" vcpus="4" disk="4" disk_capacity="4" memory="4">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_0" vcpus="4" disk="0" disk_capacity="0" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="73b09e16-35b7-4922-804e-e8f5d9b740fc" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_1" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="73b09e16-35b7-4922-804e-e8f5d9b740fc" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" ResourceType.cpu_cores="40" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_3" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_4" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" vcpus="40" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_3" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_4" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" ResourceType.cpu_cores="50" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="73b09e16-35b7-4922-804e-e8f5d9b740fc" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="cae81432-1631-4d4e-b29c-6f3acdcde906" hostname="" ResourceType.cpu_cores="15" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_0" status="enabled" state="up" id="0" hostname="hostname_0" vcpus="50" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="73b09e16-35b7-4922-804e-e8f5d9b740fc" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="cae81432-1631-4d4e-b29c-6f3acdcde906" vcpus="15" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" ResourceType.cpu_cores="50" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_3" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_4" hostname="" ResourceType.cpu_cores="10" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode human_id="" uuid="Node_1" status="enabled" state="up" id="1" hostname="hostname_1" vcpus="50" disk="250" disk_capacity="250" memory="132">
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_3" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance state="active" human_id="" uuid="INSTANCE_4" vcpus="10" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_0" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_1" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_2" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_0" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_1" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_2" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_3" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_3" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_2" uuid="Node_2" id="2" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_4" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_2" uuid="Node_2" id="2" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_4" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_3" uuid="Node_3" id="3" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_5" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_3" uuid="Node_3" id="3" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_5" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<ModelRoot>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_0" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_1" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_2" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_0" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_1" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_2" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_3" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_3" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_2" uuid="Node_2" id="2" state="up" human_id="" status="enabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_4" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_2" uuid="Node_2" id="2" state="up" human_id="" status="enabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_4" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
<ComputeNode hostname="hostname_3" uuid="Node_3" id="3" state="up" human_id="" status="disabled" ResourceType.cpu_cores="16" ResourceType.disk="250" ResourceType.disk_capacity="250" ResourceType.memory="64">
|
||||
<Instance hostname="" human_id="" state="active" uuid="INSTANCE_5" ResourceType.cpu_cores="2" ResourceType.disk="20" ResourceType.disk_capacity="20" ResourceType.memory="2"/>
|
||||
<ComputeNode hostname="hostname_3" uuid="Node_3" id="3" state="up" human_id="" status="disabled" vcpus="16" disk="250" disk_capacity="250" memory="64">
|
||||
<Instance human_id="" state="active" uuid="INSTANCE_5" vcpus="2" disk="20" disk_capacity="20" memory="2"/>
|
||||
</ComputeNode>
|
||||
</ModelRoot>
|
||||
|
||||
@@ -102,11 +102,12 @@ class FakeCeilometerMetrics(object):
|
||||
Returns relative node CPU utilization <0, 100>.
|
||||
:param r_id: resource id
|
||||
"""
|
||||
uuid = '%s_%s' % (r_id.split('_')[0], r_id.split('_')[1])
|
||||
instances = self.model.get_mapping().get_node_instances_by_uuid(uuid)
|
||||
node_uuid = '%s_%s' % (r_id.split('_')[0], r_id.split('_')[1])
|
||||
node = self.model.get_node_by_uuid(node_uuid)
|
||||
instances = self.model.get_node_instances(node)
|
||||
util_sum = 0.0
|
||||
node_cpu_cores = self.model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores).get_capacity_by_uuid(uuid)
|
||||
element.ResourceType.cpu_cores).get_capacity_by_uuid(node.uuid)
|
||||
for instance_uuid in instances:
|
||||
instance_cpu_cores = self.model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores).\
|
||||
|
||||
@@ -54,7 +54,7 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
def build_scenario_1(self):
|
||||
instances = []
|
||||
|
||||
current_state_cluster = modelroot.ModelRoot()
|
||||
model = modelroot.ModelRoot()
|
||||
# number of nodes
|
||||
node_count = 5
|
||||
# number max of instance per node
|
||||
@@ -62,74 +62,52 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
# total number of virtual machine
|
||||
instance_count = (node_count * node_instance_count)
|
||||
|
||||
# define ressouce ( CPU, MEM disk, ... )
|
||||
mem = element.Resource(element.ResourceType.memory)
|
||||
# 2199.954 Mhz
|
||||
num_cores = element.Resource(element.ResourceType.cpu_cores)
|
||||
disk = element.Resource(element.ResourceType.disk)
|
||||
disk_capacity = element.Resource(element.ResourceType.disk_capacity)
|
||||
|
||||
current_state_cluster.create_resource(mem)
|
||||
current_state_cluster.create_resource(num_cores)
|
||||
current_state_cluster.create_resource(disk)
|
||||
current_state_cluster.create_resource(disk_capacity)
|
||||
|
||||
for id_ in range(0, node_count):
|
||||
node_uuid = "Node_{0}".format(id_)
|
||||
node = element.ComputeNode(id_)
|
||||
node.uuid = node_uuid
|
||||
node.hostname = "hostname_{0}".format(id_)
|
||||
|
||||
mem.set_capacity(node, 132)
|
||||
disk.set_capacity(node, 250)
|
||||
disk_capacity.set_capacity(node, 250)
|
||||
num_cores.set_capacity(node, 40)
|
||||
current_state_cluster.add_node(node)
|
||||
hostname = "hostname_{0}".format(id_)
|
||||
node_attributes = {
|
||||
"id": id_,
|
||||
"uuid": node_uuid,
|
||||
"hostname": hostname,
|
||||
"memory": 132,
|
||||
"disk": 250,
|
||||
"disk_capacity": 250,
|
||||
"vcpus": 40,
|
||||
}
|
||||
node = element.ComputeNode(**node_attributes)
|
||||
model.add_node(node)
|
||||
|
||||
for i in range(0, instance_count):
|
||||
instance_uuid = "INSTANCE_{0}".format(i)
|
||||
instance = element.Instance()
|
||||
instance.uuid = instance_uuid
|
||||
mem.set_capacity(instance, 2)
|
||||
disk.set_capacity(instance, 20)
|
||||
disk_capacity.set_capacity(instance, 20)
|
||||
num_cores.set_capacity(instance, 10)
|
||||
instance_attributes = {
|
||||
"uuid": instance_uuid,
|
||||
"memory": 2,
|
||||
"disk": 20,
|
||||
"disk_capacity": 20,
|
||||
"vcpus": 10,
|
||||
}
|
||||
|
||||
instance = element.Instance(**instance_attributes)
|
||||
instances.append(instance)
|
||||
current_state_cluster.add_instance(instance)
|
||||
model.add_instance(instance)
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_0"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_0"))
|
||||
mappings = [
|
||||
("INSTANCE_0", "Node_0"),
|
||||
("INSTANCE_1", "Node_0"),
|
||||
("INSTANCE_2", "Node_1"),
|
||||
("INSTANCE_3", "Node_2"),
|
||||
("INSTANCE_4", "Node_2"),
|
||||
("INSTANCE_5", "Node_2"),
|
||||
("INSTANCE_6", "Node_3"),
|
||||
("INSTANCE_7", "Node_4"),
|
||||
]
|
||||
for instance_uuid, node_uuid in mappings:
|
||||
model.map_instance(
|
||||
model.get_instance_by_uuid(instance_uuid),
|
||||
model.get_node_by_uuid(node_uuid),
|
||||
)
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_0"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_1"))
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_1"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_2"))
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_2"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_3"))
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_2"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_4"))
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_2"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_5"))
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_3"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_6"))
|
||||
|
||||
current_state_cluster.mapping.map(
|
||||
current_state_cluster.get_node_by_uuid("Node_4"),
|
||||
current_state_cluster.get_instance_by_uuid("INSTANCE_7"))
|
||||
|
||||
return current_state_cluster
|
||||
return model
|
||||
|
||||
def generate_scenario_1(self):
|
||||
return self.load_model('scenario_1.xml')
|
||||
|
||||
@@ -26,7 +26,6 @@ from watcher.common import exception
|
||||
from watcher.common import nova_helper
|
||||
from watcher.common import service as watcher_service
|
||||
from watcher.decision_engine.model import element
|
||||
from watcher.decision_engine.model import model_root
|
||||
from watcher.decision_engine.model.notification import nova as novanotification
|
||||
from watcher.tests import base as base_test
|
||||
from watcher.tests.decision_engine.model import faker_cluster_state
|
||||
@@ -35,7 +34,8 @@ from watcher.tests.decision_engine.model.notification import fake_managers
|
||||
|
||||
class NotificationTestCase(base_test.TestCase):
|
||||
|
||||
def load_message(self, filename):
|
||||
@staticmethod
|
||||
def load_message(filename):
|
||||
cwd = os.path.abspath(os.path.dirname(__file__))
|
||||
data_folder = os.path.join(cwd, "data")
|
||||
|
||||
@@ -188,6 +188,9 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
side_effect=lambda uuid: mock.Mock(
|
||||
name='m_get_compute_node_by_hostname',
|
||||
id=3,
|
||||
hypervisor_hostname="Node_2",
|
||||
state='up',
|
||||
status='enabled',
|
||||
uuid=uuid,
|
||||
memory_mb=7777,
|
||||
vcpus=42,
|
||||
@@ -215,7 +218,7 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
cpu_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores)
|
||||
element.ResourceType.vcpus)
|
||||
disk = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.disk)
|
||||
disk_capacity = compute_model.get_resource_by_uuid(
|
||||
@@ -239,7 +242,7 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
def test_instance_update_node_notfound_set_unmapped(
|
||||
self, m_nova_helper_cls):
|
||||
m_get_compute_node_by_hostname = mock.Mock(
|
||||
side_effect=exception.ComputeNodeNotFound)
|
||||
side_effect=exception.ComputeNodeNotFound(name="TEST"))
|
||||
m_nova_helper_cls.return_value = mock.Mock(
|
||||
get_compute_node_by_hostname=m_get_compute_node_by_hostname,
|
||||
name='m_nova_helper')
|
||||
@@ -263,7 +266,7 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
cpu_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores)
|
||||
element.ResourceType.vcpus)
|
||||
disk = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.disk)
|
||||
disk_capacity = compute_model.get_resource_by_uuid(
|
||||
@@ -304,7 +307,7 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
cpu_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores)
|
||||
element.ResourceType.vcpus)
|
||||
disk_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.disk)
|
||||
memory_capacity = compute_model.get_resource_by_uuid(
|
||||
@@ -324,8 +327,6 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
|
||||
# Before
|
||||
self.assertTrue(compute_model.get_instance_by_uuid(instance0_uuid))
|
||||
for resource in compute_model.resource.values():
|
||||
self.assertIn(instance0_uuid, resource.mapping)
|
||||
|
||||
message = self.load_message('scenario3_instance-delete-end.json')
|
||||
handler.info(
|
||||
@@ -341,9 +342,6 @@ class TestNovaNotifications(NotificationTestCase):
|
||||
exception.InstanceNotFound,
|
||||
compute_model.get_instance_by_uuid, instance0_uuid)
|
||||
|
||||
for resource in compute_model.resource.values():
|
||||
self.assertNotIn(instance0_uuid, resource.mapping)
|
||||
|
||||
|
||||
class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
|
||||
@@ -377,7 +375,7 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
cpu_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores)
|
||||
element.ResourceType.vcpus)
|
||||
disk_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.disk)
|
||||
memory_capacity = compute_model.get_resource_by_uuid(
|
||||
@@ -410,31 +408,6 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
|
||||
self.assertEqual(element.InstanceState.PAUSED.value, instance0.state)
|
||||
|
||||
def test_legacy_instance_update_instance_notfound_creates(self):
|
||||
compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes()
|
||||
self.fake_cdmc.cluster_data_model = compute_model
|
||||
handler = novanotification.LegacyInstanceUpdated(self.fake_cdmc)
|
||||
|
||||
instance0_uuid = '73b09e16-35b7-4922-804e-e8f5d9b740fc'
|
||||
|
||||
message = self.load_message('scenario3_legacy_instance-update.json')
|
||||
|
||||
with mock.patch.object(
|
||||
model_root.ModelRoot, 'get_instance_by_uuid'
|
||||
) as m_get_instance_by_uuid:
|
||||
m_get_instance_by_uuid.side_effect = exception.InstanceNotFound(
|
||||
name='TEST')
|
||||
handler.info(
|
||||
ctxt=self.context,
|
||||
publisher_id=message['publisher_id'],
|
||||
event_type=message['event_type'],
|
||||
payload=message['payload'],
|
||||
metadata=self.FAKE_METADATA,
|
||||
)
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
self.assertEqual(element.InstanceState.PAUSED.value, instance0.state)
|
||||
|
||||
@mock.patch.object(nova_helper, "NovaHelper")
|
||||
def test_legacy_instance_update_node_notfound_still_creates(
|
||||
self, m_nova_helper_cls):
|
||||
@@ -443,6 +416,9 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
name='m_get_compute_node_by_hostname',
|
||||
id=3,
|
||||
uuid=uuid,
|
||||
hypervisor_hostname="Node_2",
|
||||
state='up',
|
||||
status='enabled',
|
||||
memory_mb=7777,
|
||||
vcpus=42,
|
||||
free_disk_gb=974,
|
||||
@@ -470,7 +446,7 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
cpu_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores)
|
||||
element.ResourceType.vcpus)
|
||||
disk = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.disk)
|
||||
disk_capacity = compute_model.get_resource_by_uuid(
|
||||
@@ -519,7 +495,7 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
|
||||
instance0 = compute_model.get_instance_by_uuid(instance0_uuid)
|
||||
cpu_capacity = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.cpu_cores)
|
||||
element.ResourceType.vcpus)
|
||||
disk = compute_model.get_resource_by_uuid(
|
||||
element.ResourceType.disk)
|
||||
disk_capacity = compute_model.get_resource_by_uuid(
|
||||
@@ -571,8 +547,6 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
|
||||
# Before
|
||||
self.assertTrue(compute_model.get_instance_by_uuid(instance0_uuid))
|
||||
for resource in compute_model.resource.values():
|
||||
self.assertIn(instance0_uuid, resource.mapping)
|
||||
|
||||
message = self.load_message(
|
||||
'scenario3_legacy_instance-delete-end.json')
|
||||
@@ -588,6 +562,3 @@ class TestLegacyNovaNotifications(NotificationTestCase):
|
||||
self.assertRaises(
|
||||
exception.InstanceNotFound,
|
||||
compute_model.get_instance_by_uuid, instance0_uuid)
|
||||
|
||||
for resource in compute_model.resource.values():
|
||||
self.assertNotIn(instance0_uuid, resource.mapping)
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# Authors: Jean-Emile DARTOIS <jean-emile.dartois@b-com.com>
|
||||
#
|
||||
# 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 watcher.decision_engine.model import element
|
||||
from watcher.tests import base
|
||||
|
||||
|
||||
class TestDiskInfo(base.TestCase):
|
||||
def test_all(self):
|
||||
disk_information = element.DiskInfo()
|
||||
disk_information.set_size(1024)
|
||||
self.assertEqual(1024, disk_information.get_size())
|
||||
|
||||
disk_information.set_scheduler = "scheduler_qcq"
|
||||
|
||||
disk_information.set_device_name("nom_qcq")
|
||||
self.assertEqual("nom_qcq", disk_information.get_device_name())
|
||||
72
watcher/tests/decision_engine/model/test_element.py
Normal file
72
watcher/tests/decision_engine/model/test_element.py
Normal file
@@ -0,0 +1,72 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2017 b<>com
|
||||
#
|
||||
# Authors: Vincent FRANCOISE <Vincent.FRANCOISE@b-com.com>
|
||||
#
|
||||
# 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 watcher.decision_engine.model import element
|
||||
from watcher.tests import base
|
||||
|
||||
|
||||
class TestElement(base.TestCase):
|
||||
|
||||
scenarios = [
|
||||
("ComputeNode_with_all_fields", dict(
|
||||
cls=element.Instance,
|
||||
data={
|
||||
'uuid': 'FAKE_UUID',
|
||||
'state': 'state',
|
||||
'hostname': 'hostname',
|
||||
'human_id': 'human_id',
|
||||
'memory': 111,
|
||||
'vcpus': 222,
|
||||
'disk': 333,
|
||||
'disk_capacity': 444,
|
||||
})),
|
||||
("ComputeNode_with_some_fields", dict(
|
||||
cls=element.Instance,
|
||||
data={
|
||||
'uuid': 'FAKE_UUID',
|
||||
'state': 'state',
|
||||
'vcpus': 222,
|
||||
'disk': 333,
|
||||
'disk_capacity': 444,
|
||||
})),
|
||||
("Instance_with_all_fields", dict(
|
||||
cls=element.Instance,
|
||||
data={
|
||||
'uuid': 'FAKE_UUID',
|
||||
'state': 'state',
|
||||
'hostname': 'hostname',
|
||||
'human_id': 'human_id',
|
||||
'memory': 111,
|
||||
'vcpus': 222,
|
||||
'disk': 333,
|
||||
'disk_capacity': 444,
|
||||
})),
|
||||
("Instance_with_some_fields", dict(
|
||||
cls=element.Instance,
|
||||
data={
|
||||
'uuid': 'FAKE_UUID',
|
||||
'state': 'state',
|
||||
'vcpus': 222,
|
||||
'disk': 333,
|
||||
'disk_capacity': 444,
|
||||
})),
|
||||
]
|
||||
|
||||
def test_as_xml_element(self):
|
||||
el = self.cls(**self.data)
|
||||
el.as_xml_element()
|
||||
@@ -1,30 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# Authors: Jean-Emile DARTOIS <jean-emile.dartois@b-com.com>
|
||||
#
|
||||
# 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 watcher.decision_engine.model import element
|
||||
from watcher.tests import base
|
||||
|
||||
|
||||
class TestInstance(base.TestCase):
|
||||
|
||||
def test_namedelement(self):
|
||||
instance = element.Instance()
|
||||
instance.state = element.InstanceState.ACTIVE
|
||||
self.assertEqual(element.InstanceState.ACTIVE, instance.state)
|
||||
instance.human_id = "human_05"
|
||||
self.assertEqual("human_05", instance.human_id)
|
||||
@@ -1,113 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# Authors: Jean-Emile DARTOIS <jean-emile.dartois@b-com.com>
|
||||
#
|
||||
# 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_utils import uuidutils
|
||||
|
||||
from watcher.decision_engine.model import element
|
||||
from watcher.tests import base
|
||||
from watcher.tests.decision_engine.model import faker_cluster_state
|
||||
|
||||
|
||||
class TestMapping(base.TestCase):
|
||||
|
||||
INST1_UUID = "73b09e16-35b7-4922-804e-e8f5d9b740fc"
|
||||
INST2_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_instance(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
|
||||
instances = model.get_all_instances()
|
||||
keys = list(instances.keys())
|
||||
instance = instances[keys[0]]
|
||||
if instance.uuid != self.INST1_UUID:
|
||||
instance = instances[keys[1]]
|
||||
node = model.mapping.get_node_from_instance(instance)
|
||||
self.assertEqual('Node_0', node.uuid)
|
||||
|
||||
def test_get_node_by_instance_uuid(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
|
||||
nodes = model.mapping.get_node_instances_by_uuid("BLABLABLA")
|
||||
self.assertEqual(0, len(nodes))
|
||||
|
||||
def test_get_all_instances(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
|
||||
instances = model.get_all_instances()
|
||||
self.assertEqual(2, len(instances))
|
||||
self.assertEqual(element.InstanceState.ACTIVE.value,
|
||||
instances[self.INST1_UUID].state)
|
||||
self.assertEqual(self.INST1_UUID, instances[self.INST1_UUID].uuid)
|
||||
self.assertEqual(element.InstanceState.ACTIVE.value,
|
||||
instances[self.INST2_UUID].state)
|
||||
self.assertEqual(self.INST2_UUID, instances[self.INST2_UUID].uuid)
|
||||
|
||||
def test_get_mapping(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
instance_mapping = model.mapping.instance_mapping
|
||||
self.assertEqual(2, len(instance_mapping))
|
||||
self.assertEqual('Node_0', instance_mapping[self.INST1_UUID])
|
||||
self.assertEqual('Node_1', instance_mapping[self.INST2_UUID])
|
||||
|
||||
def test_migrate_instance(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
instances = model.get_all_instances()
|
||||
keys = list(instances.keys())
|
||||
instance0 = instances[keys[0]]
|
||||
node0 = model.mapping.get_node_by_instance_uuid(instance0.uuid)
|
||||
instance1 = instances[keys[1]]
|
||||
node1 = model.mapping.get_node_by_instance_uuid(instance1.uuid)
|
||||
|
||||
self.assertEqual(
|
||||
False,
|
||||
model.migrate_instance(instance1, node1, node1))
|
||||
self.assertEqual(
|
||||
False,
|
||||
model.migrate_instance(instance1, node0, node0))
|
||||
self.assertEqual(
|
||||
True,
|
||||
model.migrate_instance(instance1, node1, node0))
|
||||
self.assertEqual(
|
||||
True,
|
||||
model.migrate_instance(instance1, node0, node1))
|
||||
|
||||
def test_unmap_by_uuid_log_warning(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
instances = model.get_all_instances()
|
||||
keys = list(instances.keys())
|
||||
instance0 = instances[keys[0]]
|
||||
uuid_ = uuidutils.generate_uuid()
|
||||
node = element.ComputeNode(id=1)
|
||||
node.uuid = uuid_
|
||||
|
||||
model.mapping.unmap_by_uuid(node.uuid, instance0.uuid)
|
||||
|
||||
def test_unmap_by_uuid(self):
|
||||
model = self.fake_cluster.generate_scenario_3_with_2_nodes()
|
||||
instances = model.get_all_instances()
|
||||
keys = list(instances.keys())
|
||||
instance0 = instances[keys[0]]
|
||||
node0 = model.mapping.get_node_by_instance_uuid(instance0.uuid)
|
||||
|
||||
model.mapping.unmap_by_uuid(node0.uuid, instance0.uuid)
|
||||
self.assertEqual(0, len(model.mapping.get_node_instances_by_uuid(
|
||||
node0.uuid)))
|
||||
@@ -47,9 +47,9 @@ class TestModel(base.TestCase):
|
||||
fake_cluster = faker_cluster_state.FakerModelCollector()
|
||||
model = fake_cluster.build_scenario_1()
|
||||
|
||||
self.assertEqual(5, len(model._nodes))
|
||||
self.assertEqual(35, len(model._instances))
|
||||
self.assertEqual(5, len(model.mapping.get_mapping()))
|
||||
self.assertEqual(5, len(model.get_all_compute_nodes()))
|
||||
self.assertEqual(35, len(model.get_all_instances()))
|
||||
self.assertEqual(8, len(model.edges()))
|
||||
|
||||
expected_struct_str = self.load_data('scenario_1.xml')
|
||||
parser = etree.XMLParser(remove_blank_text=True)
|
||||
|
||||
@@ -42,34 +42,37 @@ class TestDefaultScope(base.TestCase):
|
||||
for i in range(2)]
|
||||
model = default.DefaultScope(audit_scope,
|
||||
osc=mock.Mock()).get_scoped_model(cluster)
|
||||
nodes = {'Node_4': set([]), 'Node_0': set([]), 'Node_3': set([]),
|
||||
'Node_1': set(['INSTANCE_2']), 'Node_2': set([])}
|
||||
self.assertEqual(nodes, model.get_mapping().get_mapping())
|
||||
|
||||
expected_edges = [('INSTANCE_2', 'Node_1')]
|
||||
edges = [(src.uuid, dst.uuid) for src, dst in model.edges()]
|
||||
self.assertEqual(sorted(expected_edges), sorted(edges))
|
||||
|
||||
@mock.patch.object(nova_helper.NovaHelper, 'get_availability_zone_list')
|
||||
def test_get_scoped_model_without_scope(self, mock_zone_list):
|
||||
cluster = self.fake_cluster.generate_scenario_1()
|
||||
model = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([],
|
||||
osc=mock.Mock()).get_scoped_model(cluster)
|
||||
osc=mock.Mock()).get_scoped_model(model)
|
||||
assert not mock_zone_list.called
|
||||
|
||||
def test__remove_instance(self):
|
||||
cluster = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([],
|
||||
osc=mock.Mock())._remove_instance(cluster,
|
||||
'INSTANCE_2',
|
||||
'Node_1')
|
||||
expected_map = {'Node_4': set(['INSTANCE_7']), 'Node_1': set([]),
|
||||
'Node_0': set(['INSTANCE_0', 'INSTANCE_1']),
|
||||
'Node_3': set(['INSTANCE_6']),
|
||||
'Node_2': set(['INSTANCE_4', 'INSTANCE_5',
|
||||
'INSTANCE_3'])}
|
||||
self.assertEqual(expected_map, cluster.get_mapping().get_mapping())
|
||||
def test_remove_instance(self):
|
||||
model = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([], osc=mock.Mock()).remove_instance(
|
||||
model, model.get_instance_by_uuid('INSTANCE_2'), 'Node_1')
|
||||
expected_edges = [
|
||||
('INSTANCE_0', 'Node_0'),
|
||||
('INSTANCE_1', 'Node_0'),
|
||||
('INSTANCE_3', 'Node_2'),
|
||||
('INSTANCE_4', 'Node_2'),
|
||||
('INSTANCE_5', 'Node_2'),
|
||||
('INSTANCE_6', 'Node_3'),
|
||||
('INSTANCE_7', 'Node_4'),
|
||||
]
|
||||
edges = [(src.uuid, dst.uuid) for src, dst in model.edges()]
|
||||
self.assertEqual(sorted(expected_edges), sorted(edges))
|
||||
|
||||
@mock.patch.object(nova_helper.NovaHelper, 'get_aggregate_detail')
|
||||
@mock.patch.object(nova_helper.NovaHelper, 'get_aggregate_list')
|
||||
def test__collect_aggregates(self, mock_aggregate,
|
||||
mock_detailed_aggregate):
|
||||
def test_collect_aggregates(self, mock_aggregate, mock_detailed_aggregate):
|
||||
allowed_nodes = []
|
||||
mock_aggregate.return_value = [mock.Mock(id=i) for i in range(2)]
|
||||
mock_detailed_aggregate.side_effect = [
|
||||
@@ -126,12 +129,12 @@ class TestDefaultScope(base.TestCase):
|
||||
self.assertEqual(['Node_0', 'Node_1'], allowed_nodes)
|
||||
|
||||
@mock.patch.object(nova_helper.NovaHelper, 'get_availability_zone_list')
|
||||
def test__collect_zones(self, mock_zone_list):
|
||||
def test_collect_zones(self, mock_zone_list):
|
||||
allowed_nodes = []
|
||||
mock_zone_list.return_value = [
|
||||
mock.Mock(zoneName="AZ{0}".format(i+1),
|
||||
hosts={'Node_{0}'.format(2*i): 1,
|
||||
'Node_{0}'.format(2*i+1): 2})
|
||||
mock.Mock(zoneName="AZ{0}".format(i + 1),
|
||||
hosts={'Node_{0}'.format(2 * i): 1,
|
||||
'Node_{0}'.format(2 * i + 1): 2})
|
||||
for i in range(2)]
|
||||
default.DefaultScope([{'availability_zones': [{'name': "AZ1"}]}],
|
||||
osc=mock.Mock())._collect_zones(
|
||||
@@ -142,9 +145,9 @@ class TestDefaultScope(base.TestCase):
|
||||
def test_zones_wildcard_is_used(self, mock_zone_list):
|
||||
allowed_nodes = []
|
||||
mock_zone_list.return_value = [
|
||||
mock.Mock(zoneName="AZ{0}".format(i+1),
|
||||
hosts={'Node_{0}'.format(2*i): 1,
|
||||
'Node_{0}'.format(2*i+1): 2})
|
||||
mock.Mock(zoneName="AZ{0}".format(i + 1),
|
||||
hosts={'Node_{0}'.format(2 * i): 1,
|
||||
'Node_{0}'.format(2 * i + 1): 2})
|
||||
for i in range(2)]
|
||||
default.DefaultScope([{'availability_zones': [{'name': "*"}]}],
|
||||
osc=mock.Mock())._collect_zones(
|
||||
@@ -156,9 +159,9 @@ class TestDefaultScope(base.TestCase):
|
||||
def test_zones_wildcard_with_other_ids(self, mock_zone_list):
|
||||
allowed_nodes = []
|
||||
mock_zone_list.return_value = [
|
||||
mock.Mock(zoneName="AZ{0}".format(i+1),
|
||||
hosts={'Node_{0}'.format(2*i): 1,
|
||||
'Node_{0}'.format(2*i+1): 2})
|
||||
mock.Mock(zoneName="AZ{0}".format(i + 1),
|
||||
hosts={'Node_{0}'.format(2 * i): 1,
|
||||
'Node_{0}'.format(2 * i + 1): 2})
|
||||
for i in range(2)]
|
||||
scope_handler = default.DefaultScope(
|
||||
[{'availability_zones': [{'name': "*"}, {'name': 'AZ1'}]}],
|
||||
@@ -173,38 +176,42 @@ class TestDefaultScope(base.TestCase):
|
||||
validators.Draft4Validator(
|
||||
default.DefaultScope.DEFAULT_SCHEMA).validate(test_scope)
|
||||
|
||||
def test__exclude_resources(self):
|
||||
def test_exclude_resources(self):
|
||||
resources_to_exclude = [{'instances': [{'uuid': 'INSTANCE_1'},
|
||||
{'uuid': 'INSTANCE_2'}]},
|
||||
{'compute_nodes': [{'name': 'Node_1'},
|
||||
{'name': 'Node_2'}]}
|
||||
]
|
||||
{'name': 'Node_2'}]}]
|
||||
instances_to_exclude = []
|
||||
nodes_to_exclude = []
|
||||
default.DefaultScope([], osc=mock.Mock())._exclude_resources(
|
||||
default.DefaultScope([], osc=mock.Mock()).exclude_resources(
|
||||
resources_to_exclude, instances=instances_to_exclude,
|
||||
nodes=nodes_to_exclude)
|
||||
self.assertEqual(['Node_1', 'Node_2'], sorted(nodes_to_exclude))
|
||||
self.assertEqual(['INSTANCE_1', 'INSTANCE_2'],
|
||||
sorted(instances_to_exclude))
|
||||
|
||||
def test__remove_node_from_model(self):
|
||||
cluster = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([], osc=mock.Mock())._remove_node_from_model(
|
||||
['Node_1', 'Node_2'], cluster)
|
||||
expected_cluster = {'Node_0': set(['INSTANCE_0', 'INSTANCE_1']),
|
||||
'Node_1': set([]), 'Node_2': set([]),
|
||||
'Node_3': set(['INSTANCE_6']),
|
||||
'Node_4': set(['INSTANCE_7'])}
|
||||
self.assertEqual(expected_cluster, cluster.get_mapping().get_mapping())
|
||||
def test_remove_nodes_from_model(self):
|
||||
model = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([], osc=mock.Mock()).remove_nodes_from_model(
|
||||
['Node_1', 'Node_2'], model)
|
||||
expected_edges = [
|
||||
('INSTANCE_0', 'Node_0'),
|
||||
('INSTANCE_1', 'Node_0'),
|
||||
('INSTANCE_6', 'Node_3'),
|
||||
('INSTANCE_7', 'Node_4')]
|
||||
edges = [(src.uuid, dst.uuid) for src, dst in model.edges()]
|
||||
self.assertEqual(sorted(expected_edges), sorted(edges))
|
||||
|
||||
def test__remove_instances_from_model(self):
|
||||
cluster = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([], osc=mock.Mock())._remove_instances_from_model(
|
||||
['INSTANCE_1', 'INSTANCE_2'], cluster)
|
||||
expected_cluster = {'Node_0': set(['INSTANCE_0']), 'Node_1': set([]),
|
||||
'Node_2': set(['INSTANCE_3', 'INSTANCE_4',
|
||||
'INSTANCE_5']),
|
||||
'Node_3': set(['INSTANCE_6']),
|
||||
'Node_4': set(['INSTANCE_7'])}
|
||||
self.assertEqual(expected_cluster, cluster.get_mapping().get_mapping())
|
||||
def test_remove_instances_from_model(self):
|
||||
model = self.fake_cluster.generate_scenario_1()
|
||||
default.DefaultScope([], osc=mock.Mock()).remove_instances_from_model(
|
||||
['INSTANCE_1', 'INSTANCE_2'], model)
|
||||
expected_edges = [
|
||||
('INSTANCE_0', 'Node_0'),
|
||||
('INSTANCE_3', 'Node_2'),
|
||||
('INSTANCE_4', 'Node_2'),
|
||||
('INSTANCE_5', 'Node_2'),
|
||||
('INSTANCE_6', 'Node_3'),
|
||||
('INSTANCE_7', 'Node_4')]
|
||||
edges = [(src.uuid, dst.uuid) for src, dst in model.edges()]
|
||||
self.assertEqual(sorted(expected_edges), sorted(edges))
|
||||
|
||||
@@ -130,7 +130,7 @@ class TestUniformAirflow(base.TestCase):
|
||||
self.strategy.threshold_inlet_t = 22
|
||||
n1, n2 = self.strategy.group_hosts_by_airflow()
|
||||
instances = model.get_all_instances()
|
||||
instances.clear()
|
||||
[model.remove_instance(inst) for inst in instances.values()]
|
||||
instance_to_mig = self.strategy.choose_instance_to_migrate(n1)
|
||||
self.assertIsNone(instance_to_mig)
|
||||
|
||||
|
||||
@@ -127,7 +127,8 @@ class TestVMWorkloadConsolidation(base.TestCase):
|
||||
n1 = model.get_node_by_uuid('Node_0')
|
||||
n2 = model.get_node_by_uuid('Node_1')
|
||||
instance_uuid = 'INSTANCE_0'
|
||||
self.strategy.add_migration(instance_uuid, n1, n2, model)
|
||||
instance = model.get_instance_by_uuid(instance_uuid)
|
||||
self.strategy.add_migration(instance, n1, n2, model)
|
||||
self.assertEqual(1, len(self.strategy.solution.actions))
|
||||
expected = {'action_type': 'migrate',
|
||||
'input_parameters': {'destination_node': n2.uuid,
|
||||
@@ -196,11 +197,12 @@ class TestVMWorkloadConsolidation(base.TestCase):
|
||||
n1 = model.get_node_by_uuid('Node_0')
|
||||
n2 = model.get_node_by_uuid('Node_1')
|
||||
instance_uuid = 'INSTANCE_0'
|
||||
instance = model.get_instance_by_uuid(instance_uuid)
|
||||
self.strategy.disable_unused_nodes(model)
|
||||
self.assertEqual(0, len(self.strategy.solution.actions))
|
||||
|
||||
# Migrate VM to free the node
|
||||
self.strategy.add_migration(instance_uuid, n1, n2, model)
|
||||
self.strategy.add_migration(instance, n1, n2, model)
|
||||
|
||||
self.strategy.disable_unused_nodes(model)
|
||||
expected = {'action_type': 'change_nova_service_state',
|
||||
|
||||
@@ -74,7 +74,7 @@ class TestWorkloadBalance(base.TestCase):
|
||||
model = self.fake_cluster.generate_scenario_6_with_2_nodes()
|
||||
self.m_model.return_value = model
|
||||
node = model.get_node_by_uuid('Node_0')
|
||||
cap_cores = model.get_resource_by_uuid(element.ResourceType.cpu_cores)
|
||||
cap_cores = model.get_resource_by_uuid(element.ResourceType.vcpus)
|
||||
cap_mem = model.get_resource_by_uuid(element.ResourceType.memory)
|
||||
cap_disk = model.get_resource_by_uuid(element.ResourceType.disk)
|
||||
cores_used, mem_used, disk_used = (
|
||||
@@ -107,7 +107,7 @@ class TestWorkloadBalance(base.TestCase):
|
||||
self.m_model.return_value = model
|
||||
n1, n2, avg, w_map = self.strategy.group_hosts_by_cpu_util()
|
||||
instances = model.get_all_instances()
|
||||
instances.clear()
|
||||
[model.remove_instance(inst) for inst in instances.values()]
|
||||
instance_to_mig = self.strategy.choose_instance_to_migrate(
|
||||
n1, avg, w_map)
|
||||
self.assertIsNone(instance_to_mig)
|
||||
|
||||
Reference in New Issue
Block a user