{
  "description": "Schema for IOx application descriptor - version 2.4", 
  "additionalProperties": false, 
  "definitions": {
    "descriptorschema_2_4.ResourcesRecommendations": {
      "additionalProperties": false, 
      "required": [
        "profile", 
        "label", 
        "description"
      ], 
      "type": "object", 
      "properties": {
        "profile": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }, 
        "label": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.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_4.AppPaas": {
      "additionalProperties": false, 
      "required": [
        "type", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "stop": {
          "$ref": "#/definitions/descriptorschema_2_4.Stop"
        }, 
        "startup": {
          "oneOf": [
            {
              "$ref": "#/definitions/descriptorschema_2_4.StartupGenericLinux"
            }, 
            {
              "$ref": "#/definitions/descriptorschema_2_4.StartupNotGenericLinux"
            }
          ]
        }, 
        "depends-on": {
          "anyOf": [
            {
              "required": [
                "cartridges"
              ], 
              "type": "object", 
              "properties": {
                "cartridges": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_4.CartridgeDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }, 
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_4.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "paas"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_4.Resources"
        }
      }
    }, 
    "descriptorschema_2_4.StartupLXC": {
      "additionalProperties": false, 
      "required": [
        "rootfs", 
        "target"
      ], 
      "type": "object", 
      "properties": {
        "target": {
          "pattern": "^[/a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }, 
        "rootfs": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.CpuTopologyParams": {
      "additionalProperties": false, 
      "required": [
        "sockets-per-core", 
        "cores"
      ], 
      "type": "object", 
      "properties": {
        "cores": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }, 
        "sockets-per-core": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }
      }
    }, 
    "descriptorschema_2_4.Network": {
      "additionalProperties": false, 
      "required": [
        "interface-name"
      ], 
      "type": "object", 
      "properties": {
        "ports": {
          "anyOf": [
            {
              "type": "object", 
              "properties": {
                "tcp": {
                  "items": [
                    {
                      "anyOf": [
                        {
                          "type": "string"
                        }, 
                        {
                          "type": "integer"
                        }, 
                        {
                          "$ref": "#/definitions/descriptorschema_2_4.Ports"
                        }
                      ]
                    }
                  ], 
                  "type": "array"
                }
              }
            }, 
            {
              "type": "object", 
              "properties": {
                "udp": {
                  "items": [
                    {
                      "anyOf": [
                        {
                          "type": "string"
                        }, 
                        {
                          "type": "integer"
                        }, 
                        {
                          "$ref": "#/definitions/descriptorschema_2_4.Ports"
                        }
                      ]
                    }
                  ], 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "interface-name": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.AppDocker_2_2": {
      "additionalProperties": false, 
      "required": [
        "cpuarch", 
        "type", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "cpu-core": {
          "type": "string"
        }, 
        "startup": {
          "oneOf": [
            {
              "$ref": "#/definitions/descriptorschema_2_4.StartupDocker"
            }, 
            {
              "$ref": "#/definitions/descriptorschema_2_4.StartupDocker_2"
            }
          ]
        }, 
        "depends-on": {
          "oneOf": [
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_4.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "docker"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_4.Resources"
        }
      }
    }, 
    "descriptorschema_2_4.Stop": {
      "additionalProperties": false, 
      "required": [
        "target"
      ], 
      "type": "object", 
      "properties": {
        "target": {
          "pattern": "^[a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.AppLXC": {
      "additionalProperties": false, 
      "required": [
        "cpuarch", 
        "type", 
        "kernel-version", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "cpu-core": {
          "type": "string"
        }, 
        "startup": {
          "$ref": "#/definitions/descriptorschema_2_4.StartupLXC"
        }, 
        "kernel-version": {
          "type": "string"
        }, 
        "depends-on": {
          "oneOf": [
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_4.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "lxc"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_4.Resources"
        }
      }
    }, 
    "descriptorschema_2_4.ServicesProvides": {
      "additionalProperties": false, 
      "required": [
        "provides"
      ], 
      "type": "object", 
      "properties": {
        "provides": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_4.Service"
          }, 
          "type": "array"
        }
      }
    }, 
    "descriptorschema_2_4.RuntimeOptions": {
      "additionalProperties": true, 
      "required": [
        "classpath"
      ], 
      "type": "object", 
      "properties": {
        "classpath": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.ServiceDependsOn": {
      "additionalProperties": false, 
      "required": [
        "id", 
        "label"
      ], 
      "type": "object", 
      "properties": {
        "label": {
          "type": "string"
        }, 
        "required": {
          "type": "boolean"
        }, 
        "max-api-version": {
          "type": "number"
        }, 
        "id": {
          "type": "string"
        }, 
        "min-api-version": {
          "type": "number"
        }
      }
    }, 
    "descriptorschema_2_4.CartridgeDependsOn": {
      "additionalProperties": false, 
      "required": [
        "id", 
        "version"
      ], 
      "type": "object", 
      "properties": {
        "version": {
          "type": "number"
        }, 
        "id": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.Resources": {
      "additionalProperties": false, 
      "required": [
        "profile"
      ], 
      "type": "object", 
      "properties": {
        "profile": {
          "type": "string"
        }, 
        "cpu-topology": {
          "oneOf": [
            {
              "$ref": "#/definitions/descriptorschema_2_4.CpuTopologyParams"
            }
          ]
        }, 
        "graphics": {
          "$ref": "#/definitions/descriptorschema_2_4.Graphics"
        }, 
        "platform-env": {
          "items": {
            "type": "string"
          }, 
          "type": "array"
        }, 
        "network": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_4.Network"
          }, 
          "type": "array"
        }, 
        "vcpu": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }, 
        "memory": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }, 
        "device-info": {
          "items": {
            "enum": [
              "udi"
            ], 
            "type": "string"
          }, 
          "type": "array"
        }, 
        "broker": {
          "items": {
            "enum": [
              "BrokerClient", 
              "Broker"
            ], 
            "type": "string"
          }, 
          "type": "array"
        }, 
        "devices": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_4.Devices"
          }, 
          "type": "array"
        }, 
        "chardev": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_4.CharDev"
          }, 
          "type": "array"
        }, 
        "recommendations": {
          "items": {
            "$ref": "#/definitions/descriptorschema_2_4.ResourcesRecommendations"
          }, 
          "type": "array"
        }, 
        "oauth": {
          "items": {
            "enum": [
              "OauthClient", 
              "OauthValidator"
            ], 
            "type": "string"
          }, 
          "type": "array"
        }, 
        "disk": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }, 
        "cpu": {
          "oneOf": [
            {
              "type": "string"
            }, 
            {
              "type": "integer"
            }
          ]
        }
      }
    }, 
    "descriptorschema_2_4.StartupVM_2_1_RFS": {
      "additionalProperties": false, 
      "required": [
        "rootfs", 
        "kernel"
      ], 
      "type": "object", 
      "properties": {
        "ostype": {
          "type": "string"
        }, 
        "kernel": {
          "type": "string"
        }, 
        "qemu-guest-agent": {
          "type": "boolean"
        }, 
        "rootfs": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.StartupVM_2_1_DISKS": {
      "additionalProperties": false, 
      "required": [
        "disks"
      ], 
      "type": "object", 
      "properties": {
        "ostype": {
          "type": "string"
        }, 
        "disks": {
          "items": {
            "type": "object", 
            "properties": {
              "target-dev": {
                "type": "string"
              }, 
              "file": {
                "type": "string"
              }
            }
          }, 
          "type": "array"
        }, 
        "qemu-guest-agent": {
          "type": "boolean"
        }
      }
    }, 
    "descriptorschema_2_4.CharDev": {
      "additionalProperties": false, 
      "required": [
        "dev", 
        "type"
      ], 
      "type": "object", 
      "properties": {
        "type": {
          "type": "string"
        }, 
        "dev": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.Ports": {
      "additionalProperties": false, 
      "required": [
        "port"
      ], 
      "type": "object", 
      "properties": {
        "port": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.StartupDocker_2": {
      "additionalProperties": false, 
      "required": [
        "image-name", 
        "tag", 
        "target"
      ], 
      "type": "object", 
      "properties": {
        "image-name": {
          "type": "string"
        }, 
        "tag": {
          "type": "string"
        }, 
        "target": {
          "oneOf": [
            {
              "pattern": "^[/a-zA-Z]([^/]+(/)?)+$", 
              "type": "string"
            }, 
            {
              "items": {
                "type": "string"
              }, 
              "type": "array"
            }
          ]
        }
      }
    }, 
    "descriptorschema_2_4.Devices": {
      "additionalProperties": false, 
      "required": [
        "type", 
        "label"
      ], 
      "type": "object", 
      "properties": {
        "function": {
          "type": "string"
        }, 
        "mandatory": {
          "type": "boolean"
        }, 
        "device-id": {
          "type": "string"
        }, 
        "label": {
          "type": "string"
        }, 
        "usage": {
          "type": "string"
        }, 
        "type": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.Graphics": {
      "additionalProperties": false, 
      "type": "object", 
      "properties": {
        "vnc": {
          "type": "boolean"
        }
      }
    }, 
    "descriptorschema_2_4.Service": {
      "additionalProperties": false, 
      "required": [
        "id", 
        "api-version", 
        "version"
      ], 
      "type": "object", 
      "properties": {
        "api-version": {
          "type": "number"
        }, 
        "port-mapping": {
          "items": {
            "pattern": "^[\\w]+:(tcp|udp){1}:[0-9-]+$", 
            "type": "string"
          }, 
          "type": "array"
        }, 
        "version": {
          "type": "string"
        }, 
        "id": {
          "type": "string"
        }, 
        "description": {
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.StartupGenericLinux": {
      "additionalProperties": false, 
      "required": [
        "runtime", 
        "target"
      ], 
      "type": "object", 
      "properties": {
        "runtime": {
          "enum": [
            "generic-linux"
          ], 
          "type": "string"
        }, 
        "target": {
          "pattern": "^[a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.AppVM": {
      "additionalProperties": false, 
      "required": [
        "cpuarch", 
        "type", 
        "startup"
      ], 
      "type": "object", 
      "properties": {
        "cpu-core": {
          "type": "string"
        }, 
        "startup": {
          "oneOf": [
            {
              "$ref": "#/definitions/descriptorschema_2_4.StartupVM_2_1_RFS"
            }, 
            {
              "$ref": "#/definitions/descriptorschema_2_4.StartupVM_2_1_DISKS"
            }
          ]
        }, 
        "depends-on": {
          "oneOf": [
            {
              "required": [
                "services"
              ], 
              "type": "object", 
              "properties": {
                "services": {
                  "items": {
                    "$ref": "#/definitions/descriptorschema_2_4.ServiceDependsOn"
                  }, 
                  "type": "array"
                }
              }
            }
          ]
        }, 
        "cpuarch": {
          "type": "string"
        }, 
        "env": {
          "additionalProperties": true, 
          "type": "object", 
          "properties": {}
        }, 
        "type": {
          "enum": [
            "vm"
          ], 
          "type": "string"
        }, 
        "resources": {
          "$ref": "#/definitions/descriptorschema_2_4.Resources"
        }
      }
    }, 
    "descriptorschema_2_4.StartupNotGenericLinux": {
      "additionalProperties": false, 
      "required": [
        "target", 
        "runtime-version"
      ], 
      "type": "object", 
      "properties": {
        "runtime-version": {
          "oneOf": [
            {
              "type": "number"
            }, 
            {
              "type": "string"
            }
          ]
        }, 
        "runtime-options": {
          "$ref": "#/definitions/descriptorschema_2_4.RuntimeOptions"
        }, 
        "runtime": {
          "not": {
            "enum": [
              "generic-linux"
            ], 
            "type": "string"
          }
        }, 
        "target": {
          "pattern": "^[a-zA-Z]([^/]+(/)?)+$", 
          "type": "string"
        }
      }
    }, 
    "descriptorschema_2_4.StartupDocker": {
      "additionalProperties": false, 
      "required": [
        "rootfs", 
        "target"
      ], 
      "type": "object", 
      "properties": {
        "target": {
          "oneOf": [
            {
              "pattern": "^[/a-zA-Z]([^/]+(/)?)+$", 
              "type": "string"
            }, 
            {
              "items": {
                "type": "string"
              }, 
              "type": "array"
            }
          ]
        }, 
        "rootfs": {
          "type": "string"
        }
      }
    }
  }, 
  "$schema": "http://json-schema.org/draft-04/schema#", 
  "required": [
    "descriptor-schema-version", 
    "info", 
    "app"
  ], 
  "type": "object", 
  "properties": {
    "info": {
      "$ref": "#/definitions/descriptorschema_2_4.AppInfo"
    }, 
    "service-bundle": {
      "$ref": "#/definitions/descriptorschema_2_4.ServicesProvides"
    }, 
    "app": {
      "oneOf": [
        {
          "$ref": "#/definitions/descriptorschema_2_4.AppPaas"
        }, 
        {
          "$ref": "#/definitions/descriptorschema_2_4.AppLXC"
        }, 
        {
          "$ref": "#/definitions/descriptorschema_2_4.AppVM"
        }, 
        {
          "$ref": "#/definitions/descriptorschema_2_4.AppDocker_2_2"
        }
      ]
    }, 
    "descriptor-schema-version": {
      "oneOf": [
        {
          "type": "string"
        }, 
        {
          "type": "number"
        }
      ]
    }
  }
}