{
    "title": "raid configuration json schema",
    "type": "object",
    "properties": {
        "logical_disks": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "raid_level": {
                        "type": "string",
                        "enum": [ "JBOD", "0", "1", "2", "5", "6", "1+0", "5+0", "6+0" ],
                        "description": "RAID level for the logical disk. Valid values are 'JBOD', '0', '1', '2', '5', '6', '1+0', '5+0' and '6+0'. Required."
                    },
                    "size_gb": {
                        "anyOf": [{
                                   "type": "integer",
                                   "minimum": 0,
                                   "exclusiveMinimum": true
                                  },
                                  {
                                   "type": "string",
                                   "enum": [ "MAX" ]
                                  }],
                        "description": "Size in GiB (Integer) for the logical disk. Use 'MAX' as size_gb if this logical disk is supposed to use the rest of the space available. Required."
                    },
                    "volume_name": {
                        "type": "string",
                        "description": "Name of the volume to be created. If this is not specified, it will be auto-generated. Optional."
                    },
                    "is_root_volume": {
                        "type": "boolean",
                        "description": "Specifies whether this disk is a root volume. By default, this is False. Optional."
                    },
                    "share_physical_disks": {
                        "type": "boolean",
                        "description": "Specifies whether other logical disks can share physical disks with this logical disk. By default, this is False. Optional."
                    },
                    "disk_type": {
                        "type": "string",
                        "enum": [ "hdd", "ssd" ],
                        "description": "The type of disk preferred. Valid values are 'hdd' and 'ssd'. If this is not specified, disk type will not be a selection criterion for choosing backing physical disks. Optional."
                    },
                    "interface_type": {
                        "type": "string",
                        "enum": [ "sata", "scsi", "sas" ],
                        "description": "The interface type of disk. Valid values are 'sata', 'scsi' and 'sas'. If this is not specified, interface type will not be a selection criterion for choosing backing physical disks. Optional."
                    },
                    "number_of_physical_disks": {
                        "type": "integer",
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "description": "Number of physical disks to use for this logical disk. By default, the driver uses the minimum number of disks required for that RAID level. Optional."
                    },
                    "controller": {
                        "type": "string",
                        "description": "Controller to use for this logical disk. If not specified, the driver will choose a suitable RAID controller on the bare metal node. Optional."
                    },
                    "physical_disks": {
                        "type": "array",
                        "items": { "type": "string" },
                        "description": "The physical disks to use for this logical disk. If not specified, the driver will choose suitable physical disks to use. Optional."
                    }
                },
                "required": ["raid_level", "size_gb"],
                "additionalProperties": false,
                "dependencies": {
                    "physical_disks": ["controller"]
                }
            },
            "minItems": 1
        }
    },
    "required": ["logical_disks"],
    "additionalProperties": false
}
