Merge "Add reource_name in action input parameter field"

This commit is contained in:
Zuul 2019-07-10 06:57:36 +00:00 committed by Gerrit Code Review
commit a01b4ddc81
14 changed files with 117 additions and 66 deletions

View File

@ -60,6 +60,10 @@ class ChangeNovaServiceState(base.BaseAction):
'type': 'string',
"minlength": 1
},
'resource_name': {
'type': 'string',
"minlength": 1
},
'state': {
'type': 'string',
'enum': [element.ServiceState.ONLINE.value,

View File

@ -87,6 +87,10 @@ class Migrate(base.BaseAction):
"([a-fA-F0-9]){4}-([a-fA-F0-9]){4}-"
"([a-fA-F0-9]){12}$")
},
'resource_name': {
'type': 'string',
"minlength": 1
},
'source_node': {
'type': 'string',
"minLength": 1

View File

@ -46,6 +46,7 @@ class Instance(compute_resource.ComputeResource):
# If the resource is excluded by the scope,
# 'watcher_exclude' property will be set True.
"watcher_exclude": wfields.BooleanField(default=False),
"name": wfields.StringField(),
"state": wfields.StringField(default=InstanceState.ACTIVE.value),
"memory": wfields.NonNegativeIntegerField(),
"disk": wfields.IntegerField(),

View File

@ -450,7 +450,8 @@ class BaseStrategy(loadable.Loadable):
destination_node):
parameters = {'migration_type': migration_type,
'source_node': source_node.uuid,
'destination_node': destination_node.uuid}
'destination_node': destination_node.uuid,
'resource_name': instance.name}
self.solution.add_action(action_type=self.MIGRATION,
resource_id=instance.uuid,
input_parameters=parameters)

View File

@ -323,7 +323,8 @@ class BasicConsolidation(base.ServerConsolidationBaseStrategy):
def add_action_disable_node(self, node):
parameters = {'state': element.ServiceState.DISABLED.value,
'disabled_reason': self.REASON_FOR_DISABLE}
'disabled_reason': self.REASON_FOR_DISABLE,
'resource_name': node.hostname}
self.solution.add_action(action_type=self.CHANGE_NOVA_SERVICE_STATE,
resource_id=node.uuid,
input_parameters=parameters)

View File

@ -185,7 +185,8 @@ class HostMaintenance(base.HostMaintenanceBaseStrategy):
def add_action_enable_compute_node(self, node):
"""Add an action for node enabler into the solution."""
params = {'state': element.ServiceState.ENABLED.value}
params = {'state': element.ServiceState.ENABLED.value,
'resource_name': node.hostname}
self.solution.add_action(
action_type=self.CHANGE_NOVA_SERVICE_STATE,
resource_id=node.uuid,
@ -194,7 +195,8 @@ class HostMaintenance(base.HostMaintenanceBaseStrategy):
def add_action_maintain_compute_node(self, node):
"""Add an action for node maintenance into the solution."""
params = {'state': element.ServiceState.DISABLED.value,
'disabled_reason': self.REASON_FOR_MAINTAINING}
'disabled_reason': self.REASON_FOR_MAINTAINING,
'resource_name': node.hostname}
self.solution.add_action(
action_type=self.CHANGE_NOVA_SERVICE_STATE,
resource_id=node.uuid,
@ -221,7 +223,8 @@ class HostMaintenance(base.HostMaintenanceBaseStrategy):
migration_type = 'cold'
params = {'migration_type': migration_type,
'source_node': src_node.uuid}
'source_node': src_node.uuid,
'resource_name': instance.name}
if des_node:
params['destination_node'] = des_node.uuid
self.solution.add_action(action_type=self.INSTANCE_MIGRATION,

View File

@ -280,7 +280,8 @@ class NoisyNeighbor(base.NoisyNeighborBaseStrategy):
mig_destination_node):
parameters = {'migration_type': 'live',
'source_node': mig_source_node.uuid,
'destination_node': mig_destination_node.uuid}
'destination_node': mig_destination_node.uuid,
'resource_name': instance_to_migrate.name}
self.solution.add_action(action_type=self.MIGRATION,
resource_id=instance_to_migrate.uuid,
input_parameters=parameters)

View File

@ -282,7 +282,8 @@ class OutletTempControl(base.ThermalOptimizationBaseStrategy):
instance_src, mig_source_node, mig_destination_node):
parameters = {'migration_type': 'live',
'source_node': mig_source_node.uuid,
'destination_node': mig_destination_node.uuid}
'destination_node': mig_destination_node.uuid,
'resource_name': instance_src.name}
self.solution.add_action(action_type=self.MIGRATION,
resource_id=instance_src.uuid,
input_parameters=parameters)

View File

@ -165,7 +165,8 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
:param node: node object
:return: None
"""
params = {'state': element.ServiceState.ENABLED.value}
params = {'state': element.ServiceState.ENABLED.value,
'resource_name': node.hostname}
self.solution.add_action(
action_type=self.CHANGE_NOVA_SERVICE_STATE,
resource_id=node.uuid,
@ -179,7 +180,8 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
:return: None
"""
params = {'state': element.ServiceState.DISABLED.value,
'disabled_reason': self.REASON_FOR_DISABLE}
'disabled_reason': self.REASON_FOR_DISABLE,
'resource_name': node.hostname}
self.solution.add_action(
action_type=self.CHANGE_NOVA_SERVICE_STATE,
resource_id=node.uuid,

View File

@ -83,6 +83,7 @@ class TestNovaClusterDataModelCollector(base.TestCase):
tenant_id='ff560f7e-dbc8-771f-960c-164482fce21b',
)
setattr(fake_instance, 'OS-EXT-STS:vm_state', 'VM_STATE')
setattr(fake_instance, 'name', 'fake_instance')
# Returns the hypervisors with details (service) but no servers.
m_nova_helper.get_compute_node_list.return_value = [fake_compute_node]
# Returns the hypervisor with servers and details (service).

View File

@ -1,47 +1,47 @@
<ModelRoot>
<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 watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_0" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="26F03131-32CB-4697-9D61-9123F87A8147"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_0" uuid="INSTANCE_0" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_1" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="26F03131-32CB-4697-9D61-9123F87A8147"/>
</ComputeNode>
<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 watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_2" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="109F7909-0607-4712-B32C-5CC6D49D2F15"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_2" uuid="INSTANCE_2" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="109F7909-0607-4712-B32C-5CC6D49D2F15"/>
</ComputeNode>
<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 watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_3" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_4" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_5" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_3" uuid="INSTANCE_3" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_4" uuid="INSTANCE_4" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_5" uuid="INSTANCE_5" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
</ComputeNode>
<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 watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_6" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_6" uuid="INSTANCE_6" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
</ComputeNode>
<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 watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_7" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_7" uuid="INSTANCE_7" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
</ComputeNode>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_10" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_11" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_12" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_13" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_14" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_15" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_16" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_17" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_18" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_19" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_20" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_21" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_22" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_23" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_24" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_25" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_26" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_27" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_28" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_29" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_30" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_31" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_32" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_33" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_34" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_8" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="" uuid="INSTANCE_9" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_10" uuid="INSTANCE_10" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_11" uuid="INSTANCE_11" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_12" uuid="INSTANCE_12" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_13" uuid="INSTANCE_13" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_14" uuid="INSTANCE_14" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_15" uuid="INSTANCE_15" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_16" uuid="INSTANCE_16" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_17" uuid="INSTANCE_17" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_18" uuid="INSTANCE_18" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_19" uuid="INSTANCE_19" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_20" uuid="INSTANCE_20" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_21" uuid="INSTANCE_21" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_22" uuid="INSTANCE_22" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_23" uuid="INSTANCE_23" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_24" uuid="INSTANCE_24" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_25" uuid="INSTANCE_25" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_26" uuid="INSTANCE_26" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_27" uuid="INSTANCE_27" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_28" uuid="INSTANCE_28" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_29" uuid="INSTANCE_29" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_30" uuid="INSTANCE_30" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_31" uuid="INSTANCE_31" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_32" uuid="INSTANCE_32" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_33" uuid="INSTANCE_33" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_34" uuid="INSTANCE_34" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_8" uuid="INSTANCE_8" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
<Instance watcher_exclude="False" state="active" human_id="" name="INSTANCE_9" uuid="INSTANCE_9" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
</ModelRoot>

View File

@ -99,6 +99,7 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
project_id = "91FFFE30-78A0-4152-ACD2-8310FF274DC9"
instance_attributes = {
"uuid": instance_uuid,
"name": instance_uuid,
"memory": 2,
"disk": 20,
"disk_capacity": 20,

View File

@ -101,7 +101,8 @@ class TestHostMaintenance(TestBaseStrategy):
expected = [{'action_type': 'change_nova_service_state',
'input_parameters': {
'state': 'enabled',
'resource_id': 'Node_0'}}]
'resource_id': 'Node_0',
'resource_name': 'hostname_0'}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_add_action_maintain_compute_node(self):
@ -113,7 +114,8 @@ class TestHostMaintenance(TestBaseStrategy):
'input_parameters': {
'state': 'disabled',
'disabled_reason': 'watcher_maintaining',
'resource_id': 'Node_0'}}]
'resource_id': 'Node_0',
'resource_name': 'hostname_0'}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_instance_migration(self):
@ -128,7 +130,9 @@ class TestHostMaintenance(TestBaseStrategy):
'input_parameters': {'destination_node': node_1.uuid,
'source_node': node_0.uuid,
'migration_type': 'live',
'resource_id': instance_0.uuid}}]
'resource_id': instance_0.uuid,
'resource_name': instance_0.name
}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_instance_migration_without_dest_node(self):
@ -141,7 +145,9 @@ class TestHostMaintenance(TestBaseStrategy):
expected = [{'action_type': 'migrate',
'input_parameters': {'source_node': node_0.uuid,
'migration_type': 'live',
'resource_id': instance_0.uuid}}]
'resource_id': instance_0.uuid,
'resource_name': instance_0.name
}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_host_migration(self):
@ -157,12 +163,16 @@ class TestHostMaintenance(TestBaseStrategy):
'input_parameters': {'destination_node': node_1.uuid,
'source_node': node_0.uuid,
'migration_type': 'live',
'resource_id': instance_0.uuid}},
'resource_id': instance_0.uuid,
'resource_name': instance_0.name
}},
{'action_type': 'migrate',
'input_parameters': {'destination_node': node_1.uuid,
'source_node': node_0.uuid,
'migration_type': 'live',
'resource_id': instance_1.uuid}}]
'resource_id': instance_1.uuid,
'resource_name': instance_1.name
}}]
self.assertIn(expected[0], self.strategy.solution.actions)
self.assertIn(expected[1], self.strategy.solution.actions)
@ -209,10 +219,12 @@ class TestHostMaintenance(TestBaseStrategy):
expected = [{'action_type': 'change_nova_service_state',
'input_parameters': {
'resource_id': 'Node_3',
'resource_name': 'hostname_3',
'state': 'enabled'}},
{'action_type': 'change_nova_service_state',
'input_parameters': {
'resource_id': 'Node_2',
'resource_name': 'hostname_2',
'state': 'disabled',
'disabled_reason': 'watcher_maintaining'}},
{'action_type': 'migrate',
@ -220,7 +232,8 @@ class TestHostMaintenance(TestBaseStrategy):
'destination_node': node_3.uuid,
'source_node': node_2.uuid,
'migration_type': 'live',
'resource_id': instance_4.uuid}}]
'resource_id': instance_4.uuid,
'resource_name': instance_4.name}}]
self.assertEqual(expected, self.strategy.solution.actions)
result = self.strategy.post_execute()

View File

@ -127,7 +127,8 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
'input_parameters': {'destination_node': n2.uuid,
'source_node': n1.uuid,
'migration_type': 'live',
'resource_id': instance_uuid}}
'resource_id': instance.uuid,
'resource_name': instance.name}}
self.assertEqual(expected, self.strategy.solution.actions[0])
def test_add_migration_with_paused_state(self):
@ -149,7 +150,8 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
'input_parameters': {'destination_node': n2.uuid,
'source_node': n1.uuid,
'migration_type': 'live',
'resource_id': instance_uuid}}
'resource_id': instance.uuid,
'resource_name': instance.name}}
self.assertEqual(expected, self.strategy.solution.actions[0])
def test_is_overloaded(self):
@ -191,7 +193,8 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
self.strategy.add_action_enable_compute_node(n)
expected = [{'action_type': 'change_nova_service_state',
'input_parameters': {'state': 'enabled',
'resource_id': 'Node_0'}}]
'resource_id': 'Node_0',
'resource_name': 'hostname_0'}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_add_action_disable_node(self):
@ -204,7 +207,8 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
'input_parameters': {
'state': 'disabled',
'disabled_reason': 'watcher_disabled',
'resource_id': 'Node_0'}}]
'resource_id': 'Node_0',
'resource_name': 'hostname_0'}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_disable_unused_nodes(self):
@ -226,7 +230,8 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
'input_parameters': {
'state': 'disabled',
'disabled_reason': 'watcher_disabled',
'resource_id': 'Node_0'}}
'resource_id': 'Node_0',
'resource_name': 'hostname_0'}}
self.assertEqual(2, len(self.strategy.solution.actions))
self.assertEqual(expected, self.strategy.solution.actions[1])
@ -246,13 +251,15 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
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)
cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
self.strategy.consolidation_phase(cc)
expected = [{'action_type': 'migrate',
'input_parameters': {'destination_node': n2.uuid,
'source_node': n1.uuid,
'migration_type': 'live',
'resource_id': instance_uuid}}]
'resource_id': instance.uuid,
'resource_name': instance.name}}]
self.assertEqual(expected, self.strategy.solution.actions)
def test_strategy(self):
@ -266,32 +273,39 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
n1 = model.get_node_by_uuid('Node_0')
self.strategy.get_relative_cluster_utilization = mock.MagicMock()
self.strategy.do_execute()
n2 = self.strategy.solution.actions[0][
n2_uuid = self.strategy.solution.actions[0][
'input_parameters']['destination_node']
n3 = self.strategy.solution.actions[2][
n2 = model.get_node_by_uuid(n2_uuid)
n3_uuid = self.strategy.solution.actions[2][
'input_parameters']['resource_id']
n4 = self.strategy.solution.actions[3][
n3 = model.get_node_by_uuid(n3_uuid)
n4_uuid = self.strategy.solution.actions[3][
'input_parameters']['resource_id']
n4 = model.get_node_by_uuid(n4_uuid)
expected = [{'action_type': 'migrate',
'input_parameters': {'destination_node': n2,
'input_parameters': {'destination_node': n2.uuid,
'source_node': n1.uuid,
'migration_type': 'live',
'resource_id': 'INSTANCE_3'}},
'resource_id': 'INSTANCE_3',
'resource_name': ''}},
{'action_type': 'migrate',
'input_parameters': {'destination_node': n2,
'input_parameters': {'destination_node': n2.uuid,
'source_node': n1.uuid,
'migration_type': 'live',
'resource_id': 'INSTANCE_1'}},
'resource_id': 'INSTANCE_1',
'resource_name': ''}},
{'action_type': 'change_nova_service_state',
'input_parameters': {'state': 'disabled',
'disabled_reason':
'watcher_disabled',
'resource_id': n3}},
'resource_id': n3.uuid,
'resource_name': n3.hostname}},
{'action_type': 'change_nova_service_state',
'input_parameters': {'state': 'disabled',
'disabled_reason':
'watcher_disabled',
'resource_id': n4}}]
'resource_id': n4.uuid,
'resource_name': n4.hostname}}]
self.assertEqual(expected, self.strategy.solution.actions)
compute_nodes_count = len(self.strategy.get_available_compute_nodes())
@ -319,16 +333,19 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
'input_parameters': {'destination_node': n2.uuid,
'migration_type': 'live',
'resource_id': 'INSTANCE_6',
'resource_name': '',
'source_node': n1.uuid}},
{'action_type': 'migrate',
'input_parameters': {'destination_node': n2.uuid,
'migration_type': 'live',
'resource_id': 'INSTANCE_7',
'resource_name': '',
'source_node': n1.uuid}},
{'action_type': 'migrate',
'input_parameters': {'destination_node': n2.uuid,
'migration_type': 'live',
'resource_id': 'INSTANCE_8',
'resource_name': '',
'source_node': n1.uuid}}]
self.assertEqual(expected, self.strategy.solution.actions)
self.strategy.consolidation_phase(cc)
@ -336,6 +353,7 @@ class TestVMWorkloadConsolidation(TestBaseStrategy):
'input_parameters': {'destination_node': n1.uuid,
'migration_type': 'live',
'resource_id': 'INSTANCE_7',
'resource_name': '',
'source_node': n2.uuid}})
self.assertEqual(expected, self.strategy.solution.actions)
self.strategy.optimize_solution()