Topology grouping
Topology groups provide the capability to create user-defined collections of topology entities and/or relationships of any type. Groups can be either static or dynamic based on how they are created.
Static group: This is a collection of topology identifiers specified by the user.
Dynamic group: This holds a single resource query specified by the user, which, when resolved, fetches the desired collection of topology entities or relationships.
Creating topology groups
The following describes how to create topology groups for entities and relationships in both static and dynamic ways.
After a successful creation, a group ID is generated and returned in the response. This ID should be stored as it is used when resolving a topology group (described under Resolving group members
NOTE: There is no validation done during the creation of topology groups, this is done during the group resolution.
Static groups
- To create a static group, use:
POST /groups
See the following table for a description of the payload required when creating static groups.
Static group payload
Parameter |
Description |
Required |
---|---|---|
name |
The desired name of the group (this is
not unique).
|
True |
type |
The group type (static in this case). |
True |
providedMembers |
A list containing the identities of the
desired members (entities or
relationships) in the model format.
|
True |
Example: Create a static group with two provided members:
POST 'https://<host>/topology-inventory/<API_VERSION>/groups'
Content-Type: application/json
Accept: application/json
{
"name": "cell-filter-group-1",
"type": "static",
"providedMembers": [
{
"o-ran-smo-teiv-ran:NRCellDU": [
{
"id": "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
}
]
},
{
"o-ran-smo-teiv-ran:ODUFunction": [
{
"id": "urn:3gpp:dn:ManagedElement=1,ODUFunction=1"
}
]
}
]
}
- NOTE:
Static groups can include a maximum of 10,000 provided members, with a limit of 2,000 members during creation and 2,000 in each subsequent merge operation.
The performance of static groups is related to the number of members. If a group with a large number of members is required, it is recommended to use dynamic groups in combination with classifiers for best performance.
It is not possible to create a group of groups.
Dynamic groups
- To create a dynamic group, use:
POST /groups
See the following table for a description of the payload required when creating dynamic groups.
Dynamic group payload
Parameter |
Description |
Required |
---|---|---|
name |
The desired name of the group (this is not
unique).
|
True |
type |
The group type (dynamic in this case). |
True |
criteria |
The set of parameters needed to specify the
members that are returned when the dynamic
group is resolved.
|
True |
criteria.queryType |
This is the type of query that is performed
when resolving a topology group. Use one of
the following query types when creating a
dynamic group:
<ul><li>getEntitiesByDomain</li>
<li>getEntitiesByType</li>
<li>getRelationshipsForEntityId</li>
<li>getRelationshipsByType</li></ul>
|
True |
criteria.domain |
This is the topology domain. Use TEIV if not
known.
|
True |
criteria.entityTypeName |
The entity type, for example, OCUCPFunction |
Required only when criteria.queryType is
getEntitiesByType or
getRelationshipsForEntityId
|
criteria.entityId |
The entity identifier, for example, urn:
3gpp: dn :ManagedElement=1,ODUFunction=1,
NRCellDU=1.
|
Required only when criteria.queryType is
getRelationshipsForEntityId
|
criteria.relationshipTypeName |
The relationship type, for example,
ODUFUNCTION_PROVIDES_NRCELLDU.
|
Required only when criteria.queryType is
getRelationshipsByType
|
criteria.targetFilter |
Use the targetFilter parameter to narrow
down the fields to return. This is similar
to the SELECT keyword in an SQL statement.
|
False |
criteria.scopeFilter |
Use the scopeFilter parameter to filter the
results using specific criteria. This is
similar to the WHERE keyword in an SQL
statement.
|
False |
Example: Create a dynamic group of NRCellDU entities that have a cellLocalId equal to 1:
POST 'https://<host>/topology-inventory/<API_VERSION>/groups'
Content-Type: application/json
Accept: application/json
{
"name": "cell-filter-group-2",
"type": "dynamic",
"criteria": {
"queryType": "getEntitiesByDomain",
"domain": "RAN",
"targetFilter": "/NRCellDU/attributes(nCI)",
"scopeFilter": "/NRCellDU/attributes[@cellLocalId=1]"
}
}
NOTE: For dynamic groups, there is no limit to the amount of members returned when resolving the group.
Querying topology groups
Fetching groups
- To fetch a list of all groups (static or dynamic), use:
GET /groups
Example: Get all groups:
GET 'https://<host>/topology-inventory/<API_VERSION>/groups'
Accept: application/json
The user can filter the result by specifying a group name as a query parameter. This returns a list of all groups that exactly match the provided name string.
NOTE: The topology group ‘name’ parameter is not unique.
Example: Get all groups with names that match cell-filter-group:
GET 'https://<host>/topology-inventory/<API_VERSION>/groups?name=cell-filter-group'
Accept: application/json
- To get a specific group by its groupId, use:
GET /groups/{groupId}
Example: Fetch a group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000:
GET 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000'
Accept: application/json
Resolving group members
- To get the members of a group using its groupId, use:
GET /groups/{groupId}/members
Example: Get the members of a group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000:
GET 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/members'
Accept: application/json
NOTE: This query returns only the IDs of the topology entities or relationships that are present in your inventory. The members provided by the user (in the case of static groups) that are invalid or not present are discarded in the response.
- To get the provided members of a static group using its groupId, use:
GET /groups/{groupId}/provided-members
This fetches all members provided by the user including members that are invalid or not present in your inventory.
Example: Get the provided members of a static group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000:
GET 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/provided-members'
Accept: application/json
The provided members in a static group can be filtered using the status query parameter.
Example: Get the provided members of a static group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000 that are not-present:
GET 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/provided-members?status=not-present'
Accept: application/json
NOTE: The accepted values for ‘status’ are present, not-present, and invalid. See the following ‘Topology status and descriptions’ table for more information.
Topology status and descriptions
Status |
Description |
---|---|
present |
Entity or relationship IDs that currently exist in your topology. |
not-present |
Entity or relationship IDs that do not exist in your topology. |
invalid |
Entity or relationship IDs of a topology type that does not match the TIES model. |
Modifying topology groups
Update a group name
- To update the name of a topology group specified by its groupId, use:
PUT /groups/{groupId}/name
Example: Update the name of a group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000:
PUT 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/name'
Content-Type: application/json
{
"name": "cell-filter-group-5"
}
Update the members in a group
- To merge or remove members in an existing topology group, use:
POST /groups/{groupId}/provided-members-operations
NOTE: This operation is applicable for static groups only.
Example: Merge members of a group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000:
POST 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/provided-members-operations'
Content-Type: application/json
Accept: application/json
{
"operation": "merge",
"providedMembers": [
{
"o-ran-smo-teiv-ran:NRCellDU": [
{
"id": "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
}
]
}
]
}
Example: Remove members from a group with groupId urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000:
POST 'https://<host>/topology-inventory/<API_VERSION>/groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/provided-members-operations'
Content-Type: application/json
Accept: application/json
{
"operation": "remove",
"providedMembers": [
{
"o-ran-smo-teiv-ran:NRCellDU": [
{
"id": "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
}
]
}
]
}