Fix respawn action for alarm monitor
Modify the validation for VnfPolicyNotFound by breaking the logic in to two steps: 1. Verify if action is already part of DEFAULT_ACTIONS 2. If 1. fails, try to get the policy for action name defined in template. If 2 fails, only then raise an exception. also fix the vim_auth args sent to the monitoring policy execute_action method. Closes-Bug: #365435 Change-Id: I7923189575c44efcd4121b0158c270f801b7cf2b
This commit is contained in:
parent
19d04d5223
commit
e09c25a70b
|
@ -38,6 +38,7 @@ vnffgd_tosca_template = yaml.load(_get_template('tosca_vnffgd_template.yaml'))
|
||||||
vnffgd_invalid_tosca_template = yaml.load(_get_template(
|
vnffgd_invalid_tosca_template = yaml.load(_get_template(
|
||||||
'tosca_invalid_vnffgd_template.yaml'))
|
'tosca_invalid_vnffgd_template.yaml'))
|
||||||
vnfd_scale_tosca_template = _get_template('tosca_scale.yaml')
|
vnfd_scale_tosca_template = _get_template('tosca_scale.yaml')
|
||||||
|
vnfd_alarm_tosca_template = _get_template('test_tosca_vnfd_alarm_respawn.yaml')
|
||||||
|
|
||||||
|
|
||||||
def get_dummy_vnfd_obj():
|
def get_dummy_vnfd_obj():
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
|
||||||
|
description: Demo example
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
template_name: sample-tosca-vnfd
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
node_templates:
|
||||||
|
VDU1:
|
||||||
|
type: tosca.nodes.nfv.VDU.Tacker
|
||||||
|
capabilities:
|
||||||
|
nfv_compute:
|
||||||
|
properties:
|
||||||
|
disk_size: 1 GB
|
||||||
|
mem_size: 512 MB
|
||||||
|
num_cpus: 2
|
||||||
|
properties:
|
||||||
|
image: cirros-0.3.4-x86_64-uec
|
||||||
|
mgmt_driver: noop
|
||||||
|
availability_zone: nova
|
||||||
|
|
||||||
|
CP1:
|
||||||
|
type: tosca.nodes.nfv.CP.Tacker
|
||||||
|
properties:
|
||||||
|
management: true
|
||||||
|
anti_spoofing_protection: false
|
||||||
|
requirements:
|
||||||
|
- virtualLink:
|
||||||
|
node: VL1
|
||||||
|
- virtualBinding:
|
||||||
|
node: VDU1
|
||||||
|
|
||||||
|
VL1:
|
||||||
|
type: tosca.nodes.nfv.VL
|
||||||
|
properties:
|
||||||
|
network_name: net_mgmt
|
||||||
|
vendor: Tacker
|
||||||
|
|
||||||
|
policies:
|
||||||
|
- vdu1_cpu_usage_monitoring_policy:
|
||||||
|
type: tosca.policies.tacker.Alarming
|
||||||
|
triggers:
|
||||||
|
resize_compute:
|
||||||
|
event_type:
|
||||||
|
type: tosca.events.resource.utilization
|
||||||
|
implementation: ceilometer
|
||||||
|
metrics: cpu_util
|
||||||
|
condition:
|
||||||
|
threshold: 50
|
||||||
|
constraint: utilization greater_than 50%
|
||||||
|
period: 600
|
||||||
|
evaluations: 1
|
||||||
|
method: avg
|
||||||
|
comparison_operator: gt
|
||||||
|
action:
|
||||||
|
resize_compute:
|
||||||
|
action_name: respawn
|
|
@ -16,6 +16,7 @@
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
from mock import patch
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from tacker.common import exceptions
|
from tacker.common import exceptions
|
||||||
|
@ -62,6 +63,7 @@ class TestVNFMPlugin(db_base.SqlTestCase):
|
||||||
self._stub_get_vim()
|
self._stub_get_vim()
|
||||||
self._mock_device_manager()
|
self._mock_device_manager()
|
||||||
self._mock_vnf_monitor()
|
self._mock_vnf_monitor()
|
||||||
|
self._mock_vnf_alarm_monitor()
|
||||||
self._mock_green_pool()
|
self._mock_green_pool()
|
||||||
self._insert_dummy_vim()
|
self._insert_dummy_vim()
|
||||||
self.vnfm_plugin = plugin.VNFMPlugin()
|
self.vnfm_plugin = plugin.VNFMPlugin()
|
||||||
|
@ -108,6 +110,13 @@ class TestVNFMPlugin(db_base.SqlTestCase):
|
||||||
self._mock(
|
self._mock(
|
||||||
'tacker.vnfm.monitor.VNFMonitor', fake_vnf_monitor)
|
'tacker.vnfm.monitor.VNFMonitor', fake_vnf_monitor)
|
||||||
|
|
||||||
|
def _mock_vnf_alarm_monitor(self):
|
||||||
|
self._vnf_alarm_monitor = mock.Mock(wraps=FakeVNFMonitor())
|
||||||
|
fake_vnf_alarm_monitor = mock.Mock()
|
||||||
|
fake_vnf_alarm_monitor.return_value = self._vnf_alarm_monitor
|
||||||
|
self._mock(
|
||||||
|
'tacker.vnfm.monitor.VNFAlarmMonitor', fake_vnf_alarm_monitor)
|
||||||
|
|
||||||
def _insert_dummy_device_template(self):
|
def _insert_dummy_device_template(self):
|
||||||
session = self.context.session
|
session = self.context.session
|
||||||
device_template = vnfm_db.VNFD(
|
device_template = vnfm_db.VNFD(
|
||||||
|
@ -121,6 +130,17 @@ class TestVNFMPlugin(db_base.SqlTestCase):
|
||||||
session.flush()
|
session.flush()
|
||||||
return device_template
|
return device_template
|
||||||
|
|
||||||
|
def _insert_dummy_vnfd_attributes(self, template):
|
||||||
|
session = self.context.session
|
||||||
|
vnfd_attr = vnfm_db.VNFDAttribute(
|
||||||
|
id='eb094833-995e-49f0-a047-dfb56aaf7c4e',
|
||||||
|
vnfd_id='eb094833-995e-49f0-a047-dfb56aaf7c4e',
|
||||||
|
key='vnfd',
|
||||||
|
value=template)
|
||||||
|
session.add(vnfd_attr)
|
||||||
|
session.flush()
|
||||||
|
return vnfd_attr
|
||||||
|
|
||||||
def _insert_dummy_device(self):
|
def _insert_dummy_device(self):
|
||||||
session = self.context.session
|
session = self.context.session
|
||||||
device_db = vnfm_db.VNF(
|
device_db = vnfm_db.VNF(
|
||||||
|
@ -365,3 +385,26 @@ class TestVNFMPlugin(db_base.SqlTestCase):
|
||||||
|
|
||||||
def test_scale_vnf_in(self):
|
def test_scale_vnf_in(self):
|
||||||
self._test_scale_vnf('in', constants.PENDING_SCALE_IN)
|
self._test_scale_vnf('in', constants.PENDING_SCALE_IN)
|
||||||
|
|
||||||
|
@patch('tacker.vnfm.monitor.ActionPolicy')
|
||||||
|
def test_create_vnf_trigger_respawn(self, mock_action_policy):
|
||||||
|
action_policy_cls = mock_action_policy.return_value
|
||||||
|
action_policy_cls.get_policy.return_value = mock.Mock()
|
||||||
|
vnf_id = "6261579e-d6f3-49ad-8bc3-a9cb974778fe"
|
||||||
|
trigger_request = {"trigger": {"action_name": "respawn", "params": {
|
||||||
|
"credential": "026kll6n", "data": {"current": "alarm",
|
||||||
|
'alarm_id':
|
||||||
|
"b7fa9ffd-0a4f-4165-954b-5a8d0672a35f"}},
|
||||||
|
"policy_name": "vdu1_cpu_usage_monitoring_policy"}}
|
||||||
|
self._insert_dummy_device_template()
|
||||||
|
self._insert_dummy_vnfd_attributes(utils.vnfd_alarm_tosca_template)
|
||||||
|
self._insert_dummy_device()
|
||||||
|
expected_result = {"action_name": "respawn", "params": {
|
||||||
|
"credential": "026kll6n", "data": {"current": "alarm",
|
||||||
|
"alarm_id": "b7fa9ffd-0a4f-4165-954b-5a8d0672a35f"}},
|
||||||
|
"policy_name": "vdu1_cpu_usage_monitoring_policy"}
|
||||||
|
self._vnf_alarm_monitor.process_alarm_for_vnf.return_value = True
|
||||||
|
|
||||||
|
trigger_result = self.vnfm_plugin.create_vnf_trigger(
|
||||||
|
self.context, vnf_id, trigger_request)
|
||||||
|
self.assertEqual(expected_result, trigger_result)
|
||||||
|
|
|
@ -730,8 +730,10 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin):
|
||||||
|
|
||||||
# validate policy action
|
# validate policy action
|
||||||
action = policy['action_name']
|
action = policy['action_name']
|
||||||
|
policy_ = None
|
||||||
|
if action not in constants.DEFAULT_ALARM_ACTIONS:
|
||||||
policy_ = self.get_vnf_policy(context, action, vnf_id)
|
policy_ = self.get_vnf_policy(context, action, vnf_id)
|
||||||
if not policy_ and action not in constants.DEFAULT_ALARM_ACTIONS:
|
if not policy_:
|
||||||
raise exceptions.VnfPolicyNotFound(
|
raise exceptions.VnfPolicyNotFound(
|
||||||
vnf_id=action,
|
vnf_id=action,
|
||||||
policy=policy['id']
|
policy=policy['id']
|
||||||
|
@ -751,7 +753,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin):
|
||||||
if action_cls:
|
if action_cls:
|
||||||
action_cls.execute_action(self, vnf_dict)
|
action_cls.execute_action(self, vnf_dict)
|
||||||
|
|
||||||
if policy['bckend_policy']:
|
if policy.get('bckend_policy'):
|
||||||
bckend_policy = policy['bckend_policy']
|
bckend_policy = policy['bckend_policy']
|
||||||
bckend_policy_type = bckend_policy['type']
|
bckend_policy_type = bckend_policy['type']
|
||||||
cp = policy['properties']['resize_compute']['condition'].\
|
cp = policy['properties']['resize_compute']['condition'].\
|
||||||
|
@ -781,6 +783,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin):
|
||||||
policy_.update({'action_name': trigger['trigger']['action_name']})
|
policy_.update({'action_name': trigger['trigger']['action_name']})
|
||||||
policy_.update({'params': trigger['trigger']['params']})
|
policy_.update({'params': trigger['trigger']['params']})
|
||||||
bk_policy = self._validate_alarming_policy(context, policy_)
|
bk_policy = self._validate_alarming_policy(context, policy_)
|
||||||
|
if bk_policy:
|
||||||
policy_.update({'bckend_policy': bk_policy})
|
policy_.update({'bckend_policy': bk_policy})
|
||||||
self._handle_vnf_monitoring(context, policy_)
|
self._handle_vnf_monitoring(context, policy_)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue