From a2019c1c2477166d81930dbe445e1a101ce9c72d Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Thu, 25 Apr 2024 16:13:55 +0200 Subject: [PATCH] Add a JSON schema describing the packages install structure Since the structure we're setting in place for installing packages has some complexity, add a JSON schema to avoid frustrating errors when modifying the informations (adding/removing packages install). --- .../preinstall/files/pkgs-schema.json | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 roles/kubernetes/preinstall/files/pkgs-schema.json diff --git a/roles/kubernetes/preinstall/files/pkgs-schema.json b/roles/kubernetes/preinstall/files/pkgs-schema.json new file mode 100644 index 000000000..22fd0fa19 --- /dev/null +++ b/roles/kubernetes/preinstall/files/pkgs-schema.json @@ -0,0 +1,75 @@ +{ + "$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": { + "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" + } + } + } + } + } + } + } + } + } + } + } +}