Beispiel #1
0
    def test_deactivate_unused_hypervisors(self):
        model = self.fake_cluster.generate_scenario_1()
        fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
        strategy = SmartStrategy()
        strategy.ceilometer = mock.MagicMock(
            statistic_aggregation=fake_metrics.mock_get_statistics)
        h1 = model.get_hypervisor_from_id('Node_0')
        h2 = model.get_hypervisor_from_id('Node_1')
        vm_uuid = 'VM_0'
        strategy.deactivate_unused_hypervisors(model)
        self.assertEqual(0, len(strategy.solution.actions))

        # Migrate VM to free the hypervisor
        strategy.add_migration(vm_uuid, h1, h2, model)

        strategy.deactivate_unused_hypervisors(model)
        expected = {
            'action_type': 'change_nova_service_state',
            'input_parameters': {
                'state': 'down',
                'resource_id': 'Node_0'
            }
        }
        self.assertEqual(2, len(strategy.solution.actions))
        self.assertEqual(expected, strategy.solution.actions[1])
Beispiel #2
0
 def test_get_relative_cluster_utilization(self):
     model = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     cru = strategy.get_relative_cluster_utilization(model)
     expected_cru = {'cpu': 0.05, 'disk': 0.05, 'ram': 0.0234375}
     self.assertEqual(expected_cru, cru)
Beispiel #3
0
 def test_get_relative_hypervisor_utilization(self):
     model = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     hypervisor = model.get_hypervisor_from_id('Node_0')
     rhu = strategy.get_relative_hypervisor_utilization(hypervisor, model)
     expected_rhu = {'disk': 0.04, 'ram': 0.015625, 'cpu': 0.025}
     self.assertEqual(expected_rhu, rhu)
Beispiel #4
0
 def test_get_hypervisor_capacity(self):
     cluster = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(cluster)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     node_0 = cluster.get_hypervisor_from_id("Node_0")
     node_util = dict(cpu=40, ram=64, disk=250)
     self.assertEqual(node_util,
                      strategy.get_hypervisor_capacity(node_0, cluster))
Beispiel #5
0
 def test_get_vm_utilization(self):
     cluster = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(cluster)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     vm_0 = cluster.get_vm_from_id("VM_0")
     vm_util = dict(cpu=1.0, ram=1, disk=10)
     self.assertEqual(vm_util,
                      strategy.get_vm_utilization(vm_0.uuid, cluster))
Beispiel #6
0
 def test_offload_phase(self):
     model = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
     strategy.offload_phase(model, cc)
     expected = []
     self.assertEqual(expected, strategy.solution.actions)
Beispiel #7
0
 def test_strategy2(self):
     model = self.fake_cluster.generate_scenario_3()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     h1 = model.get_hypervisor_from_id('Node_0')
     h2 = model.get_hypervisor_from_id('Node_1')
     cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
     strategy.offload_phase(model, cc)
     expected = [{
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': h2,
             'migration_type': 'live',
             'resource_id': 'VM_6',
             'src_hypervisor': h1
         }
     }, {
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': h2,
             'migration_type': 'live',
             'resource_id': 'VM_7',
             'src_hypervisor': h1
         }
     }, {
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': h2,
             'migration_type': 'live',
             'resource_id': 'VM_8',
             'src_hypervisor': h1
         }
     }]
     self.assertEqual(expected, strategy.solution.actions)
     strategy.consolidation_phase(model, cc)
     expected.append({
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': h1,
             'migration_type': 'live',
             'resource_id': 'VM_7',
             'src_hypervisor': h2
         }
     })
     self.assertEqual(expected, strategy.solution.actions)
     strategy.optimize_solution(model)
     del expected[3]
     del expected[1]
     self.assertEqual(expected, strategy.solution.actions)
Beispiel #8
0
    def test_vm_fits(self):
        model = self.fake_cluster.generate_scenario_1()
        fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
        strategy = SmartStrategy()
        strategy.ceilometer = mock.MagicMock(
            statistic_aggregation=fake_metrics.mock_get_statistics)
        h = model.get_hypervisor_from_id('Node_1')
        vm_uuid = 'VM_0'
        cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
        res = strategy.vm_fits(vm_uuid, h, model, cc)
        self.assertEqual(True, res)

        cc = {'cpu': 0.025, 'ram': 1.0, 'disk': 1.0}
        res = strategy.vm_fits(vm_uuid, h, model, cc)
        self.assertEqual(False, res)
Beispiel #9
0
 def test_deactivate_hypervisor(self):
     model = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     h = model.get_hypervisor_from_id('Node_0')
     strategy.deactivate_hypervisor(h)
     expected = [{
         'action_type': 'change_nova_service_state',
         'input_parameters': {
             'state': 'down',
             'resource_id': 'Node_0'
         }
     }]
     self.assertEqual(expected, strategy.solution.actions)
Beispiel #10
0
 def test_strategy(self):
     model = self.fake_cluster.generate_scenario_2()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     h1 = model.get_hypervisor_from_id('Node_0')
     h2 = model.get_hypervisor_from_id('Node_1')
     cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
     strategy.offload_phase(model, cc)
     strategy.consolidation_phase(model, cc)
     strategy.optimize_solution(model)
     strategy.deactivate_unused_hypervisors(model)
     dst_hyp = strategy.solution.actions[0]['input_parameters'][
         'dst_hypervisor']
     expected = [{
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': dst_hyp,
             'src_hypervisor': h1,
             'migration_type': 'live',
             'resource_id': 'VM_3'
         }
     }, {
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': dst_hyp,
             'src_hypervisor': h1,
             'migration_type': 'live',
             'resource_id': 'VM_1'
         }
     }, {
         'action_type': 'change_nova_service_state',
         'input_parameters': {
             'state': 'down',
             'resource_id': 'Node_3'
         }
     }, {
         'action_type': 'change_nova_service_state',
         'input_parameters': {
             'state': 'down',
             'resource_id': 'Node_2'
         }
     }]
     self.assertEqual(expected, strategy.solution.actions)
Beispiel #11
0
    def test_is_overloaded(self):
        strategy = SmartStrategy()
        model = self.fake_cluster.generate_scenario_1()
        fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
        strategy.ceilometer = mock.MagicMock(
            statistic_aggregation=fake_metrics.mock_get_statistics)
        h1 = model.get_hypervisor_from_id('Node_0')
        cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
        res = strategy.is_overloaded(h1, model, cc)
        self.assertEqual(False, res)

        cc = {'cpu': 0.025, 'ram': 1.0, 'disk': 1.0}
        res = strategy.is_overloaded(h1, model, cc)
        self.assertEqual(False, res)

        cc = {'cpu': 0.024, 'ram': 1.0, 'disk': 1.0}
        res = strategy.is_overloaded(h1, model, cc)
        self.assertEqual(True, res)
Beispiel #12
0
 def test_add_migration(self):
     model = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     h1 = model.get_hypervisor_from_id('Node_0')
     h2 = model.get_hypervisor_from_id('Node_1')
     vm_uuid = 'VM_0'
     strategy.add_migration(vm_uuid, h1, h2, model)
     self.assertEqual(1, len(strategy.solution.actions))
     expected = {
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': h2,
             'src_hypervisor': h1,
             'migration_type': 'live',
             'resource_id': vm_uuid
         }
     }
     self.assertEqual(expected, strategy.solution.actions[0])
Beispiel #13
0
 def test_consolidation_phase(self):
     model = self.fake_cluster.generate_scenario_1()
     fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model)
     strategy = SmartStrategy()
     strategy.ceilometer = mock.MagicMock(
         statistic_aggregation=fake_metrics.mock_get_statistics)
     h1 = model.get_hypervisor_from_id('Node_0')
     h2 = model.get_hypervisor_from_id('Node_1')
     vm_uuid = 'VM_0'
     cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0}
     strategy.consolidation_phase(model, cc)
     expected = [{
         'action_type': 'migrate',
         'input_parameters': {
             'dst_hypervisor': h2,
             'src_hypervisor': h1,
             'migration_type': 'live',
             'resource_id': vm_uuid
         }
     }]
     self.assertEqual(expected, strategy.solution.actions)