ScalingCriteria,
VnfAlarm,
AlarmAction,
+ HealingAction,
)
log = logging.getLogger()
"ip-address": "192.168.160.2",
}
],
+ "count-index": 0,
"status": "ACTIVE",
"vim-id": "63a65636-9fc8-4022-b070-980823e6266a",
"name": "cirros_ns-1-cirros_vnfd-VM-1",
"ip-address": "192.168.160.10",
}
],
+ "count-index": 0,
"status": "ACTIVE",
"vim-id": "a154b8d3-2b10-421a-a51d-4b391d9bd366",
"name": "cirros_ns-2-cirros_vnfd-VM-1",
"vdu-configuration-id": "cirros_vnfd-VM-vdu-configuration",
}
],
+ "healing-aspect": [
+ {
+ "id": "cirros_vnfd-VM-autoheal",
+ "healing-policy": [
+ {
+ "vdu-id": "cirros_vnfd-VM",
+ "event-name": "heal-alarm",
+ "recovery-type": "automatic",
+ "action-on-recovery": "REDEPLOY_ONLY",
+ "cooldown-time": 180,
+ "day1": False,
+ }
+ ],
+ }
+ ],
"instantiation-level": [
{
"id": "default-instantiation-level",
ScalingAlarm,
VnfAlarm,
AlarmAction,
+ HealingAction,
]
create_alarm.side_effect = _test_configure_scaling_groups_create_alarm
create_alarm.assert_not_called_with = assert_not_called_with
config = Config()
- agent = PolicyModuleAgent(config, self.loop)
+ agent = PolicyModuleAgent(config)
self.loop.run_until_complete(
agent.autoscaling_service.configure_scaling_groups("test_nsr_id")
)
threshold=80,
vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
vnf_member_index="1",
+ action="scale_out",
+ vnfr=vnfr_record_mocks[0],
+ vnfd=vnfd_record_mock,
)
create_alarm.assert_not_called_with(
metric_name="average_memory_utilization",
threshold=20,
vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
vnf_member_index="1",
+ action="scale_out",
+ vnfr=vnfr_record_mocks[0],
+ vnfd=vnfd_record_mock,
)
create_alarm.assert_any_call(
metric_name="average_memory_utilization",
threshold=80,
vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
vnf_member_index="2",
+ action="scale_out",
+ vnfr=vnfr_record_mocks[1],
+ vnfd=vnfd_record_mock,
)
create_alarm.assert_not_called_with(
metric_name="average_memory_utilization",
threshold=20,
vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
vnf_member_index="2",
+ action="scale_out",
+ vnfr=vnfr_record_mocks[1],
+ vnfd=vnfd_record_mock,
)
scaling_record = ScalingGroup.get()
self.assertEqual(scaling_record.name, "scale_cirros_vnfd-VM")
get_vnfd.return_value = vnfd_record_mock
create_alarm.side_effect = _test_configure_vnf_alarms_create_alarm
config = Config()
- agent = PolicyModuleAgent(config, self.loop)
+ agent = PolicyModuleAgent(config)
self.loop.run_until_complete(
agent.alarming_service.configure_vnf_alarms("test_nsr_id")
)
vnf_member_index="1",
threshold=20.0,
operation="LT",
+ action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}",
+ vnfr=vnfr_record_mocks[0],
+ vnfd=vnfd_record_mock,
)
create_alarm.assert_any_call(
metric_name="average_memory_utilization",
vnf_member_index="2",
threshold=20.0,
operation="LT",
+ action="{'webhook': ['localhost:9090', 'localhost:9090', 'localhost:9090']}",
+ vnfr=vnfr_record_mocks[1],
+ vnfd=vnfd_record_mock,
+ )
+
+ @patch.object(DbMongo, "db_connect", Mock())
+ @patch.object(KafkaProducer, "__init__")
+ @patch.object(MonClient, "create_alarm")
+ @patch.object(CommonDbClient, "get_vnfd")
+ @patch.object(CommonDbClient, "get_nsr")
+ @patch.object(CommonDbClient, "get_vnfr")
+ def test_configure_healing_alarms(
+ self, get_vnfr, get_nsr, get_vnfd, create_alarm, kafka_producer_init
+ ):
+ def _test_configure_scaling_groups_get_vnfr(*args, **kwargs):
+ if "1" in args[1]:
+ return vnfr_record_mocks[0]
+ if "2" in args[1]:
+ return vnfr_record_mocks[1]
+
+ async def _test_configure_healing_alarms_create_alarm(*args, **kwargs):
+ return uuid.uuid4()
+
+ kafka_producer_init.return_value = None
+ get_vnfr.side_effect = _test_configure_scaling_groups_get_vnfr
+ get_nsr.return_value = nsr_record_mock
+ get_vnfd.return_value = vnfd_record_mock
+ create_alarm.side_effect = _test_configure_healing_alarms_create_alarm
+ config = Config()
+ agent = PolicyModuleAgent(config)
+ self.loop.run_until_complete(
+ agent.healing_service.configure_healing_alarms("test_nsr_id")
+ )
+ create_alarm.assert_any_call(
+ metric_name="vm_status",
+ ns_id="test_nsr_id",
+ vdu_name="cirros_ns-1-cirros_vnfd-VM-1",
+ vnf_member_index="1",
+ threshold=1,
+ operation="LT",
+ statistic="AVERAGE",
+ )
+ create_alarm.assert_any_call(
+ metric_name="vm_status",
+ ns_id="test_nsr_id",
+ vdu_name="cirros_ns-2-cirros_vnfd-VM-1",
+ vnf_member_index="2",
+ threshold=1,
+ operation="LT",
+ statistic="AVERAGE",
)