Support event trigger alarm and vdu_autoheal by alarming type policy¶
This proposal aims at supporting vdu_autoheal by VDU state change event.
Problem description¶
Currently Tacker support vdu_autoheal triggered by monitoring such as ping. However, there are some systems which require healing triggered by events such as resource’s state change. One use case is healing due to a hardware fault, and fault management scenarios are discussed in NFV. (example:OPNFV doctor’s Fault management scenario [1])
In this case, healing should be triggered by VDU status change, but it cannot be achieved with current Tacker.
Proposed change¶
Our plan is to add a new policy tosca.policies.tacker.EventAlarming
and enable vdu_autoheal by event alarming trigger.
New policy define monitoring resource state to evaluate the resource’s event
and call action.
The overall workflow is as follow:
+----------------------------+ +---------------------------------------+
| Aodh | | Tosca_alarm_template.yaml |
| | | (tosca.policies.tacker.EventAlarming) |
| +------------------+ | (Create +--------------+------------------------+
| | | | EvantAlarm) |
| | Alarm API |<---|------------+ |
| | | | | +---------------------v-------------------------+
| +------------------+ | | | Tacker |
| | | | |
| | | | +---------------------------------------+ |
| +------------------+ | | | | VNFM | |
| | | | | | | | |
| | Alarm | | | | | +---------------+ | |
| | Evaluator | | +--|---|------------| | | |
| | / Notifier | | | | | Alarm Monitor | | |
| | |----|---------------|---|----------->| | | |
| +------^-^----^----+ | | | +---------------+ | |
| | | | | | | | |
| | | | | | | | |
| | | | | | +---------------------------------------+ |
+----------------------------+ +-----------------------------------------------+
| | |
| | |
+------------------------------------------------+
| Notification bus |
+------------------------------------------------+
| | |
| | | (Event Norification)
| | |
+------------------------------------------------+
| OpenStack Services |
| (Nova, Neutron, Cinder, ...) |
| |
+-----------^-^----^-----------------------------+
| | |
| | |
| | |
| | +-----------------------------------+
| +-------------------+ |
| | |
| | |
+-----------v------------------------------------------------------------------------------+
| | NFVI | |
| +--------------------------------------------------------------------------------------+ |
| | | VNF | | |
| | +-----------------------------v---------+ +-------v-------------------------------+ | |
| | | VDU | | VDU | | |
| | | | | | | |
| | +---------------------------------------+ +---------------------------------------+ | |
| +--------------------------------------------------------------------------------------+ |
+------------------------------------------------------------------------------------------+
Add policy
tosca.policies.tacker.EventAlarming
Add a new alarm monitoring policy tosca.policies.tacker.EventAlarming
into VNFD definition.
This policy is translated to event alarm definition which monitor resource’s event
and trigger actions in HOT.
The TOSCA scheme could be defined as the following:
tosca.policies.tacker.EventAlarming
tosca.policies.tacker.EventAlarming:
derived_from: tosca.policies.Monitoring
triggers:
aodh_event:
event_type:
type: map
entry_schema:
type: string
required: true
condition:
type: map
entry_schema:
type: string
required: false
action:
type: list
entry_schema:
type: string
required: true
metadata:
type: string
required: true
and sample TOSCA template policy
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: 256 MB
num_cpus: 1
properties:
image: cirros-0.4.0-x86_64-disk
mgmt_driver: noop
availability_zone: nova
metadata: {metering.server_group: VDU1}
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_event_monitoring_policy:
type: tosca.policies.tacker.EventAlarming
triggers:
vdu1_event_healing:
description: VM delete
event_type:
type: compute.instance.delete.end
implementation: ceilometer
condition:
resource_type: instance
metadata: VDU1
action: [vdu_autoheal]
HOT template for Event Alarm monitoring resource:
description: 'Demo example'
heat_template_version: '2013-05-23'
outputs:
mgmt_ip-VDU1:
value:
get_attr:
- CP1
- fixed_ips
- 0
- ip_address
parameters: {}
resources:
CP1:
properties:
network: net_mgmt
port_security_enabled: false
type: OS::Neutron::Port
VDU1:
properties:
availability_zone: nova
config_drive: false
flavor:
get_resource: VDU1_flavor
image: cirros-0.4.0-x86_64-disk
metadata:
metering.server_group: VDU1-08aa3827-0
networks:
- port:
get_resource: CP1
user_data_format: SOFTWARE_CONFIG
type: OS::Nova::Server
vdu1_event_healing:
properties:
alarm_actions:
- http://{tacker domain url}:9890/v1.0/vnfs/{vnf id}/vdu1_event_healing/vdu_autoheal/hc4vg2c0
description: VM delete
event_type: compute.instance.delete.end
query:
- field: traits.instance_id
op: eq
value:
get_resource: VDU1
repeat_actions: true
type: OS::Aodh::EventAlarm
Also, only when event_type is compute.instance.update, state of condition can be defined on TOSCA Template.
This is part of sample TOSCA Template when event_type is compute.instance.update and state is defined.
policies:
- vdu1_event_monitoring_policy:
type: tosca.policies.tacker.EventAlarming
triggers:
vdu1_event_error_healing:
description: VM state is updated to error
event_type:
type: compute.instance.update
implementation: ceilometer
condition:
resource_type: instance
state: error
metadata: VDU1
action: [vdu_autoheal]
This TOSCA Template is changed to following HOT:
vdu1_event_error_healing:
properties:
alarm_actions:
- http://{tacker domain url}:9890/v1.0/vnfs/{vnf id}/vdu1_event_error_healing/vdu_autoheal/hc4vg2c0
description: VM state is updated to error
event_type: compute.instance.update
query:
- field: traits.instance_id
op: eq
value:
get_resource: VDU1
- field: traits.state
op: eq
value: error
repeat_actions: true
type: OS::Aodh::EventAlarm
Enable vdu_autoheal by alarm monitoring and event monitoring
Enable vdu_autoheal by alarm monitoring and event alarm monitoring. This plan adds vdu_autoheal in default alarm action. The action vdu_autoheal needs healing target’s name (e.g. VDU1). Healing target is got by trigger’s metadata [2] of alarm monitoring policy.
Alternatives¶
None
Data model impact¶
None
REST API impact¶
None
Security impact¶
None
Notifications impact¶
None
Other end user impact¶
None
Performance Impact¶
None
Other deployer impact¶
None
Developer impact¶
None
Implementation¶
Assignee(s)¶
Work Items¶
Tosca element model monitoring event to Heat ceilometer monitoring element translation
Create a sample TOSCA template
Add tosca.policies.tacker.EventAlarming policy to monitor specific event.
Add vdu_autohealing in default alarm monitor action
get vdu name from tosca template to use vdu_autoheal
Unit Tests
Functional Tests
Update documentation
Dependencies¶
None
Testing¶
Unit and functional tests are sufficient to test tosca.policies.tacker.EventAlarming
policy.
Unit and functional tests are sufficient to test vdu_autohealing
action by alarm monitoring policy.
Documentation Impact¶
Add VNFD tosca-template under samples to show how to configure
tosca.policies.tacker.EventAlarming
policy.Add a new policy
tosca.policies.tacker.EventAlarming
in Tacker Alarm Monitoring Framework [3].