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

Static groups

To create a static group, use:

POST /groups

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 25,000 provided members, with a limit of 5,000 in each creation request.

Dynamic groups

To create a dynamic group, use:

POST /groups

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]"
  }
}

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 topologyGroupId, use:

GET /groups/{topologyGroupId}

Example: Fetch a group with topologyGroupId 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 topologyGroupId, use:

GET /groups/{topologyGroupId}/members

Example: Get the members of a group with topologyGroupId 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 topologyGroupId, use:

GET /groups/{topologyGroupId}/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 topologyGroupId 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 topologyGroupId 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.

Modifying topology groups

Update a group name

To update the name of a topology group specified by its topologyGroupId, use:

PUT /groups/{topologyGroupId}/name

Example: Update the name of a group with topologyGroupId 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/{topologyGroupId}/provided-members-operations

NOTE: This operation is applicable for static groups only.

Example: Merge members of a group with topologyGroupId 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 topologyGroupId 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"
        }
      ]
    }
  ]
}