{
    "$schema": "http://json-schema.org/schema#",
    "$id": "Storage",
    "type": "object",
    "properties": {
        "name": {
            "description": "Name of the datacenter that acts as identifier",
            "type": "string",
            "$comment": "Maybe we should use a different tag as id"
        },
        "description": {
            "type": "string",
            "description": "General description of the processing unit"
        },
        "cpu": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "$comment": "If we use array to define multiple types of CPU (separated through motherboards?), we should use a id to be able to reffer to them"
                    },
                    "cores": {
                        "type": "integer"
                    },
                    "architecture": {
                        "type": "string",
                        "enum": [
                            "amd64",
                            "i386",
                            "armv5",
                            "armv7",
                            "amr64v8",
                            "s390x",
                            "ppc64le"
                        ]
                    },
                    "shared": {
                        "type": "boolean"
                    },
                    "minimum_memory": {
                        "type": "integer",
                        "$comment": "I'm not sure if a CPU requires a minimum RAM to work or is just limited to the motherboard where it's installed"
                    },
                    "platform": {
                        "type": "object",
                        "$comment": "Some CPU extensions are related to CPU platform"
                    }
                }
            }
        },
        "memory": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "$comment": "Same problem as with cpu[].id"
                    },
                    "size": {
                        "type": "integer",
                        "description": "Amount of memory in GiB"
                    },
                    "ecc": {
                        "type": "boolean"
                    }
                }
            }
        },
        "gpu": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "$comment": "Same problem as with cpu[].id"
                    },
                    "memory": {
                        "type": "integer",
                        "description": "Amount of memory in GiB"
                    },
                    "cores": {
                        "type": "integer",
                        "description": "Amount of core units"
                    },
                    "model": {
                        "type": "object"
                    }
                }
            }
        },
        "disk": {
            "$comment": "Should a datacenter have it's own definition of storage or directly refer to storage.json# ?"
        },
        "network": {
            "type": "object",
            "properties": {
                "wan": {
                    "type": "array",
                    "$comment": "Not sure if we need expose to the user the IP address, since we are inside virtualized network/cloud",
                    "items": {
                        "type": "object",
                        "properties": {
                            "ip": {
                                "type": "integer",
                                "description": "IP address expressed in deciman notation"
                            },
                            "ipv6": {
                                "type": "boolean"
                            },
                            "bandwitch": {
                                "type": "integer",
                                "description": "Bandwith described in Mbps"
                            }
                        }
                    }
                },
                "lan": {
                    "$comment": "Should be described?"
                }
            }
        },
        "booking_price": {
            "type": "object"
        },
        "processing_units": {
            "type": "array",
            "$comment": "A datacenter object can have multiple process units associated to him",
            "items": {
                "$ref": "processing.json#"
            }
        },
        "owner": {
            "type": "object"
        }
    }
}