Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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..

Most of the schema sections are static and cannot be changed for different xApp. However, the xApp developer can define their own controls section.

When an operator is onboarding an xApp, he/she will provide the controls section schema with $id "#controls" together with 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 filemain schema will combine and refer to the controls schema with  id "#controls".

The following is the main schema that the xApp onboarder will use to validate the xApp descritor.  

View file
nameschema.json
height250

...

The schema file includes the following required sectionsfollowing sections.

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

    Code Block
        		"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.

    Code Block
        		"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

    Code Block
    "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 

    Code Block
    		"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

    Code Block
            "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

    Code Block
            "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"]
    			  }
    		    ]
            },	


...