Update doc: Using version 3 to update not_operator_support.rst

Now part of the document is version 2 syntax, and part of it is version 3.
So the document needs to be updated to Syntax 3 to replace Syntax 2.

Implements: blueprint doc-upgrade
Change-Id: Ic0d312922e4e5e34038ab4fc8d22999d679626eb
This commit is contained in:
Q.hongtao 2020-04-28 09:19:51 +08:00 committed by Qitao
parent 3b43c10ed1
commit 1dc094a593
3 changed files with 423 additions and 182 deletions

View File

@ -9,6 +9,14 @@ The Templates language supports the "or" and "and" operators at the moment.
Many scenarios can't be described by using only those two operators and thus Many scenarios can't be described by using only those two operators and thus
we would like to add support for "not" operator as well. we would like to add support for "not" operator as well.
*Note:* This document refers to Vitrage templates version 3.
For previous versions, see:
Version_2_
.. _Version_2: https://docs.openstack.org/vitrage/latest/contributor/not_operator_support_v2.html
Template Structure Template Structure
================== ==================
@ -16,24 +24,26 @@ The template is written in YAML language, with the following structure.
:: ::
metadata: metadata:
version: <template version> version: 3
name: <unique template identifier> name: <unique template identifier>
type: standard
description: <what this template does> description: <what this template does>
definitions: entities:
entities: example_host:
- entity: ... type: nova.host
- entity: ... name: compute-0-0
relationships: example_instance:
- relationship: ... type: nova.instance
- relationship: ... example_alarm:
type: zabbix
name: memory threshold crossed
scenarios: scenarios:
- scenario: - condition: <if statement true do the actions>
condition: <if statement true do the action> actions:
actions: ...
- action: ...
All the sections are in use as described in the "vitrage-template-format.rst" file. All the sections are in use as described in the "vitrage-templates.rst" file.
But in the condition section it will be possible to write the "not" operator in addition to the "and" and "or" operators. But in the condition section it will be possible to write the "not" operator in addition to the "and" and "or" operators.
The "not" operator can be used only before a relationship expression. The "not" operator can be used only before a relationship expression.
@ -74,44 +84,25 @@ There exists an instance on Host but there is no Alarm on the instance.
:: ::
metadata: metadata:
version: 2 version: 3
name: no_alarm_on_instance_that_contained_in_host name: no_alarm_on_instance_that_contained_in_host
description: when host contains vm that has no alarm on it, show implications on the host description: when host contains vm that has no alarm on it, show implications on the host
definitions: entities:
entities: instance_alarm:
- entity: category: ALARM
category: ALARM name: instance_mem_performance_problem
name: instance_mem_performance_problem host:
template_id: instance_alarm # some string category: RESOURCE
- entity: type: nova.host
category: RESOURCE instance:
type: nova.host category: RESOURCE
template_id: host type: nova.instance
- entity:
category: RESOURCE
type: nova.instance
template_id: instance
relationships:
- relationship:
source: instance_alarm
target: instance
relationship_type: on
template_id : alarm_on_instance
- relationship:
source: host
target: instance
relationship_type: contains
template_id : host_contains_instance
scenarios: scenarios:
- scenario: - condition: host [contains] instance AND NOT instance_alarm [on] instance
condition: host_contains_instance and not alarm_on_instance actions:
actions: - set_state:
- action: state: available
action_type: set_state target: instance
properties:
state: available
action_target:
target: host
Use Case 2: Use Case 2:
@ -128,39 +119,25 @@ There exists a host with no alarm.
:: ::
metadata: metadata:
version: 2 version: 3
name: no_alarm_on_host name: no_alarm_on_host
description: when there is no alarm on the host, show implications on the host description: when there is no alarm on the host, show implications on the host
definitions: entities:
entities: host_alarm:
- entity: category: ALARM
category: ALARM name: host_high_mem_load
name: host_high_mem_load host:
template_id: host_alarm # some string category: RESOURCE
- entity: type: nova.host
category: RESOURCE instance:
type: nova.host category: RESOURCE
template_id: host type: nova.instance
- entity:
category: RESOURCE
type: nova.instance
template_id: instance
relationships:
- relationship:
source: host_alarm # source and target from entities section
target: host
relationship_type: on
template_id : alarm_on_host
scenarios: scenarios:
- scenario: - condition: not instance_alarm [on] instance
condition: not alarm_on_host actions:
actions: - set_state:
- action: state: available
action_type: set_state target: instance
properties:
state: available
action_target:
target: instance
Use Case 3: Use Case 3:
@ -190,69 +167,32 @@ There is no edge between the Vm and the Port.
:: ::
metadata: metadata:
version: 2 version: 3
name: no_connection_between_vm_and_port name: no_connection_between_vm_and_port
description: when there is no edge between the port and the vm, show implications on the instances description: when there is no edge between the port and the vm, show implications on the instances
definitions: entities:
entities: host:
- entity: category: RESOURCE
category: RESOURCE type: nova.host
type: nova.host instance:
template_id: host category: RESOURCE
- entity: type: nova.instance
category: RESOURCE switch:
type: nova.instance category: RESOURCE
template_id: instance type: switch
- entity: network:
category: RESOURCE category: RESOURCE
type: switch type: neutron.network
template_id: switch port:
- entity: category: RESOURCE
category: RESOURCE type: neutron.port
type: neutron.network
template_id: network
- entity:
category: RESOURCE
type: neutron.port
template_id: port
relationships:
- relationship:
source: host
target: instance
relationship_type: contains
template_id : host_contains_instance
- relationship:
source: switch
target: host
relationship_type: connected
template_id : host_connected_switch
- relationship:
source: switch
target: network
relationship_type: has
template_id : switch_has_network
- relationship:
source: port
target: network
relationship_type: attached
template_id : port_attached_network
- relationship:
source: instance
target: port
relationship_type: connected
template_id : vm_connected_port
scenarios: scenarios:
- scenario: - condition: host [contains] instance AND switch [connected] host AND switch [has] network AND port [attached] network AND NOT instance [connected] port
condition: host_contains_instance and host_connected_switch and switch_has_network and port_attached_network and not vm_connected_port actions:
actions: - raise_alarm:
- action: target: instance
action_type: raise_alarm alarm_name: instance_mem_performance_problem
properties: severity: WARNING
alarm_name: instance_mem_performance_problem
severity: warning
action_target:
target: instance
Unsupported Use Cases Unsupported Use Cases
@ -276,50 +216,25 @@ In the subgraphs above, we had only one vertex which was not connected to the ma
:: ::
metadata: metadata:
version: 2 version: 3
name: host_contains_vm_with_no_edge_to_stack_that_has_alarm_on_it name: host_contains_vm_with_no_edge_to_stack_that_has_alarm_on_it
description: when host contains vm without and edge to a stack that has no alarms, show implications on the instances description: when host contains vm without and edge to a stack that has no alarms, show implications on the instances
definitions: entities:
entities: host:
- entity: category: RESOURCE
category: RESOURCE type: nova.host
type: nova.host instance:
template_id: host category: RESOURCE
- entity: type: nova.instance
category: RESOURCE stack:
type: nova.instance category: RESOURCE
template_id: instance type: heat.stack
- entity: stack_alarm:
category: RESOURCE category: ALARM
type: heat.stack name: stack_high_mem_load
template_id: stack
- entity:
category: ALARM
name: stack_high_mem_load
template_id: stack_alarm
relationships:
- relationship:
source: host
target: instance
relationship_type: contains
template_id : host_contains_instance
- relationship:
source: stack_alarm
target: stack
relationship_type: on
template_id : alarm_on_stack
- relationship:
source: instance
target: stack
relationship_type: attached
template_id : instance_attached_stack
scenarios: scenarios:
- scenario: - condition: host [contains] instance AND stack_alarm [on] stack AND NOT instance [attached] stack
condition: host_contains_instance and alarm_on_stack and not instance_attached_stack actions:
actions: - set_state:
- action: state: available
action_type: set_state target: instance
properties:
state: available
action_target:
target: instance

View File

@ -0,0 +1,325 @@
==========================================
Templates Not Operator Support - Version 2
==========================================
Overview
--------
The Templates language supports the "or" and "and" operators at the moment.
Many scenarios can't be described by using only those two operators and thus
we would like to add support for "not" operator as well.
Template Structure
==================
The template is written in YAML language, with the following structure.
::
metadata:
version: <template version>
name: <unique template identifier>
description: <what this template does>
definitions:
entities:
- entity: ...
- entity: ...
relationships:
- relationship: ...
- relationship: ...
scenarios:
- scenario:
condition: <if statement true do the action>
actions:
- action: ...
All the sections are in use as described in the "vitrage-template-format.rst" file.
But in the condition section it will be possible to write the "not" operator in addition to the "and" and "or" operators.
The "not" operator can be used only before a relationship expression.
Condition Format
----------------
The condition which needs to be met will be phrased using the entities and
relationships previously defined. The condition details are described in the
"vitrage-template-format.rst" and the addition here is the new logical operator "not":
- "not" - indicates that the expression must not be satisfied in order for the
condition to be met.
The following are examples of valid expressions, where X, Y and Z are
relationships:
- X
- X and Y
- X and Y and Z
- X and not Y
- X and not (Y or Z)
- X and not X
Supported Use Cases
===================
Use Case 1:
-----------
There exists an instance on Host but there is no Alarm on the instance.
::
+--------+ +--------+ Not +---------+
| Host | ------> | Vm | < - - - - | Alarm |
+--------+ +--------+ +---------+
::
metadata:
version: 2
name: no_alarm_on_instance_that_contained_in_host
description: when host contains vm that has no alarm on it, show implications on the host
definitions:
entities:
- entity:
category: ALARM
name: instance_mem_performance_problem
template_id: instance_alarm # some string
- entity:
category: RESOURCE
type: nova.host
template_id: host
- entity:
category: RESOURCE
type: nova.instance
template_id: instance
relationships:
- relationship:
source: instance_alarm
target: instance
relationship_type: on
template_id : alarm_on_instance
- relationship:
source: host
target: instance
relationship_type: contains
template_id : host_contains_instance
scenarios:
- scenario:
condition: host_contains_instance and not alarm_on_instance
actions:
- action:
action_type: set_state
properties:
state: available
action_target:
target: host
Use Case 2:
-----------
There exists a host with no alarm.
::
+--------+ Not +---------+
| Host | < - - - - | Alarm |
+--------+ +---------+
::
metadata:
version: 2
name: no_alarm_on_host
description: when there is no alarm on the host, show implications on the host
definitions:
entities:
- entity:
category: ALARM
name: host_high_mem_load
template_id: host_alarm # some string
- entity:
category: RESOURCE
type: nova.host
template_id: host
- entity:
category: RESOURCE
type: nova.instance
template_id: instance
relationships:
- relationship:
source: host_alarm # source and target from entities section
target: host
relationship_type: on
template_id : alarm_on_host
scenarios:
- scenario:
condition: not alarm_on_host
actions:
- action:
action_type: set_state
properties:
state: available
action_target:
target: instance
Use Case 3:
-----------
The Switch is attached to a Host that contains a Vm.
The Switch is also comprised to a Network which has a Port.
There is no edge between the Vm and the Port.
::
+---------+ +---------+
+----------- | Host | --------> | Vm |
| +---------+ +---------+
| |
v |
+----------+ | N
| Switch | | o
+----------+ | t
| |
| |
| v
| +---------+ +---------+
+----------> | Network | <-------- | Port |
+---------+ +---------+
::
metadata:
version: 2
name: no_connection_between_vm_and_port
description: when there is no edge between the port and the vm, show implications on the instances
definitions:
entities:
- entity:
category: RESOURCE
type: nova.host
template_id: host
- entity:
category: RESOURCE
type: nova.instance
template_id: instance
- entity:
category: RESOURCE
type: switch
template_id: switch
- entity:
category: RESOURCE
type: neutron.network
template_id: network
- entity:
category: RESOURCE
type: neutron.port
template_id: port
relationships:
- relationship:
source: host
target: instance
relationship_type: contains
template_id : host_contains_instance
- relationship:
source: switch
target: host
relationship_type: connected
template_id : host_connected_switch
- relationship:
source: switch
target: network
relationship_type: has
template_id : switch_has_network
- relationship:
source: port
target: network
relationship_type: attached
template_id : port_attached_network
- relationship:
source: instance
target: port
relationship_type: connected
template_id : vm_connected_port
scenarios:
- scenario:
condition: host_contains_instance and host_connected_switch and switch_has_network and port_attached_network and not vm_connected_port
actions:
- action:
action_type: raise_alarm
properties:
alarm_name: instance_mem_performance_problem
severity: warning
action_target:
target: instance
Unsupported Use Cases
=====================
Use Case 1:
-----------
There is a Host contains Vm, which has no edge ("connection") to a stack that has an alarm on it.
Difference: The difference here from the graphs above, is that here there are
two connected component subgraphs (the first is host contains vm, the second is alarm on stack),
and the current mechanism doesn't support such a use case of not operator between many connected component subgraphs.
In the subgraphs above, we had only one vertex which was not connected to the main connected component subgraph.
::
+---------+ +---------+ Not +---------+ +---------+
| Host | --------> | Vm | - - - - - -> | Stack | <--------- | Alarm |
+---------+ +---------+ +---------+ +---------+
::
metadata:
version: 2
name: host_contains_vm_with_no_edge_to_stack_that_has_alarm_on_it
description: when host contains vm without and edge to a stack that has no alarms, show implications on the instances
definitions:
entities:
- entity:
category: RESOURCE
type: nova.host
template_id: host
- entity:
category: RESOURCE
type: nova.instance
template_id: instance
- entity:
category: RESOURCE
type: heat.stack
template_id: stack
- entity:
category: ALARM
name: stack_high_mem_load
template_id: stack_alarm
relationships:
- relationship:
source: host
target: instance
relationship_type: contains
template_id : host_contains_instance
- relationship:
source: stack_alarm
target: stack
relationship_type: on
template_id : alarm_on_stack
- relationship:
source: instance
target: stack
relationship_type: attached
template_id : instance_attached_stack
scenarios:
- scenario:
condition: host_contains_instance and alarm_on_stack and not instance_attached_stack
actions:
- action:
action_type: set_state
properties:
state: available
action_target:
target: instance

View File

@ -99,6 +99,7 @@ Design Documents
contributor/vitrage-use-cases contributor/vitrage-use-cases
contributor/add-new-datasource contributor/add-new-datasource
contributor/not_operator_support contributor/not_operator_support
contributor/not_operator_support_v2
contributor/templates-loading contributor/templates-loading
contributor/vitrage-ha-and-history-vision contributor/vitrage-ha-and-history-vision
contributor/datasource-snmp-parsing-support contributor/datasource-snmp-parsing-support