{
  "description": "Schema for IOx application descriptor - version 2.0", 
  "additionalProperties": false, 
  "definitions": {
    "descriptorschema_2_0.Devices": {
      "additionalProperties": false, 
      "required": [
        "type", 
        "label"
      ], 
      "type": "object", 
      "properties": {
        "usage": {
          "type": "string"
        }, 
        "device-id": {
          "type": "string"
        }, 
        "type": {
          "type": "string"
        }, 
        "label": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.ResourcesRecommendations": {
      "additionalProperties": false, 
      "required": [
        "profile", 
        "label", 
        "description"
      ], 
      "type": "object", 
      "properties": {
        "profile": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }, 
        "label": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.RuntimeOptions": {
      "additionalProperties": true, 
      "required": [
        "classpath"
      ], 
      "type": "object", 
      "properties": {
        "classpath": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.StartupLXC": {
      "additionalProperties": false, 
      "required": [
        "rootfs", 
        "target"
      ], 
      "type": "object", 
      "properties": {
        "target": {
          "pattern": "^[/a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }, 
        "rootfs": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.AppPaas": {
      "additionalProperties": false, 
      "required": [
        "type", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "stop": {
          "$ref": "#/definitions/descriptorschema_2_0.Stop"
        }, 
        "startup": {
          "oneOf": [
            {
              "$ref": "#/definitions/descriptorschema_2_0.StartupGenericLinux"
            }, 
            {
              "$ref": "#/definitions/descriptorschema_2_0.StartupNotGenericLinux"
            }
          ]
        }, 
        "depends-on": {
          "anyOf": [
            {
              "required": [
                "cartridges"
              ], 
              "type": "object", 
              "properties": {
                "cartridges": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_0.CartridgeDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }, 
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_0.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "paas"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_0.Resources"
        }
      }
    }, 
    "descriptorschema_2_0.ServicesProvides": {
      "additionalProperties": false, 
      "required": [
        "provides"
      ], 
      "type": "object", 
      "properties": {
        "provides": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_0.Service"
          }, 
          "type": "array"
        }
      }
    }, 
    "descriptorschema_2_0.AppInfo": {
      "additionalProperties": false, 
      "required": [
        "name", 
        "version"
      ], 
      "type": "object", 
      "properties": {
        "author-name": {
          "type": "string"
        }, 
        "version": {
          "type": "string"
        }, 
        "author-link": {
          "type": "string"
        }, 
        "name": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.StartupGenericLinux": {
      "additionalProperties": false, 
      "required": [
        "runtime", 
        "target"
      ], 
      "type": "object", 
      "properties": {
        "runtime": {
          "enum": [
            "generic-linux"
          ], 
          "type": "string"
        }, 
        "target": {
          "pattern": "^[a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.CartridgeDependsOn": {
      "additionalProperties": false, 
      "required": [
        "id", 
        "version"
      ], 
      "type": "object", 
      "properties": {
        "version": {
          "type": "number"
        }, 
        "id": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.Network": {
      "additionalProperties": false, 
      "required": [
        "interface-name"
      ], 
      "type": "object", 
      "properties": {
        "interface-name": {
          "type": "string"
        }, 
        "ports": {
          "anyOf": [
            {
              "required": [
                "tcp"
              ], 
              "type": "object", 
              "properties": {
                "tcp": {
                  "items": [
                    {
                      "type": "integer"
                    }
                  ], 
                  "type": "array"
                }
              }
            }, 
            {
              "required": [
                "udp"
              ], 
              "type": "object", 
              "properties": {
                "udp": {
                  "items": [
                    {
                      "type": "integer"
                    }
                  ], 
                  "type": "array"
                }
              }
            }
          ]
        }
      }
    }, 
    "descriptorschema_2_0.AppVM": {
      "additionalProperties": false, 
      "required": [
        "cpuarch", 
        "type", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "startup": {
          "$ref": "#/definitions/descriptorschema_2_0.StartupVM"
        }, 
        "depends-on": {
          "oneOf": [
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_0.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "vm"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_0.Resources"
        }
      }
    }, 
    "descriptorschema_2_0.StartupNotGenericLinux": {
      "additionalProperties": false, 
      "required": [
        "target", 
        "runtime-version"
      ], 
      "type": "object", 
      "properties": {
        "runtime-version": {
          "oneOf": [
            {
              "type": "number"
            }, 
            {
              "type": "string"
            }
          ]
        }, 
        "runtime-options": {
          "$ref": "#/definitions/descriptorschema_2_0.RuntimeOptions"
        }, 
        "runtime": {
          "not": {
            "enum": [
              "generic-linux"
            ], 
            "type": "string"
          }
        }, 
        "target": {
          "pattern": "^[a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.ServiceDependsOn": {
      "additionalProperties": false, 
      "required": [
        "id"
      ], 
      "type": "object", 
      "properties": {
        "required": {
          "type": "boolean"
        }, 
        "max-api-version": {
          "type": "number"
        }, 
        "id": {
          "type": "string"
        }, 
        "min-api-version": {
          "type": "number"
        }
      }
    }, 
    "descriptorschema_2_0.Service": {
      "additionalProperties": false, 
      "required": [
        "id", 
        "api-version", 
        "version"
      ], 
      "type": "object", 
      "properties": {
        "api-version": {
          "type": "number"
        }, 
        "version": {
          "type": "string"
        }, 
        "id": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.StartupVM": {
      "additionalProperties": false, 
      "required": [
        "rootfs", 
        "kernel"
      ], 
      "type": "object", 
      "properties": {
        "kernel": {
          "type": "string"
        }, 
        "rootfs": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.Stop": {
      "additionalProperties": false, 
      "required": [
        "target"
      ], 
      "type": "object", 
      "properties": {
        "target": {
          "pattern": "^[a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_0.AppLXC": {
      "additionalProperties": false, 
      "required": [
        "cpuarch", 
        "type", 
        "kernel-version", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "kernel-version": {
          "type": "string"
        }, 
        "startup": {
          "$ref": "#/definitions/descriptorschema_2_0.StartupLXC"
        }, 
        "depends-on": {
          "oneOf": [
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_0.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "lxc"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_0.Resources"
        }
      }
    }, 
    "descriptorschema_2_0.Resources": {
      "additionalProperties": false, 
      "required": [
        "profile"
      ], 
      "type": "object", 
      "properties": {
        "profile": {
          "type": "string"
        }, 
        "network": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_0.Network"
          }, 
          "type": "array"
        }, 
        "memory": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }, 
        "devices": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_0.Devices"
          }, 
          "type": "array"
        }, 
        "recommendations": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_0.ResourcesRecommendations"
          }, 
          "type": "array"
        }, 
        "disk": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }, 
        "cpu": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }
      }
    }
  }, 
  "$schema": "http://json-schema.org/draft-04/schema#", 
  "required": [
    "descriptor-schema-version", 
    "info", 
    "app"
  ], 
  "type": "object", 
  "properties": {
    "info": {
      "$ref": "#/definitions/descriptorschema_2_0.AppInfo"
    }, 
    "service-bundle": {
      "$ref": "#/definitions/descriptorschema_2_0.ServicesProvides"
    }, 
    "app": {
      "oneOf": [
        {
          "$ref": "#/definitions/descriptorschema_2_0.AppPaas"
        }, 
        {
          "$ref": "#/definitions/descriptorschema_2_0.AppLXC"
        }, 
        {
          "$ref": "#/definitions/descriptorschema_2_0.AppVM"
        }
      ]
    }, 
    "descriptor-schema-version": {
      "oneOf": [
        {
          "type": "string"
        }, 
        {
          "type": "number"
        }
      ]
    }
  }
}