#
# ============LICENSE_START=======================================================
# Copyright (C) 2024 Ericsson
# Modifications Copyright (C) 2024 OpenInfra Foundation Europe
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
#
openapi: 3.0.2
info:
x-api-id: 52812f69-83ac-4dfa-b83a-1a1bdf2d49b8
x-audience: external-public
description: |
Topology and Inventory data is the information that represents entities in a telecommunications network and the relationships between them that provide insight into a particular aspect of the network of importance to specific use cases. Topology and Inventory data can be derived from inventory, configuration, or other data.
Topology and Inventory supports several topology domains. A domain is a grouping of network topology entities which handles topology data.
Entities are enabling the modelling and storage of complex network infrastructure and relationships.
Relationships are a uni-directional connection between two entities, one of which is the originating side (A-side) and the other is the terminating side (B-side). The order of the sides matters since it defines the relationship itself which must be unique
Topology and Inventory API provides the capabilities to fetch topology data. Using the filtering options, it is possible to define more specific query requests.
## Querying simple entities
EntityType is used as the root of the queries (from here referred as RootObject). Every other object, either *targetFilter* or *scopeFilter*, has to relate to the RootObject. The queries are constructed starting from the RootObject and all other objects are joined to it. If there is no connection between the RootObject and the other object(s), the query will not get constructed. The RootObject still can be retrieved and filtered using the */attributes*.
| USE CASE | ENTITY TYPE | TARGET FILTER | SCOPE FILTER | QUERY RESULT |
|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------|:----------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------|
| To return the ids for all instances of the entityType used in the query. | GNBDUFunction | | | All ids of every GNBDUFunction |
| To return all attributes of every instance of the entityType used in the query. | GNBDUFunction | /attributes | | All GNBDUFunctions with every attribute |
| To return every instance of the entityType used in the query, but only the attribute that was defined in the *targetFilter* parameter.
Note: The attribute must be a valid field of the object. | GNBDUFunction | /attributes(gNBId)
**OR**
/attributes/gNBId | | All FDNs of every GNBDUFunction |
| To return every instance of the entityType used in the query, but only the attributes that were defined in the *targetFilter* parameter.
Case 1: The attributes must be separated by a comma "," in case of using parenthesis "()".
Case 2: The attributes must be separated by a semicolon ";" in case of using slash "/".
Note: The attributes must be valid *targetFilter* of the object. | GNBDUFunction | /attributes(gNBId, gNBIdLength)
**OR**
/attributes/gNBId; /attributes/gNBIdLength | | All Ids and FDNs of every GNBDUFunction |
| To return the ids for all instances of the entityType used in the query, that matches the given attribute in the *scopeFilter* parameter.
Note: The attribute must be a valid field of the object. | GNBDUFunction | | /attributes[contains (@fdn, "/SubNetwork=Ireland/")] | Unique set of ids of GNBDUFunctions, where fdn contains "SubNetwork=Ireland" |
| To return the ids for all instances of the entityType used in the query, that matches the given attributes in the *scopeFilter* parameter.
Note: the entityType and the object in the *scopeFilter* parameter must match, and the attributes must be valid field or fields of the object. The attributes must be separated by a comma ",". | GNBDUFunction | | /attributes[@gNBIdLength=3 and @gNBId=111] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 3 and the gNBId equals 111 |
| To return the ids for all instances of the entityType used in the query, that satisfies every condition in one of the tags in the *scopeFilter* parameter. A tag is a complete unit of *scopeFilter* parameter surrounded by square brackets.
Note: The attributes must be valid field or fields of the object. | GNBDUFunction | | /attributes[@gNBIdLength=3 and @gNBId=111]
**OR**
/attributes[@gNBIdLength=3 and @gNBId=112] | Unique set of ids of GNBDUFunctions, where where the gNBIdLength equals 3 and the gNBId is either 111 or 112 |
## Querying connected entities
It is possible to get information about directly connected objects as well. If entityType is present in the *targetFilter* parameter, the query provides information about that entityType itself.
| USE CASE | ENTITY TYPE | TARGET FILTER | SCOPE FILTER | QUERY RESULT |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------|-----------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| To return the ids for all instances of the entityType in the *targetFilter* parameter, if they are directly related to the queried entityType. | GNBDUFunction | /NRCellDU | | Unique set of ids of NRCellDUs that relates to GNBDUFunctions directly with any relationship type |
| To return the ids for all instances of the entityTypes in the *targetFilter* parameter, if they are directly related to the entityType. | GNBDUFunction | /NRCellDU ; /NRSectorCarrier | | Unique set of ids of NRCellDUs and NRSectorCarriers that relates to GNBDUFunctions directly with any relationship type |
| To return the ids for all instances of the queried entityType that has one or more direct relationships with the entityType specified in the *scopeFilter* parameter. | GNBDUFunction | | /AntennaCapability | Unique set of ids of GNBDUFunctions that are directly related to AntennaCapability with any relationship type |
| To return the ids for all instances of the queried entityType that has one or more direct relationships with at least one of the entityTypes specified in the *scopeFilter* parameter. | GNBDUFunction | | /AntennaCapability
**OR**
/NRCellDU | Unique set of ids of GNBDUFunctions that are directly related to AntennaCapability or NRCellDU with any relationship type |
version: 0.11.0
title: Topology and Inventory API
license:
name: Copyright (C) 2024 Ericsson, Modifications Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
url: http://www.apache.org/licenses/LICENSE-2.0
termsOfService: http://www.apache.org/licenses/LICENSE-2.0
tags:
- name: Entities and relationships
description: "Provides the capability to retrieve topology and inventory entities and relationships."
- name: Schemas
description: "Schemas are defined in YANG modeling language. A group of Yang schemas makes the topology and inventory model, which represents topology and inventory entities, their attributes, and their relationships. For more information on YANG modelling language, see [IETF Documentation](https://datatracker.ietf.org/doc/html/rfc6020)."
- name: Geo-query
description: "Provides the capability to perform geographical queries on topology entities."
- name: Classifiers
description: "Provides the capability to update or remove user-defined keywords or tags on entities and relationships."
- name: Decorators
description: "Provides the capability to update or remove user-defined values on entities and relationships."
- name: Collections
description: "Provides the capability to group topology entities of any type, with an appropriate description and other criteria."
servers:
- url: https://{host}/topology-inventory/v1alpha11
variables:
host:
default: localhost
description: Change this value to point to your custom host.
paths:
/domains:
get:
description: Get all the available topology domains.
tags:
- Entities and relationships
summary: Get all the available topology domains.
operationId: "getAllDomains"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Domains'
examples:
domains:
$ref: '#/components/examples/DomainsResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/entity-types:
get:
description: Get all the available topology entity types in domain name.
tags:
- Entities and relationships
summary: Get all the available topology entity types in domain name.
operationId: "getTopologyEntityTypes"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EntityTypes'
examples:
entityTypes:
$ref: '#/components/examples/EntityTypesResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/entity-types/{entityTypeName}/entities:
get:
description: Get all topology entities of a specific entity type.
tags:
- Entities and relationships
summary: Get all topology entities of a specific entity type.
operationId: "getTopologyByEntityTypeName"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/entityTypeNameInPath'
- $ref: '#/components/parameters/targetFilterOptionalInQuery'
- $ref: '#/components/parameters/scopeFilterOptionalInQuery'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EntitiesResponseMessage'
examples:
entities:
$ref: '#/components/examples/EntitiesResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/entity-types/{entityTypeName}/entities/{entityId}:
get:
description: Get topology for entity type name with specified id. Specified id represents the entity instance.
tags:
- Entities and relationships
summary: Get topology for entity type name with specified id. Specified id represents the entity instance.
operationId: "getTopologyById"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/entityTypeNameInPath'
- $ref: '#/components/parameters/entityIdInPath'
responses:
'200':
description: OK
content:
application/yang.data+json:
schema:
type: object
description: "Refer to yang model for schema definition"
examples:
entity:
$ref: '#/components/examples/EntityResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/entity-types/{entityTypeName}/entities/{entityId}/relationships:
get:
description: Get all relationships for entity type name with specified id. Specified id represents the entity instance.
tags:
- Entities and relationships
summary: Get all relationships for entity type name with specified id. Specified id represents the entity instance.
operationId: "getAllRelationshipsForEntityId"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/entityTypeNameInPath'
- $ref: '#/components/parameters/entityIdInPath'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RelationshipsResponseMessage'
examples:
relationships:
$ref: '#/components/examples/RelationshipsResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/relationship-types:
get:
description: Get all the available topology relationship types.
tags:
- Entities and relationships
summary: Get all the available topology relationship types.
operationId: "getTopologyRelationshipTypes"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RelationshipTypes'
examples:
relationshipTypes:
$ref: '#/components/examples/RelationshipTypesResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/relationship-types/{relationshipTypeName}/relationships:
get:
description: Get topology relationships of a specific relationship type name.
tags:
- Entities and relationships
summary: Get topology relationships of a specific relationship type name.
operationId: "getRelationshipsByType"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/relationshipTypeNameInPath'
- $ref: '#/components/parameters/targetFilterOptionalInQuery'
- $ref: '#/components/parameters/scopeFilterOptionalInQuery'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RelationshipsResponseMessage'
examples:
relationships:
$ref: '#/components/examples/RelationshipsResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/relationship-types/{relationshipTypeName}/relationships/{relationshipId}:
get:
description: Get relationship with specified id. Specified id represents the relationship instance.
tags:
- Entities and relationships
summary: Get relationship with specified id. Specified id represents the relationship instance.
operationId: "getRelationshipById"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/relationshipTypeNameInPath'
- $ref: '#/components/parameters/relationshipIdInPath'
responses:
'200':
description: OK
content:
application/yang.data+json:
schema:
type: object
description: "Refer to yang model for schema definition"
examples:
relationship:
$ref: '#/components/examples/RelationshipResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/domains/{domainName}/entities:
get:
description: Get topology entities by domain, using specified targetFilter as mandatory query parameter.
tags:
- Entities and relationships
summary: "Get entities by domain"
operationId: "getEntitiesByDomain"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainNameInPath'
- $ref: '#/components/parameters/targetFilterOptionalInQuery'
- $ref: '#/components/parameters/scopeFilterOptionalInQuery'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EntitiesResponseMessage'
examples:
entities:
$ref: '#/components/examples/EntitiesResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/schemas:
post:
description: Create a new schema.
tags:
- Schemas
summary: Create a new schema.
operationId: createSchema
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/contentTypeInHeader'
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/MultipartFile'
responses:
'201':
$ref: '#/components/responses/Created'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
get:
description: Get a list of all schemas.
tags:
- Schemas
summary: Get a list of all schemas.
operationId: getSchemas
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/domainOptionalInQuery'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SchemaList'
examples:
schemas:
$ref: '#/components/examples/SchemasResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/schemas/{schemaName}/content:
get:
description: Get the model schema by name.
tags:
- Schemas
summary: Get the model schema.
operationId: getSchemaByName
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/schemaNameInPath'
responses:
'200':
description: OK
content:
text/plain:
schema:
type: string
examples:
schema:
$ref: '#/components/examples/SchemaResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/schemas/{schemaName}:
delete:
description: Delete a schema.
tags:
- Schemas
summary: Delete a schema.
operationId: deleteSchema
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/schemaNameInPath'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/geo-queries:
post:
description: Geo query topology entity or entities across topology domains.
tags:
- Geo-query
summary: Geo query topology entity or entities across topology domains.
operationId: geoQueryTopologyAcrossDomains
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/contentTypeInHeader'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/QueryMessage'
examples:
geoQuery:
$ref: '#/components/examples/QueryMessageExample'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
examples:
geoQueryResponse:
$ref: '#/components/examples/QueryResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
/classifiers:
put:
description: Update entities and/or relationships with classifier(s).
tags:
- Classifiers
summary: Update entities and/or relationships with classifier(s).
operationId: updateClassifier
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/contentTypeInHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Classifier'
examples:
classifier:
$ref: '#/components/examples/ClassifierExample'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
/decorators:
put:
description: Update entities and/or relationships with decorator(s).
tags:
- Decorators
summary: Update entities and/or relationships with decorator(s).
operationId: updateDecorator
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/contentTypeInHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Decorator'
examples:
decorator:
$ref: '#/components/examples/DecoratorExample'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
/collections:
post:
description: Create a collection.
tags:
- Collections
summary: Create a collection.
operationId: createCollection
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/contentTypeInHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Collection'
examples:
dynamicCollection:
$ref: '#/components/examples/DynamicCollectionExample'
staticCollection:
$ref: '#/components/examples/StaticCollectionExample'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionResponse'
examples:
collection:
$ref: '#/components/examples/CollectionResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
get:
description: Get all collections.
tags:
- Collections
summary: Get all collections.
operationId: "getAllCollections"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/offsetParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Collections'
examples:
collections:
$ref: '#/components/examples/CollectionsResponseExample'
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/collections/{collectionId}:
get:
description: Get a collection with specified id.
tags:
- Collections
summary: Get a collection with specified id.
operationId: "getCollection"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/collectionIdInPath'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionResponse'
examples:
collection:
$ref: '#/components/examples/CollectionResponseExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
put:
description: Update a collection.
tags:
- Collections
summary: Update a collection.
operationId: updateCollection
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/contentTypeInHeader'
- $ref: '#/components/parameters/collectionIdInPath'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Collection'
examples:
dynamicCollection:
$ref: '#/components/examples/DynamicCollectionExample'
staticCollection:
$ref: '#/components/examples/StaticCollectionExample'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
description: Delete a collection with specified id.
tags:
- Collections
summary: Delete a collection with specified id.
operationId: "deleteCollection"
parameters:
- $ref: '#/components/parameters/acceptInHeader'
- $ref: '#/components/parameters/collectionIdInPath'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
Classifier:
type: object
title: Classifier
properties:
operation:
type: string
enum:
- merge
- delete
classifier:
type: array
items:
type: string
entityIds:
type: array
items:
type: string
relationshipIds:
type: array
items:
type: string
CollectionResponse:
type: object
properties:
id:
type: string
collectionName:
type: string
criteria:
oneOf:
- $ref: '#/components/schemas/StaticSelection'
- $ref: '#/components/schemas/DynamicSelection'
Collection:
type: object
properties:
collectionName:
type: string
criteria:
$ref: '#/components/schemas/TopologySelection'
Collections:
type: object
title: Collections
properties:
items:
type: array
items:
$ref: '#/components/schemas/CollectionResponse'
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
TopologySelection:
oneOf:
- $ref: '#/components/schemas/StaticSelection'
- $ref: '#/components/schemas/DynamicSelection'
StaticSelection:
type: object
properties:
resourceInstances:
type: array
minItems: 1
items:
type: string
DynamicSelection:
type: object
additionalProperties: false
properties:
resourceQuery:
type: object
properties:
url:
type: string
method:
type: string
queryParams:
type: object
requestBody:
type: object
required:
- url
Decorator:
type: object
title: Decorator
properties:
operation:
type: string
enum:
- merge
- delete
decorators:
type: object
additionalProperties:
type: string
entityIds:
type: array
items:
type: string
relationshipIds:
type: array
items:
type: string
Domains:
type: object
title: Domains
properties:
items:
type: array
items:
properties:
name:
type: string
entityTypes:
$ref: '#/components/schemas/Href'
relationshipTypes:
$ref: '#/components/schemas/Href'
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
EntityTypes:
type: object
title: EntityTypes
properties:
items:
type: array
items:
type: object
properties:
name:
type: string
entities:
$ref: '#/components/schemas/Href'
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
EntitiesResponseMessage:
type: object
title: Entities
properties:
items:
type: array
items:
type: object
description: "Refer to yang model for schema definition of topology entities"
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
RelationshipTypes:
type: object
title: RelationshipTypes
properties:
items:
type: array
items:
type: object
properties:
name:
type: string
relationships:
$ref: '#/components/schemas/Href'
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
RelationshipsResponseMessage:
type: object
title: Relationships
properties:
items:
type: array
items:
type: object
description: "Refer to yang model for schema definition of topology relationships"
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
ErrorMessage:
type: object
title: Error
properties:
status:
type: string
message:
type: string
details:
type: string
Href:
type: object
title: Href
properties:
href:
type: string
format: uri-template
MultipartFile:
type: object
required:
- file
properties:
file:
type: string
description: multipartFile
format: binary
QueryMessage:
type: object
title: Query
properties:
query:
type: string
Schema:
type: object
title: Schema
properties:
name:
type: string
domain:
type: array
items:
type: string
revision:
type: string
content:
$ref: '#/components/schemas/Href'
SchemaList:
type: object
title: Schemas
properties:
items:
type: array
items:
$ref: '#/components/schemas/Schema'
self:
$ref: '#/components/schemas/Href'
first:
$ref: '#/components/schemas/Href'
prev:
$ref: '#/components/schemas/Href'
next:
$ref: '#/components/schemas/Href'
last:
$ref: '#/components/schemas/Href'
totalCount:
type: integer
responses:
NotFound:
description: Not Found
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorMessage'
example:
status: '404'
title: Resource Not Found
details: The requested resource is not found
Unauthorized:
description: Unauthorized
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorMessage'
example:
status: '401'
title: Unauthorized request
details: This request is unauthorized
Forbidden:
description: Forbidden
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorMessage'
example:
status: '403'
title: Request Forbidden
details: This request is forbidden
BadRequest:
description: Bad Request
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorMessage'
example:
status: '400'
title: Bad Request
details: The provided request is not valid
Conflict:
description: Conflict
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorMessage'
example:
status: 409'
title: Conflicting request
details: The request cannot be processed as the resource is in use.
Created:
description: Created without response body
InternalServerError:
description: Internal Server Error
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ErrorMessage"
example:
status: '500'
title: Internal Server Error
details: Internal Server Error occurred
NoContent:
description: No Content
content: {}
parameters:
acceptInHeader:
name: Accept
in: header
required: true
schema:
type: string
example: application/json
default: application/json
contentTypeInHeader:
name: Content-Type
in: header
required: true
schema:
type: string
example: application/json
default: application/json
offsetParam:
name: offset
in: query
description: Pagination offset.
required: false
schema:
type: integer
default: 0
minimum: 0
limitParam:
name: limit
in: query
description: Result limiter.
required: false
schema:
type: integer
default: 500
minimum: 1
maximum: 500
domainNameInPath:
name: domainName
in: path
description: domain name
required: true
schema:
type: string
schemaNameInPath:
name: schemaName
in: path
required: true
schema:
type: string
default: "o-ran-smo-teiv-ran"
collectionIdInPath:
name: collectionId
in: path
required: true
schema:
type: string
entityIdInPath:
name: entityId
in: path
required: true
schema:
type: string
relationshipIdInPath:
name: relationshipId
in: path
required: true
schema:
type: string
entityTypeNameInPath:
name: entityTypeName
in: path
required: true
schema:
type: string
relationshipTypeNameInPath:
name: relationshipTypeName
in: path
required: true
schema:
type: string
example: NRCELLDU_USES_NRSECTORCARRIER
domainOptionalInQuery:
name: domain
in: query
required: false
schema:
type: string
examples:
domain:
value: ran
targetFilterOptionalInQuery:
name: targetFilter
description: Use *targetFilter* to specify the entity type and attributes to be returned in the REST response. The value for *targetFilter* can also be a list of entity types and attributes.
in: query
required: false
schema:
type: string
examples:
targetFilter:
value: /attributes(nCI,nRPCI)
scopeFilterOptionalInQuery:
name: scopeFilter
description: Use *scopeFilter* to specify the attributes to match on. The value for *scopeFilter* can also be a list of entity types and attributes. scopeFilter returns a boolean.
in: query
required: false
schema:
type: string
examples:
scopeFilter:
value: /attributes[@nRTAC=310"]
examples:
ClassifierExample:
value:
operation: merge
classifiers:
- module-x:Outdoor
- module-y:Rural
- module-z:Weekend
entityIds:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:sha512:TlJDZWxsRFU6U3ViTmV0d29yaz1FdXJvcGUsU3ViTmV0d29yaz1JcmV="
DecoratorExample:
value:
operation: merge
decorators:
module-x:location : Stockholm
module-y:vendor: Ericsson
entityIds:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:sha512:TlJDZWxsRFU6U3ViTmV0d29yaz1FdXJvcGUsU3ViTmV0d29yaz1JcmV="
EntityResponseExample:
value:
o-ran-smo-teiv-ran:GNBDUFunction:
- id: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1"
attributes:
gNBDUId: 11
dUpLMNId:
mcc: 110
mnc: 210
gNBId: 21
gNBIdLength: 2
decorators:
location: Stockholm
classifiers:
- Rural
sourceIds:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1"
- "urn:cmHandle:395221E080CCF0FD1924103B15873814"
metadata:
trustLevel: RELIABLE
EntitiesResponseExample:
value:
items:
- o-ran-smo-teiv-ran:NRCellDU:
- id: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
attributes:
cellLocalId: 4589
nCI: 1
nRPCI: 12
nRTAC: 310
decorators:
location: Stockholm
classifiers:
- Rural
sourceIds:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- "urn:cmHandle:395221E080CCF0FD1924103B15873814"
metadata:
trustLevel: RELIABLE
- o-ran-smo-teiv-ran:NRCellDU:
- id: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
attributes:
cellLocalId: 4559
nRPCI: 32
nRTAC: 510
decorators:
location: Stockholm
classifiers:
- Rural
sourceIds:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
- "urn:cmHandle:395221E080CCF0FD1924103B15873814"
metadata:
trustLevel: RELIABLE
self:
href: '/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&targetFilter=attributes(nCI,nRPCI)&scopeFilter=/attributes[@nRTAC=310]'
first:
href: '/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&targetFilter=attributes(nCI,nRPCI)&scopeFilter=/attributes[@nRTAC=310]'
prev:
href: '/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&targetFilter=attributes(nCI,nRPCI)&scopeFilter=/attributes[@nRTAC=310]'
next:
href: '/domains/RAN/entity-types/NRCellDU/entities?offset=500&limit=500&targetFilter=attributes(nCI,nRPCI)&scopeFilter=/attributes[@nRTAC=310]'
last:
href: '/domains/RAN/entity-types/NRCellDU/entities?offset=678&limit=500&targetFilter=attributes(nCI,nRPCI)&scopeFilter=/attributes[@nRTAC=310]'
totalCount: 12
RelationshipResponseExample:
value:
o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:sha512:TlJDZWxsRFU6U3ViTmV0d29yaz1FdXJvcGUsU3ViTmV0d29yaz1JcmV="
aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
decorators:
location: Stockholm
classifiers:
- Rural
sourceIds: []
metadata:
trustLevel: RELIABLE
RelationshipsResponseExample:
value:
items:
- o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:sha512:TlJDZWxsRFU6U3ViTmV0d29yaz1FdXJvcGUsU3ViTmV0d29yaz1JcmVs="
aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
decorators:
location: Stockholm
classifiers:
- Rural
sourceIds: []
metadata:
trustLevel: RELIABLE
- o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:sha512:TlJDZWxsRFU6U3ViTmV0d29yaz1FdXJvcGUsU3ViTmV0d29yaz1JcmVsYW5kLE1lQ2="
aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=2"
decorators:
location: Stockholm
classifiers:
- Rural
sourceIds: []
metadata:
trustLevel: RELIABLE
self:
href: '/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500'
first:
href: '/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500'
prev:
href: '/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500'
next:
href: '/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=500&limit=500'
last:
href: '/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=678&limit=500'
totalCount: 23
EntityTypesResponseExample:
value:
items:
- name: GNBCUUPFunction
entities:
href: '/domains/RAN/entity-types/GNBCUUPFunction/entities'
- name: NRCellDU
entities:
href: '/domains/RAN/entity-types/NRCellDU/entities'
- name: GNBDUFunction
entities:
href: '/domains/RAN/entity-types/GNBDUFunction/entities'
self:
href: '/domains/RAN/entity-types?offset=0&limit=500'
first:
href: '/domains/RAN/entity-types?offset=0&limit=500'
prev:
href: '/domains/RAN/entity-types?offset=0&limit=500'
next:
href: '/domains/RAN/entity-types?offset=500&limit=500'
last:
href: '/domains/RAN/entity-types?offset=678&limit=500'
totalCount: 43
RelationshipTypesResponseExample:
value:
items:
- name: MANAGEDELEMENT_MANAGES_GNBDUFUNCTION
relationships:
href: '/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION/relationships'
- name: GNBDUFUNCTION_PROVIDES_NRCELLDU
relationships:
href: '/domains/RAN/relationship-types/GNBDUFUNCTION_PROVIDES_NRCELLDU/relationships'
- name: NRCELLDU_USES_NRSECTORCARRIER
relationships:
href: '/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships'
self:
href: '/domains/RAN/relationship-types?offset=0&limit=500'
first:
href: '/domains/RAN/relationship-types?offset=0&limit=500'
prev:
href: '/domains/RAN/relationship-types?offset=0&limit=500'
next:
href: '/domains/RAN/relationship-types?offset=500&limit=500'
last:
href: '/domains/RAN/relationship-types?offset=678&limit=500'
totalCount: 21
DomainsResponseExample:
value:
items:
- name: RAN_CLOUD
entityTypes:
href: '/domains/CLOUD/entity-types'
relationshipTypes:
href: '/domains/CLOUD/relationship-types'
- name: RAN_OAM
entityTypes:
href: '/domains/OAM/entity-types'
relationshipTypes:
href: '/domains/OAM/relationship-types'
- name: RAN_LOGICAL
entityTypes:
href: '/domains/RAN/entity-types'
relationshipTypes:
href: '/domains/RAN/relationship-types'
self:
href: '/domains?offset=0&limit=500'
first:
href: '/domains?offset=0&limit=500'
prev:
href: '/domains?offset=0&limit=500'
next:
href: '/domains?offset=500&limit=500'
last:
href: '/domains?offset=678&limit=500'
totalCount: 343
QueryMessageExample:
value:
query: |-
WITH point({longitude: 12.78232, latitude: 56.7455}) AS p1, point({latitude: 56.7134, longitude: 12.79565}) AS p2 RETURN point.distance(p1, p2) AS distance
QueryResponseExample:
value:
query: |-
WITH point({longitude: 12.78232, latitude: 56.7455}) AS p1, point({latitude: 56.7134, longitude: 12.79565}) AS p2 RETURN point.distance(p1, p2) AS distance
response: "distance : 2873.5"
StaticCollectionExample:
value:
collectionName: "son-cell-filter-group-1"
criteria:
resourceInstances:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=3"
DynamicCollectionExample:
value:
collectionName: "son-cell-filter-group-1"
criteria:
resourceQuery:
url: /domains/RAN/entity-types/NRCellDU/entities
method: GET
queryParams:
target:Filter: /attributes(cmId)
scopeFilter: /attributes[@nRTAC=310]
requestBody: ""
CollectionResponseExample:
value:
id: "urn:oran:collection:/JHKJ4H5JH45345TB="
collectionName: "son-cell-filter-group-1"
criteria:
resourceInstances:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=3"
CollectionsResponseExample:
value:
items:
- id: "urn:topology:collection:/JHKJ4H5JH45345TB="
collectionName: "son-cell-group-1"
criteria:
resourceInstances:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=3"
- id: "urn:topology:collection:/DFJER77R6F7S9VD="
collectionName: "son-cell-group-2"
criteria:
resourceInstances:
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=4"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=5"
- "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=6"
self:
href: '/collections?offset=0&limit=500'
first:
href: '/collections?offset=0&limit=500'
prev:
href: '/collections?offset=0&limit=500'
next:
href: '/collections?offset=500&limit=500'
last:
href: '/collections?offset=678&limit=500'
totalCount: 11
SchemasResponseExample:
value:
items:
- name: o-ran-smo-teiv-ran
domain:
- RAN_LOGICAL
revision: '2013-07-15'
content:
href: '/schemas/o-ran-smo-teiv-ran/content'
- name: o-ran-smo-teiv-cloud
domain:
- RAN_CLOUD
revision: '2021-05-19'
content:
href: '/schemas/o-ran-smo-teiv-cloud/content'
- name: o-ran-smo-teiv-oam
domain:
- RAN_OAM'
revision: '2021-05-19'
content:
href: '/schemas/o-ran-smo-teiv-oam/content'
- name: o-ran-smo-teiv-common-yang-types
domain:
[]
revision: '2021-07-04'
content:
href: '/schemas/o-ran-smo-teiv-common-yang-types/content'
- name: o-ran-smo-teiv-common-yang-extensions
domain:
[]
revision: '2021-07-04'
content:
href: '/schemas/o-ran-smo-teiv-common-yang-extensions/content'
self:
href: '/schemas?offset=0&limit=500'
first:
href: '/schemas?offset=0&limit=500'
prev:
href: '/schemas?offset=0&limit=500'
next:
href: '/schemas?offset=500&limit=500'
last:
href: '/schemas?offset=678&limit=500'
totalCount: 14
SchemaResponseExample:
value: "module stores {\
yang-version 1.1;\
namespace \"ietf-inet-types\";\
prefix module-references;\
revision \"2020-09-15\" {\
description\
\"Sample Model\";\
} \
typedef Mcc {\
type string;\
}\
typedef Mnc {\
type string;\
}\
grouping PLMNId {\
leaf mcc {\
type Mcc;\
}\
leaf mnc {\
type Mnc;\
}\
} \
container RAN_LOGICAL {\
leaf namespace {\
type string;\
}\
container GNBDUFunction {\
leaf eiid {\
type string;\
} \
leaf gNBDUId {\
type uint16;\
}\
leaf gNBID {\
type uint16;\
}\
leaf gNBIdLength {\
type uint16;\
}\
container dUpLMNId{\
description \"ToDo\";\
uses PLMNId;\
} \
}\
container GNBCUUPFunction {\
leaf eiid {\
type string;\
} \
leaf gNBID {\
type uint16;\
}\
leaf gNBIdLength {\
type uint16;\
}\
} \
container GNBCUCPFunction { \
leaf eiid {\
type string;\
} \
leaf gNBID {\
type uint16;\
}\
leaf gNBIdLength {\
type uint16;\
}\
leaf gNBCUName {\
type string;\
}\
container pLMNId{\
description \"ToDo\";\
uses PLMNId;\
} \
}\
container NRCellCU { \
leaf eiid {\
type string;\
} \
leaf cellLocalId {\
type uint16;\
}\
leaf nCI {\
type uint16;\
}\
leaf nRTAC {\
type uint16;\
}\
container plmnId{\
description \"ToDo\";\
uses PLMNId;\
} \
}\
container NRCellDU { \
leaf eiid {\
type string;\
} \
leaf cellLocalId {\
type uint16;\
}\
leaf nCI {\
type uint16;\
}\
leaf nRPCI {\
type uint16;\
}\
leaf nRTAC {\
type uint16;\
}\
}\
}\
}"