GN5-1
February 2024
Maat - Single Source of Truth
for network service automation
Roman Łapacz (PSNC)
GN5-1 WP6
2 |
GN5-1
Digital platforms enabling automation and orchestration
How to design a consistent and reusable automation and orchestration functionalities in digital platforms?
TMF Open Digital Architecture (ODA) is a complete enterprise architecture blueprint for open digital
platforms, replacing traditional operational and business support systems
ODA helps in designing agile, flexible, interoperable ecosystems
Use of standardised data models and APIs for seamless integration and communication between
diverse systems and component
https://www.tmforum.org/
GÉANT NETDEV OAV Architectures:
https://wiki.geant.org/display/NETDEV/OAV+Architectures
3 |
GN5-1
Source of Truth (SoT)
Represents the desired state of the network - declarative approach
Any changes in the desired state are applied by a relevant declarative tool
Only a state in SoT is the proper one (and should be reflected on an
infrastructure)
A key component of the Infrastructure as Code (IaC) that supports the
managing and provisioning of infrastructure through code instead of through
manual processes
May include multiple data sources and multiple types of data
Compliant with ODA as a component with a set of APIs, data models and an
important role in the workflows (TMF eTOM)
4 |
GN5-1
Maat is a microservice for open digital platforms to manage the information
about physical and logical resources and/or services
Maat
Integration with other tools via REST APIs
AuthN with OAuthN 2.0 and Keycloak
JSON-based data model for resources and services
Based on a NoSQL database
Structure and data type validation of incoming REST POST messages
Use of openapi 3.0 json schema files
Flexible customisable schema
Support of multiple schema files (multiple data models in Maat)
Event notification mechanism
Supporting application EventListener for storing the history of events
5 |
GN5-1
Maat
Maat as a Source of Truth in a distributed modern digital platform enabling
automation and orchestration
lesson learned from the work on the GÉANT Connection Service
feedback from the users
6 |
GN5-1
Maat – Resource data model
Resource as a basic object
Resource can be composed of other
resources
Resource has attributes and
characteristics
Relationships between Resources
chains of references
Definition of a Resource can be easily
extended
https://github.com/tmforum-apis/Open_Api_And_Data_Model/tree/master/schemas/Resource
R1
R3
R4 R5
R2
R7R6
7 |
GN5-1
Maat – Resource data model (example)
{
"@type": "LogicalResource",
"category": "protocol.bgp.group",
"name": "man",
"@schemaLocation":
"https://raw.githubusercontent.com/GEANT-NETDEV/Inv3-schema/main/TMF639-ResourceInventory-v4-ext_20240121-1.
json",
"resourceRelationship": [
{
"relationshipType": "contains:protocol.bgp.group.neighbor",
"resource": {
"id": "8dec579c-febc-410c-bcaf-6be7e34781a5",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/resourceInventory/resource/8dec579c-febc-410c-bcaf-6be7e34781a5"
}
}
],
"resourceCharacteristic": [
{
"name": "type",
"value": "external"
},
{
"name": "export",
"value": "lhc-out-man"
}
],
"href": "https://p4-inv3-2.rare.nmaas.eu:443/resourceInventory/resource/9ea94908-8310-47b9-9c51-4c4e40df68b1",
"serviceRelationship": [
{
"relationshipType": "refers:protocol.bgp",
"service": {
"id": "ffd4fb9b-b599-4d44-bef5-13466d68e277",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/serviceInventory/service/ffd4fb9b-b599-4d44-bef5-13466d68e277"
}
}
],
"id": "9ea94908-8310-47b9-9c51-4c4e40df68b1"
}
{
"@type": "LogicalResource",
"category": "protocol.bgp.group.neighbor",
"name": "192.168.151.246",
"description": "SomeName",
"@schemaLocation":
"https://raw.githubusercontent.com/GEANT-NETDEV/Inv3-schema/main/TMF639-ResourceInventory-v4-ext_20240121-
1.json",
"resourceCharacteristic": [
{
"name": "peer-as",
"value": "128743"
}
],
"href": "https://p4-inv3-2.rare.nmaas.eu:443/resourceInventory/resource/8dec579c-febc-410c-bcaf-6be7e34781a5",
"resourceRelationship": [
{
"relationshipType": "refers:protocol.bgp.group",
"resource": {
"id": "9ea94908-8310-47b9-9c51-4c4e40df68b1",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/resourceInventory/resource/9ea94908-8310-47b9-9c51-4c4e40df68b1"
}
}
],
"id": "8dec579c-febc-410c-bcaf-6be7e34781a5"
}
8 |
GN5-1
Maat – Service data model
Service as a basic object
Service can be composed of other services
Service has attributes and characteristics
Relationships between Services
chains of references
Service may have links to Resources
Definition of a Service can be extended
https://github.com/tmforum-apis/Open_Api_And_Data_Model/blob/master/schemas/Service/Service.schema.json
S1
S3
S4
S2
R4R3
R6R5 R7 R8
R1 R2
9 |
GN5-1
Maat – Service data model (example)
{
"@type": "Service",
"category": "routing-instance.vrf",
"name": "LHCone",
"@schemaLocation":
"https://raw.githubusercontent.com/GEANT-NETDEV/Inv3-schema/main/TMF638-ServiceInventory-v4.json",
"supportingResource": [
{
"id": "d854cf5b-d7b2-40a2-afbf-0a0af05a6cb0",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/resourceInventoryManagement/v4.0.0/resource/d854cf5b-d7b2-40a2-afbf-0a0af05a
6cb0"
}
],
"serviceRelationship": [
{
"relationshipType": "contains:protocol.bgp",
"service": {
"id": "ffd4fb9b-b599-4d44-bef5-13466d68e277",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/serviceInventoryManagement/v4.0.0/service/ffd4fb9b-b599-4d44-bef5-13466d68e2
77"
}
}
],
"serviceCharacteristic": [
{
"name": "vrf-target.community",
"value": "target:3501:152001016"
},
{
"name": "vrf-table-label",
"value": "null"
}
],
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/serviceInventoryManagement/v4.0.0/service/5d880276-5b21-49a7-a2bd-f1e28b4e8
ee7",
"serviceDate": "2024-01-22T15:47:42.107584162Z",
"id": "5d880276-5b21-49a7-a2bd-f1e28b4e8ee7"
}
{
"@type": "Service",
"category": "protocol.bgp",
"@schemaLocation":
"https://raw.githubusercontent.com/GEANT-NETDEV/Inv3-schema/main/TMF638-ServiceInventory-v4.json",
"supportingResource": [
{
"id": "9ea94908-8310-47b9-9c51-4c4e40df68b1",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/resourceInventoryManagement/v4.0.0/resource/9ea94908-8310-47b9-9c51-4c4
e40df68b1"
}
],
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/serviceInventoryManagement/v4.0.0/service/ffd4fb9b-b599-4d44-bef5-13466d6
8e277",
"serviceDate": "2024-01-22T15:45:28.701242857Z",
"serviceRelationship": [
{
"relationshipType": "refers:routing-instance.vrf",
"service": {
"id": "5d880276-5b21-49a7-a2bd-f1e28b4e8ee7",
"href":
"https://p4-inv3-2.rare.nmaas.eu:443/serviceInventoryManagement/v4.0.0/service/5d880276-5b21-49a7-a2bd-f1e28b
4e8ee7"
}
}
],
"id": "ffd4fb9b-b599-4d44-bef5-13466d68e277"
}
10 |
GN5-1
Maat – Resource validation example
"Resource": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the resource"
},
"name": {
"type": "string"
},
"location": {
"type": "string"
},
"note": {
"type": "array",
"items": {
"$ref": "#/definitions/Note"
},
"description": "A list of notes made on this resource"
}
}
},
"Note": {
"type": "object",
"required": [
"text"
],
"properties": {
"author": {
"type": "string",
"description": "Author of the note"
},
"date": {
"type": "string",
"format": "date-time",
"description": "Date of the note"
},
"text": {
"type": "string",
"description": "Text of the note"
}
}
}
{
"@type": "Resource",
"name": "Resource1",
"location": "Poznan",
"note":[
{
"author": "Martin",
"date": "2024-01-23T00:00:00.000Z",
"text": "Example text"
}
],
"@schemaLocation": "https://raw.githubusercontent.com/GEANT-NETDEV/Inv3-schema/main/ResourceInventory-example-1.json"
}
Schema file: ResourceInventory-example-1.json
REST POST message
@schemaLocation is obligatory
id is created dynamically by Maat
https://github.com/GEANT-NETDEV/Inv3-schema
11 |
GN5-1
Maat – Open API
https://github.com/tmforum-apis
12 |
GN5-1
Maat – Open API
Resource Management API
List resources
GET /resource?fields=...&{filtering}
Retrieve resource (including selection of fields and
filters)
GET /resource/{id}?fields=...&{filtering}
Create resource
POST /resource
Patch resource
PATCH /resource/{id}
Delete resource
DELETE /resource/{id}
Register listener
POST /hub
Unregister listener
DELETE /hub/{id}
Publish Event to listener
POST /client/listener
Service Management API
List services
GET /service?fields=...&{filtering}
Retrieve service (including selection of fields and
filters)
GET /service/{id}?fields=...&{filtering}
Create service
POST /service
Patch service
PATCH /service/{id}
Delete service
DELETE /service/{id}
Register listener
POST /hub
Unregister listener
DELETE /hub/{id}
Publish Event to listener
POST /client/listener
https://github.com/tmforum-apis/Open_Api_And_Data_Model/tree/master/apis/TMF639_Resource_Inventory
https://github.com/tmforum-apis/Open_Api_And_Data_Model/tree/master/apis/TMF638_Service_Inventory
13 |
GN5-1
Maat and NetBox
NetBox - a SoT that is well-known and popular in the NRENs community
Maat is considered to be more flexible for data model extensions
Deployment option: NetBox as a resource inventory and Maat as a service
inventory
Advanced NetBox GUI vs Maat GUI that is still in development
Both tools expose REST APIs
TMF Open APIs in Maat
14 |
GN5-1
Maat – pilot deployments
Maat (as Inventory3 -> old name) has been added to the NMaaS catalogue
Test instance for GP4L
Test instance for the Polish PIONIER network
PSNC develops a platform for automating and orchestrating network services
Maat as the SoT
Production deployment in 2024
Public repo available soon
License release procedure is ongoing
GN5-1
Thank you!
netdev@lists.geant.org
Maat or Maʽat (Egyptian: mꜥꜥt /ˈmuʀʕat/, Coptic: ⲙⲉⲓ)[1] comprised the ancient Egyptian
concepts of truth, balance, order, harmony, law, morality, and justice. Ma'at was also the
goddess who personified these concepts, and regulated the stars, seasons, and the actions of
mortals and the deities who had brought order from chaos at the moment of creation. Her
ideological opposite was Isfet (Egyptian jzft), meaning injustice, chaos, violence or to do evil.