{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://kubespray.io/internal/os_packages.schema.json",
    "title": "Os packages",
    "description": "Criteria for selecting packages to install on Kubernetes nodes during installation by Kubespray",
    "type": "object",
    "patternProperties": {
        ".*": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "Escape hatch to filter packages. The value is expected to be pre-resolved to a boolean by Jinja",
                    "type": "boolean",
                    "default": true
                },
                "groups": {
                    "description": "Match if the host is in one of these groups. If not specified match any host.",
                    "type": "array",
                    "minItems": 1,
                    "items":{
                        "type": "string",
                        "pattern": "^[0-9A-Za-z_]*$"
                    }
                },
                "os": {
                    "type": "object",
                    "description": "If not specified match any OS. Otherwise, must match by 'families' or 'distributions' to be included.",
                    "additionalProperties": false,
                    "minProperties": 1,
                    "properties": {
                        "families": {
                            "description": "Match if ansible_os_family is part of the list.",
                            "type": "array",
                            "minItems": 1,
                            "items": {
                                "type": "string"
                            }
                        },
                        "distributions": {
                            "type": "object",
                            "description": "Match if ansible_distribution match one of defined keys.",
                            "minProperties": 1,
                            "patternProperties": {
                                ".*": {
                                    "description": "Match if either the value is the empty hash, or one major_versions/versions/releases contains the corresponding variable ('ansible_distrbution_*')",
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "major_versions": {
                                            "type": "array",
                                            "minItems": 1,
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "versions": {
                                            "type": "array",
                                            "minItems": 1,
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "releases": {
                                            "type": "array",
                                            "minItems": 1,
                                            "items": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
