1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# AVCN Simulator
Simulator that fetches changes of configuration from kafka and sends them to VES client.
## What does it do?
The simulator processes notifications from NETCONF server. It does this by being a subscriber of a Kafka topic that is fed
with NETCONF notifications. The topic name is "config". Incoming notifications are then processed and output of this
processing is sent to VES client.
### Processing details
1. When last element contain value (equal sign) then cut it together with `'/'` from path and fill attributeList object with key equal to name of element before `'='` and value equal to element after `'='` keeping key and value quoted (`""`),
2. Convert remaining `'/'` into `' , '` ,
3. Convert all container types (without `[key='value']`) to `<container name>=<container name>`
4. Convert all list types (with `[key='value']`) to `<list name>=<value>`
````
{containerA}/{listB}[{keyB}={valueB}]/{containerC}/{listD}[{keyD}={valueD}]/{[leaf, leaf-list]} = {value of leaf}
{
"variables": {
"dn": " {containerA}={containerA} , {listB}={valueB} , {containerC}={containerC} , {listD}={valued}",
"attributesList": {
"{leaf, leaf-list}": "{value of leaf}"
}
}
}
````
### VES client Request
The resulting request to VES client looks like the following (the "dn" and "attributesList"
parameters are dependent on the actual NETCONF notification's value):
````
{
"simulatorParams": {
"repeatCount": 1,
"repeatInterval": 1,
"vesServerUrl": ""
},
"templateName": "notification.json",
"patch": {},
"variables": {
"dn": "",
"attributesList": {}
}
}
````
### Examples
````
/example-sports:sports/person[name='name 1'] (list instance)
{
"simulatorParams": { },
"templateName": "cmNotify.json",
"patch": { },
"variables": {
"dn":" example-sports:sports= example-sports:sports , person=name 1",
"attributesList": { }
}
}
````
````
/example-sports:sports/person[name='name 1']/name = name 1
{
"simulatorParams": { },
"templateName": "cmNotify.json",
"patch": { },
"variables": {
"dn":" example-sports:sports= example-sports:sports , person=name 1",
"attributesList": { "name": "name 2" }
}
}
````
````
/example-sports:sports/person[name='name 2'] (list instance)
{
"simulatorParams": { },
"templateName": "cmNotify.json",
"patch": { },
"variables": {
"dn":" example-sports:sports= example-sports:sports , person=name 2",
"attributesList": { }
}
}
````
````
/example-sports:sports/team[name='team 1']/player[name='player 1'] (list instance)
{
"simulatorParams": { },
"templateName": "cmNotify.json",
"patch": { },
"variables": {
"dn":" example-sports:sports= example-sports:sports , player=player 1",
"attributesList": { }
}
}
````
````
/example-sports:sports/team[name='team 1']/player[name='player 1']/name = player 1
{
"simulatorParams": { },
"templateName": "cmNotify.json",
"patch": { },
"variables": {
"dn":" example-sports:sports= example-sports:sports , player=player 1",
"attributesList": { "name": "player 1"”" }
}
}
````
## Simulator configuration
It's possible to override default configuration. Following environment variables can be set
KAFKA_BOOTSTRAP_SERVERS - Kafka host, by default kafka1:9092
KAFKA_APPLICATION_ID - An identifier for the stream processing application. Must be unique within the Kafka cluster.
By default avcn-simulator
KAFKA_SOURCE_TOPIC - Kafka topic, where Netconf simulator pushes notification, by default config
REST_CLIENT_PNF_SIMULATOR_ENDPOINT - VES client's URL, by default pnf-simulator:5000/simulator/start
REST_CLIENT_VES_ENDPOINT - VES URL, AVNC events will be send via VES client to this address
## Start avcn-manager
To run avcn manager, config ves and pnf-simulator ip in docker-compose.yaml
REST_CLIENT_VES_ENDPOINT: http://<ves>:8080/eventListener/v7
REST_CLIENT_VESCLIENT_ENDPOINT: http://<ves-client>:5000/simulator/start
and start docker-compose
docker-compose up
|