diff options
Diffstat (limited to 'src/ncm')
-rw-r--r-- | src/ncm/api/networkhandler.go | 9 | ||||
-rw-r--r-- | src/ncm/api/providernethandler.go | 8 | ||||
-rw-r--r-- | src/ncm/json-schemas/provider-network.json | 122 | ||||
-rw-r--r-- | src/ncm/json-schemas/virtual-network.json | 75 |
4 files changed, 214 insertions, 0 deletions
diff --git a/src/ncm/api/networkhandler.go b/src/ncm/api/networkhandler.go index ed266697..6f305be1 100644 --- a/src/ncm/api/networkhandler.go +++ b/src/ncm/api/networkhandler.go @@ -30,6 +30,9 @@ import ( "github.com/gorilla/mux" ) +var vnJSONFile string = "json-schemas/virtual-network.json" + + // Used to store backend implementations objects // Also simplifies mocking for unit testing purposes type networkHandler struct { @@ -86,6 +89,12 @@ func (h networkHandler) createNetworkHandler(w http.ResponseWriter, r *http.Requ return } + err, httpError := validation.ValidateJsonSchemaData(vnJSONFile, p) +if err != nil { + http.Error(w, err.Error(), httpError) + return +} + // Name is required. if p.Metadata.Name == "" { http.Error(w, "Missing name in POST request", http.StatusBadRequest) diff --git a/src/ncm/api/providernethandler.go b/src/ncm/api/providernethandler.go index 66a41a4d..48d5d7ea 100644 --- a/src/ncm/api/providernethandler.go +++ b/src/ncm/api/providernethandler.go @@ -31,6 +31,8 @@ import ( "github.com/gorilla/mux" ) +var pnetJSONFile string = "json-schemas/provider-network.json" + // Used to store backend implementations objects // Also simplifies mocking for unit testing purposes type providernetHandler struct { @@ -139,6 +141,12 @@ func (h providernetHandler) createProviderNetHandler(w http.ResponseWriter, r *h return } + err, httpError := validation.ValidateJsonSchemaData(pnetJSONFile, p) +if err != nil { + http.Error(w, err.Error(), httpError) + return +} + // Name is required. if p.Metadata.Name == "" { http.Error(w, "Missing name in POST request", http.StatusBadRequest) diff --git a/src/ncm/json-schemas/provider-network.json b/src/ncm/json-schemas/provider-network.json new file mode 100644 index 00000000..0aef0304 --- /dev/null +++ b/src/ncm/json-schemas/provider-network.json @@ -0,0 +1,122 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "required": [ + "cniType", + "ipv4Subnets", + "providerNetType", + "vlan" + ], + "type": "object", + "properties": { + "ipv4Subnets": { + "items": { + "required": [ + "name", + "subnet" + ], + "type": "object", + "properties": { + "subnet": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "excludeIps": { + "type": "string", + "maxLength": 128 + }, + "gateway": { + "type": "string", + "maxLength": 128 + }, + "name": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + } + } + }, + "type": "array" + }, + "cniType": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "vlan": { + "required": [ + "logicalInterfaceName", + "nodeLabelList", + "providerInterfaceName", + "vlanID", + "vlanNodeSelector" + ], + "type": "object", + "properties": { + "vlanNodeSelector": { + "type": "string", + "maxLength": 128 + }, + "nodeLabelList": { + "items": { + "type": "string", + "maxLength": 128 + }, + "type": "array" + }, + "providerInterfaceName": { + "type": "string", + "maxLength": 128 + }, + "vlanID": { + "type": "string", + "maxLength": 128 + }, + "logicalInterfaceName": { + "type": "string", + "maxLength": 128 + } + } + }, + "providerNetType": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } +}
\ No newline at end of file diff --git a/src/ncm/json-schemas/virtual-network.json b/src/ncm/json-schemas/virtual-network.json new file mode 100644 index 00000000..f2bc9d3d --- /dev/null +++ b/src/ncm/json-schemas/virtual-network.json @@ -0,0 +1,75 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "properties": { + "ipv4Subnets": { + "items": { + "required": [ + "name", + "subnet" + ], + "type": "object", + "properties": { + "subnet": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "excludeIps": { + "type": "string", + "maxLength": 1024 + }, + "gateway": { + "type": "string", + "maxLength": 128 + }, + "name": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + } + } + }, + "type": "array" + }, + "cniType": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } +}
\ No newline at end of file |