...
Column | ||||||||
---|---|---|---|---|---|---|---|---|
References
|
Column |
---|
Attention to
|
Schema Proposal
- tbc
Code Proposal
...
- AAI does have precedent for publishing events to DMaaP
- ExtAPI to be updated to consume events from DMaaP
- need to get agreement about topic configuration
- Discuss with Adrian OSullivan and Ludovic Robert, to confirm whether existing AAI-EVENT topic in DMaaP suffices for this requirement
From Jimmy Forsyth (AT&T) to Everyone: 01:51 AM
@Brian, yes, AAI sends notification on all changes to DMaaP to the AAI_EVENT (or maybe it’s AAI-EVENT) topicJira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key AAI-1996 Jira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key EXTAPI-98 - James Forsyth Can you please send us the details on what the format of the events are that are sent to DMaaP are from A&AI. For example is there only one topic called AAI-EVENT topic and any change on a service-instance is emitted to DMaaP. So regardless if the change is to orchestration-status or some other parameter, the AAI-EVENT is emitted. All pointers to any associated documentation, notes or code snippets appreciated.
In the case you are interested in, the service-instance can be CREATED, UPDATED, or DELETED (which you find in “action” in the event-header) either as a standalone object or as part of a nested structure. You can use the top-entity-type to tell you which is the containing object, and then use that to determine if a service-instance might be impacted by the operation. In the case of a service-instance update, the top-entity-type will be either customer, service-subscription, or service-instance.
For a customer or service-subscription, you would then look for a service-instance child object - in the example above, the service-instance would be in the position of the p-interface on a service-subscription and in the position of sriov-pf on a customer. All of that depends on how the client uses the interface, and AAI has no control over it. Since users can perform the operation at any of the 3 levels (with a DELETE object, sometimes there are rules about cascading deletes, I’d have to figure out of the customer/service-subscription/service-instance object hierarchy is subject to any of those rules (like it might not let you delete the service-subscription until all the service-instances are gone first; I just don’t recall the rules off the top of my head).
...
title | Example of AAI-EVENT data |
---|
...
Section | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Navigation
Table of Contents | ||
---|---|---|
|
Schema and Code Proposals
Item 1. Notify ExtAPI so it does not need to poll AAI
In AAI, when the "orchestration-status", "service-instance-location-id", "input-params" for a Service Instance changes, notify ExtAPI so it does not need to poll AAI
- AAI does have precedent for publishing events to DMaaP
- ExtAPI to be updated to consume events from DMaaP
- need to get agreement about topic configuration
- Discuss with Adrian OSullivan and Ludovic Robert, to confirm whether existing AAI-EVENT topic in DMaaP suffices for this requirement
From Jimmy Forsyth (AT&T) to Everyone: 01:51 AM
@Brian, yes, AAI sends notification on all changes to DMaaP to the AAI_EVENT (or maybe it’s AAI-EVENT) topicJira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key AAI-1996 Jira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key EXTAPI-98 - James Forsyth Can you please send us the details on what the format of the events are that are sent to DMaaP are from A&AI. For example is there only one topic called AAI-EVENT topic and any change on a service-instance is emitted to DMaaP. So regardless if the change is to orchestration-status or some other parameter, the AAI-EVENT is emitted. All pointers to any associated documentation, notes or code snippets appreciated.
In the case you are interested in, the service-instance can be CREATED, UPDATED, or DELETED (which you find in “action” in the event-header) either as a standalone object or as part of a nested structure. You can use the top-entity-type to tell you which is the containing object, and then use that to determine if a service-instance might be impacted by the operation. In the case of a service-instance update, the top-entity-type will be either customer, service-subscription, or service-instance.
For a customer or service-subscription, you would then look for a service-instance child object - in the example above, the service-instance would be in the position of the p-interface on a service-subscription and in the position of sriov-pf on a customer. All of that depends on how the client uses the interface, and AAI has no control over it. Since users can perform the operation at any of the 3 levels (with a DELETE object, sometimes there are rules about cascading deletes, I’d have to figure out of the customer/service-subscription/service-instance object hierarchy is subject to any of those rules (like it might not let you delete the service-subscription until all the service-instances are gone first; I just don’t recall the rules off the top of my head).
Code Block | ||||
---|---|---|---|---|
| ||||
{ "cambria.partition": "AAI", "entity": { " |
...
fqdn": " |
...
test.onap.org", |
...
"hostname": "pserver-onap", " |
...
in- |
...
maint": |
...
false, "p-interfaces": { |
...
" |
...
p- |
...
interface": [ |
...
{ |
...
"in-maint":true, |
...
" |
...
interface- |
...
name": |
...
" |
...
p-interface-02-test", |
...
"resource-version":"1547072232613", |
...
"sriov-pfs":{ |
...
"sriov-pf":[ |
...
|
...
{ |
...
|
...
"pf-pci-id": "sriov-02-test", |
...
"resource-version":"1547072232613" |
...
|
...
} |
...
] } |
...
}, |
...
{ "in-maint":true, |
...
|
...
"interface-name":"p-interface-test", "resource-version":"1547072232613", "sriov-pfs":{ |
...
|
...
"sriov-pf":[ |
...
{ |
...
...
"pf-pci-id": "sriov-test", |
...
|
...
|
...
|
...
|
...
" |
...
resource- |
...
version":"1547072232613" |
...
|
...
|
...
|
...
|
...
} |
...
...
|
...
|
...
] |
...
|
...
|
...
} |
...
} |
...
|
...
] |
...
}, " |
...
resource- |
...
version": " |
...
1547072232618" |
...
}, " |
...
event-header": |
...
{ |
...
Regarding the "input-parameters", it was added for CCVPN use case (originally as "customer-requests") and there is an example in the comments of: AAI-CCVPN Schema Proposal for Casablanca Release For convenience, the comment is copied below:
...
"action": "CREATE", " |
...
domain": "ONAP |
...
",
" |
...
entity-link":" |
...
/aai/v14/cloud-infrastructure/pservers/pserver/pserver-onap", " |
...
entity-type": |
...
"pserver", " |
...
event-type": " |
...
AAI-EVENT", " |
...
id": |
...
"ece20816-1c1b-4f22-9192-62459ee170c5", " |
...
sequence-number": " |
...
0", " |
...
severity": |
...
|
...
"NORMAL", |
...
" |
...
source-name": |
...
"jimmy-curl", "timestamp": "20190109-22:17:12:660", |
...
"top-entity-type": "pserver", " |
...
version": |
...
"v14" } } |
Regarding the "input-parameters", it was added for CCVPN use case (originally as "customer-requests") and there is an example in the comments of: AAI-CCVPN Schema Proposal for Casablanca Release For convenience, the comment is copied below:
Code Block | ||
---|---|---|
| ||
{ |
...
"service":{ |
...
|
...
"name":"ONAP_223531", |
...
"description":" |
...
ONAP_ |
...
1546", "serviceInvariantUuid":"4a09419a-c9fd-4a53-b1bd-b49603169ca1", |
...
" |
...
serviceUuid":" |
...
1bd0eae6- |
...
2dcc- |
...
4461- |
...
9ae6- |
...
56d641f369d6", "globalSubscriberId":"test_custormer", |
...
" |
...
serviceType":" |
...
example- |
...
service-type", " |
...
parameters": |
...
{ "locationConstraints":[ |
...
], |
...
" |
...
resources":[ { |
...
|
...
"resourceName":"vEPC_ONAP01", " |
...
resourceInvariantUuid":" |
...
36ebe421- |
...
283a- |
...
4ee8- |
...
92f1- |
...
d09e7c44b911", "resourceUuid":"27a0e235-b67a-4ea4-a0cf-25761afed111", |
...
"resourceCustomizationUuid":"47a0e235-b67a-4ea4-a0cf-25761afed231", |
...
"parameters":{ "locationConstraints":[ |
...
{ |
...
|
...
"vnfProfileId":" |
...
b244d433- |
...
8c9c- |
...
49ad- |
...
9c70- |
...
8e34b8dc8328", "locationConstraints":{ "vimId":" |
...
vmware_ |
...
vio" } }, |
...
{ |
...
|
...
"vnfProfileId":"8a9f7c48-21ce-41b7-95b8-a8ac61ccb1ff", |
...
"locationConstraints":{ |
...
" |
...
vimId":"core-dc_RegionOne" } |
...
} |
...
], |
...
" |
...
resources": |
...
[ |
...
], " |
...
requestInputs":{ " |
...
sdncontroller":" |
...
" |
...
} } |
...
}, |
...
{ " |
...
resourceName": |
...
"VL OVERLAYTUNNEL", |
...
"resourceInvariantUuid":"184494cf-472f-436f-82e2-d83dddde21cb", |
...
" |
...
resourceUuid": |
...
"95bc3e59-c9c5-458f-ad6e-78874ab4b3cc", "resourceCustomizationUuid":"27a0e235-b67a-4ea4-a0cf-25761afed232", |
...
"parameters":{ |
...
|
...
"locationConstraints":[ |
...
], |
...
" |
...
resources": |
...
[ |
...
], |
...
|
...
"requestInputs":{ |
...
} |
...
} |
...
} |
...
], "requestInputs":{ "vlunderlayvpn0_name":"l3connect", |
...
- https://docs.onap.org/en/latest/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/nodesQuery.html
- Ludovic Robert For example instead of
- "GET /aai/v11/customers/{customerId}service-subscription/{service_subscriptionId}service-instance API/{service-instanceId}"
- use "GET /aai/v11/nodes/service-instances/service-instance/{service-instanceId}" instead
From Jimmy Forsyth (AT&T) to Everyone: 01:51 AM
@Adrian the answers are yes, service-instance-id is unique in ONAP and you can query it directly with the nodes query (see link above)
- See also
Jira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key EXTAPI-194
...
Refer to discussion on https://groups.io/g/onap-bbs/topic/29523804 . Possible extra field in PNF to assist nomadic ONT scenario.
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
...
Change PNF unique key to be pnf-id instead of pnf-name attribute:
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
...
"vlunderlayvpn0_site1_id":"IP-WAN-Controller-1",
"vlunderlayvpn0_site2_id":"SPTNController",
"vlunderlayvpn0_site1_networkName":"network1,network2",
"vlunderlayvpn0_site2_networkName":"network3,network4",
"vlunderlayvpn0_site1_routerId":"a8098c1a-f86e-11da-bd1a-00112444be1a",
"vlunderlayvpn0_site2_routerId":"a8098c1a-f86e-11da-bd1a-00112444be1e",
"vlunderlayvpn0_site2_importRT1":"200:1,200:2",
"vlunderlayvpn0_site1_exportRT1":"300:1,300:2",
"vlunderlayvpn0_site2_exportRT1":"400:1,400:2",
"vlunderlayvpn0_site1_vni":"2000",
"vlunderlayvpn0_site2_vni":"3000",
"vlunderlayvpn0_tunnelType":"L3-DCI"
}
}
}
} |
Item 2. make use of "nodes query" to optimise some queries on AAI data
In client code using AAI API, make use of "nodes query" as shown in newly published documentation to optimise some queries on AAI data:
- https://docs.onap.org/en/latest/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/nodesQuery.html
- Ludovic Robert For example instead of
- "GET /aai/v11/customers/{customerId}service-subscription/{service_subscriptionId}service-instance API/{service-instanceId}"
- use "GET /aai/v11/nodes/service-instances/service-instance/{service-instanceId}" instead
From Jimmy Forsyth (AT&T) to Everyone: 01:51 AM
@Adrian the answers are yes, service-instance-id is unique in ONAP and you can query it directly with the nodes query (see link above)
- See also
Jira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key EXTAPI-194
- https://docs.onap.org/en/latest/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/nodesQuery.html
Item 3. Extra field in PNF to assist nomadic ONT scenario
Refer to discussion on https://groups.io/g/onap-bbs/topic/29523804 . Possible extra field in PNF to assist nomadic ONT scenario.
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
See also item 6 below:
Attachment Point (Not a real BBS modeling property, since its constituent parts are captured in other model properties) | Logical Link object (bridged to the PNF object representing ONT) link-name: string (will hold attachment point in the form of olt-name/pon-slot/pon-port e.g. olt1/1/1) link-type: string (will hold literal value 'attachmentPoint') | None (EdgeRule logical-link-to-pnf already exists)
|
Item 4. Change PNF unique key to be pnf-id
Change PNF unique key to be pnf-id instead of pnf-name attribute:
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Item 5. Use “format” query parameter on Node Query to find service instance hierarchy
Refer to discussion https://lists.onap.org/g/onap-discuss/message/15390 on https://lists.onap.org/g/onap-discuss/topic/29688799 and
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
- Get the full URL of the service-instance object when using the Nodes query to retrieve it.
- Pass query parameter "?format=resource_and_url" or "?format=simple"
Item 6. Specific decisions made for each attribute
Refer to BBS Modeling Model Design diagram for "HSIA CFS":
- Attributes and EdgeRules to add to "cp", "generic-vnf" and "pnf" (options TBD):
Jira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key AAI-2154 - Stavros Kanarakis to add specific decisions made for each attribute based on the options described in JIRA
- Attributes and EdgeRules to add to "cp", "generic-vnf" and "pnf" (options TBD):
BBS Properties Use Case Reference | A&AI Implementation Decision | A&AI Schema Impact | Possible Future Work | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
RG MAC Address | Metadata Entry (under HSIA CFS Service Instance) CPE PNF object relates to it Internet Profile Generic-VNF relates to it | Metadatum EdgeRules only | |||||||||
Service Type | Metadata Entry (under HSIA CFS Service Instance) Access Connectivity Generic-VNF relates to it Internet Profile Generic-VNF relates to it | Metadatum EdgeRules only | |||||||||
Access ID | Metadata Entry (under HSIA Internet Service Instance) | Metadatum EdgeRules only | |||||||||
Upstream Speed | Metadata Entry (under HSIA CFS Service Instance) Access Connectivity Generic-VNF relates to it Internet Profile Generic-VNF relates to it | Metadatum EdgeRules only | |||||||||
Downstream Speed | Metadata Entry (under HSIA CFS Service Instance) Access Connectivity Generic-VNF relates to it Internet Profile Generic-VNF relates to it | Metadatum EdgeRules only | |||||||||
OLT Name | Metadata Entry (under HSIA Access Service Instance) PON_UNI cp relates to it OLT_NNI cp relates to it | Metadatum EdgeRules only | |||||||||
OLT PON port | Metadata Entry (under HSIA Access Service Instance) PON_UNI cp relates to it | Metadatum EdgeRules only | |||||||||
OLT PON slot | Metadata Entry (under HSIA Access Service Instance) PON_UNI cp relates to it | Metadatum EdgeRules only | |||||||||
CVLAN | Metadata Entry (under HSIA Access Service Instance) PON_UNI cp relates to it | Metadatum EdgeRules only | |||||||||
SVLAN | Metadata Entry (under HSIA Access Service Instance) OLT_NNI cp relates to it | Metadatum EdgeRules only | |||||||||
Expected ONT ID | Metadata Entry (under HSIA Access Service Instance) PON_UNI cp relates to it | Metadatum EdgeRules only | |||||||||
CPE Manufacturer | PNF object equip-vendor: string | None | |||||||||
CPE Model | PNF object equip-model: string | None | |||||||||
CPE Equipment Type | PNF object equip-type: string | None | |||||||||
CPE Serial Number | PNF object serial-number: string | None | |||||||||
CPE SW Version | PNF object sw-version: string | None | |||||||||
Attachment Point (Not a real BBS modeling property, since its constituent parts are captured in other model properties) | Logical Link object (bridged to the PNF object representing ONT) link-name: string (will hold attachment point in the form of olt-name/pon-slot/pon-port e.g. olt1/1/1) link-type: string (will hold literal value 'attachmentPoint') | None (EdgeRule logical-link-to-pnf already exists)
| |||||||||
ONT NNI Port | Metadata Entry (under HSIA Access Service Instance) ONT_NNI cp relates to it | Metadatum EdgeRules only | |||||||||
OLT NNI Slot | Metadata Entry (under HSIA Access Service Instance) | Metadatum EdgeRules only | |||||||||
OLT NNI Port | Metadata Entry (under HSIA Access Service Instance) | Metadatum EdgeRules only | |||||||||
BNG Name (Static configuration. Put into A&AI via a script) | Metadata Entry (under HSIA Edge Service Instance) BNG Generic-VNF relates to it | Metadatum EdgeRules only | |||||||||
BNG UNI Slot (Static configuration. Put into A&AI via a script) | Metadata Entry (under HSIA Edge Service Instance) BNG-UNI cp relates to it | Metadatum EdgeRules only | |||||||||
BNG UNI Port (Static configuration. Put into A&AI via a script) | Metadata Entry (under HSIA Edge Service Instance) BNG Generic-VNF relates to it | Metadatum EdgeRules only |
Moving forward based on https://groups.io/g/onap-bbs/message/160
and https://groups.io/g/onap-bbs/message/161
Item 7. Add robot test cases
- BBS use case related items added for AAI to https://gerrit.onap.org/r/gitweb?p=testsuite.git;a=tree;f=robot/resources/aai;hb=HEAD
Jira Legacy server System Jira serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key
...
- Get the full URL of the service-instance object when using the Nodes query to retrieve it.
- Pass query parameter "?format=resource_and_url" or "?format=simple"
...
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
...
AAI-2184
Item 8. Other current work
tbc
Various Discussion List Messages
- AAI relationship-list https://lists.onap.org/g/onap-discuss/message/15607
- PNF change https://lists.onap.org/g/onap-discuss/message/15640
- BBS use case mapping https://lists.onap.org/g/onap-discuss/message/15683 / https://lists.onap.org/g/onap-discuss/message/15726
- BBS use case data relationships https://lists.onap.org/g/onap-discuss/message/15731
Possible Future Work
- Referring to https://groups.io/g/onap-bbs/message/151: how to distinguish, from the AAI-EVENT alone, what part of the “service-instance” object changed, and what was it changed from.
- tbc