diff --git a/configs/strategies.schema.json b/configs/strategies.schema.json new file mode 100644 index 00000000000..26e2448f378 --- /dev/null +++ b/configs/strategies.schema.json @@ -0,0 +1,256 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://github.com/apache/trafficserver/tree/master/configs/strategies.schema.json", + "$ref": "#/definitions/Strategies", + "definitions": { + "Strategies": { + "type": "object", + "additionalProperties": false, + "properties": { + "hosts": { + "type": "array", + "description": "An array of hosts assinged to a group", + "items": { + "$ref": "#/definitions/Host" + } + }, + "groups": { + "type": "array", + "description": "A group otherwise known as a ring, is a collection of hosts", + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/Group" + } + } + }, + "strategies": { + "type": "array", + "description": "A next hop selection strategy definition", + "items": { + "$ref": "#/definitions/Strategy" + } + } + }, + "required": [ + "groups", + "hosts", + "strategies" + ], + "title": "Trafficserver Strategies" + }, + "Group": { + "type": "object", + "additionalProperties": false, + "description": "A host member within a group or ring", + "properties": { + "host": { + "type": "string", + "description": "The hosts fully qualified hostname or IP address" + }, + "protocol": { + "type": "array", + "description": "The set of protocols supported on this host", + "items": { + "$ref": "#/definitions/Protocol" + } + }, + "weight": { + "type": "number", + "description": "The optional weighting to apply for this host within a ring" + } + }, + "required": [ + "host", + "protocol" + ], + "title": "Group" + }, + "Protocol": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "$ref": "#/definitions/Scheme" + }, + "port": { + "type": "integer", + "description": "the protocol port number", + "minimum": 80, + "maximum": 65534 + }, + "health_check_url": { + "type": "string", + "description": "the optional url that may be used for a health checking system", + "format": "uri", + "qt-uri-protocols": [ + "http", + "https", + "tcp" + ] + } + }, + "required": [ + "port", + "scheme" + ], + "title": "Protocol" + }, + "Host": { + "type": "object", + "additionalProperties": false, + "properties": { + "host": { + "type": "string", + "description": "The fully qualified host name or IP address of the host" + }, + "protocol": { + "type": "array", + "items": { + "$ref": "#/definitions/Protocol" + } + } + }, + "required": [ + "host", + "protocol" + ], + "title": "Host" + }, + "Strategy": { + "type": "object", + "additionalProperties": false, + "properties": { + "strategy": { + "type": "string", + "description": "the name assigned to this strategy" + }, + "policy": { + "type": "string", + "description": "the host selection algorithm for the strategy", + "enum": [ + "rr_ip", + "rr_strict", + "first_live", + "latched", + "consistent_hash" + ] + }, + "hash_key": { + "type": "string", + "description": "when using consistent_hash, this specifies the chosen key used for the hash", + "enum": [ + "hostname", + "path", + "path+query", + "path+fragment", + "cache_key", + "url" + ] + }, + "go_direct": { + "type": "boolean", + "description": "wether, true/false, users of the strategy may bypass parents and go directly to the origin" + }, + "parent_is_proxy": { + "type": "boolean", + "description": "all the hosts assigned to the strategy are all caching proxy servers" + }, + "cache_peer_result": { + "type": "boolean", + "description": "cache or do not cache proxy peer responses when using a peering ring mode and consistent hashing" + }, + "groups": { + "type": "array", + "description": "the groups of hosts assigned to the strategy", + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/Group" + } + } + }, + "scheme": { + "$ref": "#/definitions/Scheme" + }, + "failover": { + "$ref": "#/definitions/Failover" + } + }, + "required": [ + "groups", + "policy", + "scheme", + "strategy" + ], + "title": "Strategy" + }, + "Failover": { + "type": "object", + "description": "failover configuration for the strategy", + "additionalProperties": false, + "properties": { + "max_simple_retries": { + "type": "integer", + "description": "the maximum number of retries for a transaction when using simple retry", + "minimum": 0, + "maximum": 5 + }, + "max_unavailable_retries": { + "type": "integer", + "description": "the maximum number of retries for a transaction when using unavailable server retry", + "minimum": 0, + "maximum": 5 + }, + "ring_mode": { + "type": "string", + "description": "the ring host selection mode", + "enum": [ + "exhaust_ring", + "alternate_ring", + "peering_ring" + ] + }, + "response_codes": { + "type": "array", + "description": "list of simple retry http response codes", + "items": { + "type": "integer", + "minimum": 400, + "maximum": 599 + } + }, + "markdown_codes": { + "type": "array", + "description": "list of unavailable server retry http response codes", + "items": { + "type": "integer", + "minimum": 400, + "maximum": 599 + } + }, + "health_check": { + "type": "array", + "description": "the health checking mode used for the strategy", + "items": { + "type": "string", + "enum": [ + "active", + "passive" + ] + } + } + }, + "title": "Failover" + }, + "Scheme": { + "type": "string", + "description": "the supported protocols used within the strategy", + "enum": [ + "http", + "https" + ], + "title": "Scheme" + } + } +}