{
    "$schema": "http://redfish.dmtf.org/schemas/v1/redfish-schema.v1_1_0.json",
    "title": "#Storage.v1_0_2.Storage",
    "$ref": "#/definitions/Storage",
    "definitions": {
        "SetEncryptionKey": {
            "patternProperties": {
                "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                    "type": [
                        "array",
                        "boolean",
                        "number",
                        "null",
                        "object",
                        "string"
                    ],
                    "description": "This property shall specify a valid odata or Redfish property."
                }
            },
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "title": {
                    "type": "string",
                    "description": "Friendly action name"
                },
                "target": {
                    "type": "string",
                    "format": "uri",
                    "description": "Link to invoke action"
                }
            },
            "description": "This action is used to set the encryption key for the storage subsystem.",
            "longDescription": "This defines the name of the custom action supported on this resource."
        },
        "Protocol": {
            "type": "string",
            "enum": [
                "PCIe",
                "AHCI",
                "UHCI",
                "SAS",
                "SATA",
                "USB",
                "NVMe",
                "FC",
                "iSCSI",
                "FCoE",
                "NVMeOverFabrics",
                "SMB",
                "NFSv3",
                "NFSv4",
                "HTTP",
                "HTTPS",
                "FTP",
                "SFTP"
            ],
            "enumDescriptions": {
                "PCIe": "PCI Express (Vendor Proprietary).",
                "AHCI": "Advanced Host Controller Interface.",
                "UHCI": "Universal Host Controller Interface.",
                "SAS": "Serial Attached SCSI.",
                "SATA": "Serial AT Attachment.",
                "USB": "Universal Serial Bus.",
                "NVMe": "Non-Volatile Memory Express.",
                "FC": "Fibre Channel.",
                "iSCSI": "Internet SCSI.",
                "FCoE": "Fibre Channel over Ethernet.",
                "NVMeOverFabrics": "NVMe over Fabrics.",
                "SMB": "Server Message Block (aka CIFS Common Internet File System).",
                "NFSv3": "Network File System version 3.",
                "NFSv4": "Network File System version 4.",
                "HTTP": "Hypertext Transport Protocol.",
                "HTTPS": "Secure Hypertext Transport Protocol.",
                "FTP": "File Transfer Protocol.",
                "SFTP": "Secure File Transfer Protocol."
            },
            "enumLongDescriptions": {
                "PCIe": "This value shall mean that this device conforms to the PCI-SIG PCI Express Base Specification only beyond that is uses some vendor proprietary mechanism to communicate.",
                "AHCI": "This value shall mean that this device conforms to the Intel Advanced Host Controller Interface Specification.",
                "UHCI": "This value shall mean that this device conforms to the Intel Universal Host Controller Interface Specification, Enhanced Host Controller Interface Specification, or the Extensible Host Controller Interface specification.",
                "SAS": "This value shall mean that this device conforms to the T10 SAS Protocol Layer Specification.",
                "SATA": "This value shall mean that this device conforms to the Serial ATA International Organization Serial ATA Specification.",
                "USB": "This value shall mean that this device conforms to the USB Implementers Forum Universal Serial Bus Specification.",
                "NVMe": "This value shall mean that this device conforms to the Non-Volatile Memory Host Controller Interface Specification Specification.",
                "FC": "This value shall mean that this device conforms to the T11 Fibre Channel Physical and Signaling Interface Specification.",
                "iSCSI": "This value shall mean that this device conforms to the IETF Internet Small Computer Systems Interface (iSCSI) Specification.",
                "FCoE": "This value shall mean that this device conforms to the T11 FC-BB-5 Specification.",
                "NVMeOverFabrics": "This value shall mean that this device conforms to the NVM Express over Fabrics Specification.",
                "SMB": "This value shall mean that this device conforms to the Microsoft Server Message Block Protocol.",
                "NFSv3": "This value shall mean that this device conforms to the Network File System protocol as defined by RFC 1813.",
                "NFSv4": "This value shall mean that this device conforms to the Network File System protocol as defined by RFC 3010 or RFC 5661.",
                "HTTP": "This value shall mean that this device conforms to the Hypertext Transfer protocol as defined by RFC 2068 or RFC 2616.",
                "HTTPS": "This value shall mean that this device conforms to the Hypertext Transfer protocol as defined by RFC 2068 or RFC 2616 utilizing Transport Layer Security as specified by RFC 5246 or RFC 6176.",
                "FTP": "This value shall mean that this device conforms to the File Transfer protocol as defined by RFC 114.",
                "SFTP": "This value shall mean that this device conforms to the File Transfer protocol as defined by RFC 114 utilizing Transport Layer Security as specified by RFC 5246 or RFC 6176."
            }
        },
        "StorageController": {
            "type": "object",
            "patternProperties": {
                "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                    "type": [
                        "array",
                        "boolean",
                        "number",
                        "null",
                        "object",
                        "string"
                    ],
                    "description": "This property shall specify a valid odata or Redfish property."
                }
            },
            "additionalProperties": false,
            "properties": {
                "Oem": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Oem",
                    "description": "This is the manufacturer/provider specific extension moniker used to divide the Oem object into sections.",
                    "longDescription": "The value of this string shall be of the format for the reserved word *Oem*."
                },
                "MemberId": {
                    "type": "string",
                    "readonly": true,
                    "description": "This is the identifier for the member within the collection.",
                    "longDescription": "The value of this string shall uniquely identify the member within the collection."
                },
                "Status": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Status"
                },
                "SpeedGbps": {
                    "type": [
                        "number",
                        "null"
                    ],
                    "minimum": 0,
                    "units": "Gbit/s",
                    "readonly": true,
                    "description": "The speed of the storage controller interface.",
                    "longDescription": "The value of this property shall represent the speed of the Storage bus interface (in Gigabits per second)."
                },
                "FirmwareVersion": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": true,
                    "description": "The firmware version of this storage Controller.",
                    "longDescription": "This property shall contain the firwmare version as defined by the manufacturer for the associated storage controller."
                },
                "Manufacturer": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": true,
                    "description": "This is the manufacturer of this storage controller.",
                    "longDescription": "The value of this property shall be the name of the organization responsible for producing the storage controller. This organization might be the entity from whom the storage controller is purchased, but this is not necessarily true."
                },
                "Model": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": true,
                    "description": "This is the model number for the storage controller.",
                    "longDescription": "The value of this property shall be the name by which the manufacturer generally refers to the storage controller."
                },
                "SKU": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": true,
                    "description": "This is the SKU for this storage controller.",
                    "longDescription": "The value of this property shall be the stock-keeping unit number for this storage storage controller."
                },
                "SerialNumber": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": true,
                    "description": "The serial number for this storage controller.",
                    "longDescription": "The value of this property shall be a manufacturer-allocated number used to identify the storage controller."
                },
                "PartNumber": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": true,
                    "description": "The part number for this storage controller.",
                    "longDescription": "The value of this property shall be a part number assigned by the organization that is responsible for producing or manufacturing the storage controller."
                },
                "AssetTag": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "readonly": false,
                    "description": "The user assigned asset tag for this storage controller.",
                    "longDescription": "The value of this property shall be an identifying string used to track the storage controller for inventory purposes."
                },
                "SupportedControllerProtocols": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Protocol"
                    },
                    "readonly": true,
                    "description": "This represents the protocols by which this storage controller can be communicated to.",
                    "longDescription": "The value of this property shall be the set of protocols this storage controller can be communicated to."
                },
                "SupportedDeviceProtocols": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Protocol"
                    },
                    "readonly": true,
                    "description": "This represents the protocols which the storage controller can use to communicate with attached devices.",
                    "longDescription": "The value of this property shall be the set of protocols this storage controller can use to communicate with attached devices."
                },
                "Identifiers": {
                    "type": "array",
                    "items": {
                        "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.v1_1_0.json#/definitions/Identifier"
                    },
                    "description": "The Durable names for the storage controller.",
                    "longDescription": "This property shall contain a list of all known durable names for the associated storage controller."
                }
            },
            "description": "This schema defines a storage controller and its respective properties.  A storage controller represents a storage device (physical or virtual) that produces Volumes.",
            "longDescription": "This resource shall be used to represent a resource that represents a storage controller in the Redfish specification."
        },
        "Storage": {
            "type": "object",
            "patternProperties": {
                "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                    "type": [
                        "array",
                        "boolean",
                        "number",
                        "null",
                        "object",
                        "string"
                    ],
                    "description": "This property shall specify a valid odata or Redfish property."
                }
            },
            "additionalProperties": false,
            "properties": {
                "@odata.context": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/context"
                },
                "@odata.id": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/id"
                },
                "@odata.type": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/type"
                },
                "Oem": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Oem",
                    "description": "This is the manufacturer/provider specific extension moniker used to divide the Oem object into sections.",
                    "longDescription": "The value of this string shall be of the format for the reserved word *Oem*."
                },
                "Id": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Id",
                    "readonly": true
                },
                "Description": {
                    "anyOf": [
                        {"$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Description"},
                        {"type": "null"}
                    ],
                    "readonly": true
                },
                "Name": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Name",
                    "readonly": true
                },
                "Links": {
                    "type": "object",
                    "patternProperties": {
                        "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                            "type": [
                                "array",
                                "boolean",
                                "number",
                                "null",
                                "object",
                                "string"
                            ],
                            "description": "This property shall specify a valid odata or Redfish property."
                        }
                    },
                    "additionalProperties": false,
                    "properties": {
                        "Oem": {
                            "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Oem",
                            "description": "Oem extension object.",
                            "longDescription": "This object represents the Oem property.  All values for resources described by this schema shall comply to the requirements as described in the Redfish specification."
                        },
                        "Enclosures@odata.count": {
                            "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                        },
                        "Enclosures@odata.navigationLink": {
                            "type": "string",
                            "format": "uri"
                        },
                        "Enclosures": {
                            "type": "array",
                            "items": {
                                "$ref": "http://redfish.dmtf.org/schemas/v1/Chassis.json#/definitions/Chassis"
                            },
                            "readonly": true,
                            "description": "An array of references to the chassis to which this storage subsystem is attached.",
                            "longDescription": "The value of this property shall reference a resource of type Chassis that represents the physical containers attached to this resource."
                        }
                    },
                    "description": "Contains references to other resources that are related to this resource.",
                    "longDescription": "The Links property, as described by the Redfish Specification, shall contain references to resources that are related to, but not contained by (subordinate to), this resource."
                },
                "Actions": {
                    "type": "object",
                    "patternProperties": {
                        "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                            "type": [
                                "array",
                                "boolean",
                                "number",
                                "null",
                                "object",
                                "string"
                            ],
                            "description": "This property shall specify a valid odata or Redfish property."
                        }
                    },
                    "additionalProperties": false,
                    "properties": {
                        "Oem": {
                            "type": "object",
                            "patternProperties": {
                                "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                                    "type": [
                                        "array",
                                        "boolean",
                                        "number",
                                        "null",
                                        "object",
                                        "string"
                                    ],
                                    "description": "This property shall specify a valid odata or Redfish property."
                                }
                            },
                            "additionalProperties": true,
                            "properties": {}
                        },
                        "#Storage.SetEncryptionKey": {
                            "$ref": "#/definitions/SetEncryptionKey"
                        }
                    },
                    "description": "The available actions for this resource.",
                    "longDescription": "The Actions property shall contain the available actions for this resource."
                },
                "Status": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Status"
                },
                "StorageControllers@odata.count": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                },
                "StorageControllers@odata.navigationLink": {
                    "type": "string",
                    "format": "uri"
                },
                "StorageControllers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/StorageController"
                    },
                    "readonly": true,
                    "description": "The set of storage controllers represented by this resource.",
                    "longDescription": "A collection that indicates all the storage controllers that this resource represents."
                },
                "Drives@odata.count": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                },
                "Drives@odata.navigationLink": {
                    "type": "string",
                    "format": "uri"
                },
                "Drives": {
                    "type": "array",
                    "items": {
                        "$ref": "http://redfish.dmtf.org/schemas/v1/Drive.json#/definitions/Drive"
                    },
                    "readonly": true,
                    "description": "The set of drives attached to the storage controllers represented by this resource.",
                    "longDescription": "A collection that indicates all the drives attached to the storage controllers that this resource represents."
                },
                "Volumes": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/VolumeCollection.json#/definitions/VolumeCollection",
                    "readonly": true,
                    "description": "The set of volumes produced by the storage controllers represented by this resource.",
                    "longDescription": "A collection that indicates all the volumes produced by the storage controllers that this resource represents."
                },
                "Redundancy@odata.count": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                },
                "Redundancy@odata.navigationLink": {
                    "type": "string",
                    "format": "uri"
                },
                "Redundancy": {
                    "type": "array",
                    "items": {
                        "$ref": "http://redfish.dmtf.org/schemas/v1/Redundancy.json#/definitions/Redundancy"
                    },
                    "description": "Redundancy information for the storage subsystem."
                }
            },
            "required": [
                "Id",
                "Name"
            ],
            "description": "This schema defines a storage subsystem and its respective properties.  A storage subsystem represents a set of storage controllers (physical or virtual) and the resources such as volumes that can be accessed from that subsystem.",
            "longDescription": "This resource shall be used to represent resources that represent a storage subsystem in the Redfish specification."
        }
    },
    "copyright": "Copyright 2014-2016 Distributed Management Task Force, Inc. (DMTF). For the full DMTF copyright policy, see http://www.dmtf.org/about/policies/copyright"
}
