{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "description": "The service type (should always be 'elasticsearch')",
            "pattern": "elasticsearch",
            "errorMessage": "Must equal 'elasticsearch'"
        },
        "version": {
            "type": "number",
            "errorMessage": "Must be a number"
        },
        "instance_type": {
            "type": "string",
            "errorMessage": "Must be a string"
        },
        "instance_count": {
            "type": "number",
            "errorMessage": "Must be a number"
        },
        "master_node": {
            "type": "object",
            "properties": {
                "instance_type": {
                    "type": "string",
                    "errorMessage": "Must be a string"
                },
                "instance_count": {
                    "type": "number",
                    "errorMessage": "Must be a number"
                }
            },
            "required": [
                "instance_type",
                "instance_count"
            ],
            "additionalProperties": false,
            "errorMessage": {
                "additionalProperties": "Invalid/unknown property specified",
                "required": {
                    "instance_type": "The 'instance_type' field is required",
                    "instance_count": "The 'instance_count' field is required"
                }
            }
        },
        "ebs": {
            "type": "object",
            "properties": {
                "size_gb": {
                    "type": "number",
                    "errorMessage": "Must be a number"
                },
                "provisioned_iops": {
                    "type": "number",
                    "errorMessage": "Must be a number"
                }
            },
            "required": [ "size_gb" ],
            "additionalProperties": false,
            "errorMessage": {
                "additionalProperties": "Invalid/unknown property specified",
                "required": {
                    "size_gb": "The 'size_gb' field is required"
                }
            }
        },
        "tags": {
            "type": "object",
            "description": "An arbitrary list of key/value pairs to be added as tags to the service",
            "patternProperties": {
                "^.*$": {
                    "anyOf": [
                        {"type": "string"},
                        {"type": "number"}
                    ]
                }
            },
            "errorMessage": "Must contain 1 or more simple key/value pairs where the values are strings or numbers",
            "additionalProperties": false
        }
    },
    "required": [
        "type", 
        "version"
    ],
    "additionalProperties": false,
    "errorMessage": {
        "additionalProperties": "Invalid/unknown property specified",
        "required": {
            "type": "The 'type' field is required",
            "version": "The 'version' field is required"
        }
    }
}