You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

JSON schema is used to describe the attributes and values in the xApp descriptor JSON file. The xApp onboarding process verifies the types and values of the xApp parameters in the descriptor. If mismatches are found, xApp onboarding will return failure.

It is the xApp developers' responsibility to provide the correct schema JSON file that defines all the fields in the xApp descriptor.

The integration team recommends to build your xApp descriptor schema by extending the schema skeleton file.  

schema.json

Structure

The schema file includes the following required sections.

  • xapp_name: xapp_name is a string variable. properties are as follows.

        		"xapp_name": {
        			"$id": "#/properties/xapp_name",
        			"type": "string",
        			"title": "The xApp Name",
        			"default": "xapp",
        			"examples": [
        				"example_xapp"	
        			]
        		},
  • version: version is a string variable that follows the semantic versioning syntax.

        		"version": {
        			"$id": "#/properties/version",
        			"type": "string",
        			"title": "The xApp version",
        			"default": "1.0.0",
        			"examples": [
        				"1.0.0"	
        			],
        			"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
        		},
  • containers: containers is a list of container objects that includes name of the container, container image name, registry, tag, and entry command . It has a structure of

    "containers": [
        {
            "name": "example_container_1",
            "image": {
                "registry": "example_image_registry_1",
                "name": "example_image_name_1",
                "tag": "example_image_tag_1"
            },
            "command": "example_command_1"
        },
        {
            "name": "example_container_2",
            "image": {
                "registry": "example_image_registry_2",
                "name": "example_image_name_2",
                "tag": "example_image_tag_2"
            }
        }
    ]

    The following schema defines the above structure 

    		"containers": {
    			"$id": "#/properties/containers",
    			"type": "array",
    			"title": "The Container Schema",
    			"items": {
    				"$id": "#/properties/containers/items",
    				"type": "object",
    				"title": "The Container Items Schema",
    				"required": [
    					"name",
    					"image"
    				],
    				"properties": {
    					"name": {
    						"$id": "#/properties/containers/items/properties/name",
    						"type": "string",
    						"title": "The xApp Container Name",
    						"default": "xapp",
    						"examples": [
    							"xapp"
    						]
    					},
    					"image": {
    						"$id": "#/properties/containers/items/properties/image",
    						"type": "object",
    						"title": "The Container Image",
    						"required": [
    							"registry",
    							"name",
    							"tag"
    						],
    						"properties": {
    							"registry": {
    								"$id": "#/properties/containers/items/properties/image/properties/registry",
    								"type": "string",
    								"title": "The xApp Image Registry",
    								"default": "nexus3.o-ran-sc.org:10002",
    								"examples": [
    									"nexus3.o-ran-sc.org:10002"
    								],
    								"pattern": "^[A-Za-z0-9\\.-]{1,}\\.[A-Za-z]{1,}(?:\\:\\d+)?$"
    							},
    							"name": {
    								"$id": "#/properties/containers/items/properties/image/properties/name",
    								"type": "string",
    								"title": "The xApp Image Name",
    								"default": "xapp",
    								"examples": [
    									"xapp"
    								]
    							},
    							"tag": {
    								"$id": "#/properties/containers/items/properties/image/properties/tag",
    								"type": "string",
    								"title": "The xApp Image Tag",
    								"default": "latest",
    								"examples": [
    									"latest"
    								]
    							}
    						}
    					},
    					"command": {
    						"$id": "#/properties/containers/items/properties/command",
    						"type": "string",
    						"title": "Command To Run The xApp Container",
    						"default": "command",
    						"examples": [
    							"command"
    						]
    					}
    				}
    			}
    		},
  • livenessProbe: livenessProbe defines the k8s liveness probe for the xApp pod. It follows the following schema

            "livenessProbe": {
    	        "$id": "#/properties/livenessprobe",
                "type": "object",
    			"title": "The Liveness Probe Definition",
                "properties": {
                    "exec": {
    					"$id": "#/properties/livenessprobe/exec",
                        "type": "object",
    					"title": "Script of Liveness Probe",
                        "properties": {
                             "command": {
    							 "$id": "#/properties/livenessprobe/exec/command",
                                 "type": "array",
                                 "items": [
                                     {
    	 								"$id": "#/properties/livenessprobe/exec/command/item",
    	 								"type": "string",
    	 								"title": "The Command Item",
    	 								"default": "/bin/sh",
    	 								"examples": [
    	 									"/bin/sh"
    	 								]
                                     }
                                 ]
                             }
                        },
                        "required": [
                            "command"
                        ]
                    },
                    "httpGet": {
    					"$id": "#/properties/livenessprobe/httpget",
                        "type": "object",
    					"title": "Http of Liveness Probe",
                        "properties": {
                             "path": {
    							"$id": "#/properties/livenessprobe/httpget/path",
    							"type": "string",
    							"title": "The Path of Http Liveness Probe",
    							"default": "/health",
    							"examples": [
    								"/health"
    							]
                             },
    						 "port": {
    							"$id": "#/properties/livenessprobe/httpget/port",
    							"type": "integer",
    							"title": "The Port of Http Liveness Probe",
    							"default": 80,
    							"examples": [
    								80
    							]
                             }
                        },
                        "required": [
                            "path",
    				        "port"
                        ]
                    },
                    "initialDelaySeconds": {
                        "$id": "#/properties/livenessprobe/initialdelayseconds",
    					"type": "integer",
    					"title": "Initial Delay of Liveness Probe",
    					"default": 5,
    					"examples": [
    						5
    					]
                    },
                    "periodSeconds": {
                        "$id": "#/properties/livenessprobe/periodseconds",
    					"type": "integer",
    					"title": "Period of Liveness Probe",
    					"default": 15,
    					"examples": [
    						15
    					]
                    }
                },
    		    "oneOf": [
    		      { 
    				  "$id": "#/properties/livenessprobe/oneof/exec",
    				  "required": ["exec", "initialDelaySeconds", "periodSeconds"]
    			  },
    		      { 
    				  "$id": "#/properties/livenessprobe/oneof/httpget",
    				  "required": ["httpGet", "initialDelaySeconds", "periodSeconds"]
    			  }
    		    ]
            },
  • readinessProbe: readinessProbe defines the k8s readiness probe for the xApp pod. It follows the following schema

            "readinessProbe": {
    	        "$id": "#/properties/readinessprobe",
                "type": "object",
    			"title": "The Readiness Probe Definition",
                "properties": {
                    "exec": {
    					"$id": "#/properties/readinessprobe/exec",
                        "type": "object",
    					"title": "Script of Readiness Probe",
                        "properties": {
                             "command": {
    							 "$id": "#/properties/readinessprobe/exec/command",
                                 "type": "array",
                                 "items": [
                                     {
                                         "type": "string"
                                     }
                                 ]
                             }
                        },
                        "required": [
                            "command"
                        ]
                    },
                    "httpGet": {
    					"$id": "#/properties/readinessprobe/httpget",
                        "type": "object",
    					"title": "Http of Readiness Probe",
                        "properties": {
                             "path": {
    							"$id": "#/properties/readinessprobe/httpget/path",
    							"type": "string",
    							"title": "The Path of Http Readiness Probe",
    							"default": "/health",
    							"examples": [
    								"/health"
    							]
                             },
    						 "port": {
    							"$id": "#/properties/readinessprobe/httpget/port",
    							"type": "integer",
    							"title": "The Port of Http Readiness Probe",
    							"default": 80,
    							"examples": [
    								80
    							]
                             }
                        },
                        "required": [
                            "path",
    				        "port"
                        ]
                    },
                    "initialDelaySeconds": {
                        "$id": "#/properties/readinessprobe/initialdelayseconds",
    					"type": "integer",
    					"title": "Initial Delay of Readiness Probe",
    					"default": 5,
    					"examples": [
    						5
    					]
                    },
                    "periodSeconds": {
                        "$id": "#/properties/readinessprobe/periodseconds",
    					"type": "integer",
    					"title": "Period of Readiness Probe",
    					"default": 15,
    					"examples": [
    						15
    					]
                    }
                },
    		    "oneOf": [
    		      { 
    				  "$id": "#/properties/readinessprobe/oneof/exec",
    				  "required": ["exec", "initialDelaySeconds", "periodSeconds"]
    			  },
    		      { 
    				  "$id": "#/properties/readinessprobe/oneof/httpget",
    				  "required": ["httpGet", "initialDelaySeconds", "periodSeconds"]
    			  }
    		    ]
            },	


  • messaging: this schema defines the messaging parameters structure

    	    "messaging": {
    			"type": "object",
    			"$id": "#/properties/messaging",
    			"title": "The Messaging Schema",
    			"properties": {
    				"ports": {
    	  	     	   	"$id": "#/properties/messaging/ports",
    	  				"type": "array",
    	  				"title": "The Ports for Messaging",
    					"items":{
    	  					"$id": "#/properties/messaging/ports/items",
    	  					"type": "object",
    	  					"title": "The Item of Port",
    						"required": ["name", "container", "port"],		
    					    "dependencies": {
    					      "txMessages": ["rxMessages", "policies"],
    						  "rxMessages": ["txMessages", "policies"],
    						  "policies": ["rxMessages", "txMessages"]
    					    },
    	  					"properties": {
    							"name": {
    								"$id": "#/properties/messaging/ports/items/name",
    								"type": "string",
    								"title": "The Name of the Port",
    								"default": "App",
    								"examples": [
    									"App"
    								]
    							},
    							"container": {
    								"$id": "#/properties/messaging/ports/items/container",
    								"type": "string",
    								"title": "The Container of the Port",
    								"default": "xapp",
    								"examples": [
    									"xapp"
    								]
    							},
    							"port": {
    								"$id": "#/properties/messaging/ports/items/port",
    								"type": "integer",
    								"title": "The Port Number",
    								"default": 8080,
    								"examples": [
    									8080
    								]
    							},
    							"description": {
    								"$id": "#/properties/messaging/ports/items/description",
    								"type": "string",
    								"title": "The description for the port",
    								"default": "port description",
    								"examples": [
    									"port description"
    								]
    							},
    			                "txMessages": {
    								"$id": "#/properties/messaging/ports/items/txmessages",
    			                    "type": "array",
    								"title": "The txMessage Types",
    			                    "items":{
    									"$id": "#/properties/messaging/ports/items//txmessages/item",
    									"type": "string",
    									"title": "The txMessage Types Item",
    									"default": "RIC_SUB",
    									"examples": [
    										"RIC_SUB"
    									]
    								}
    			                },
    			                "rxMessages": {
    								"$id": "#/properties/messaging/ports/items/rxmessages",
    			                    "type": "array",
    								"title": "The rxMessage Types",
    			                    "items":{
    									"$id": "#/properties/messaging/ports/items/rxmessages/item",
    									"type": "string",
    									"title": "The rxMessage Types Item",
    									"default": "RIC_SUB",
    									"examples": [
    										"RIC_SUB"
    									]
    								}
    			                },
    			                "policies": {
    								"$id": "#/properties/messaging/ports/items/policies",
    			                    "type": "array",
    								"title": "The Policies Types",
    			                    "items":{
    									"$id": "#/properties/messaging/ports/items/policies/item",
    									"type": "integer",
    									"title": "The Policy Types Item",
    									"default": 1,
    									"examples": [
    										1
    									]
    								}
    			                }
    					  	}
    					}
    				}
    			},
                "required": [
                    "ports"
                ]
    				
    		},
  • Controls: controls is an xApp specify section. xApp developer shall defines the schema for this section to describe the internal xApp parameter structure. it has a basic structure of 

    		"controls": {
    			"type": "object",
    			"$id": "#/properties/controls",
    			"title": "The Controls Schema"
    		},
  • metrics: this schema defines the metrics structure

    		"metrics": {
    			"type": "array",
    			"$id": "#/properties/metrics",
    			"title": "The Metrics Schema",
    			"items": {
    				"$id": "#/properties/metrics/items",
    				"type": "object",
    				"title": "The Metrics Items Schema",
    				"required": [
    					"objectName",
    					"objectInstance",
    					"name",
    					"type",
    					"description"
    				],
    				"properties": {
    					"objectName": {
    						"$id": "#/properties/metrics/items/objectname",
    						"type": "string",
    						"title": "The Object Name"
    					},
    					"objectInstance": {
    						"$id": "#/properties/metrics/items/objectinstance",
    						"type": "string",
    						"title": "The Object Instance"
    					},
    					"name": {
    						"$id": "#/properties/metrics/items/name",
    						"type": "string",
    						"title": "The Object Name"
    					},
    					"type": {
    						"$id": "#/properties/metrics/items/type",
    						"type": "string",
    						"title": "The Object Type"
    					},
    					"description": {
    						"$id": "#/properties/metrics/items/description",
    						"type": "string",
    						"title": "The Object Description"
    					}
    				}
    			}
    		}
    	}
  • No labels