Format des éléments de registre¶
Un élément de registre décrit un composant : ses champs et les fichiers dont il effectue le rendu. Les composants intégrés sont des éléments de registre compilés dans kikx-core. Un fichier registry-item.json, local ou accessible par une URL, est chargé avec le même schéma. Source du schéma : backend/core/src/registry/item.rs.
Résolution des références¶
Une référence de composant est résolue dans cet ordre :
Étape |
Condition |
Résultat |
|---|---|---|
1 |
La partie après le dernier |
Ce composant intégré |
2 |
Commence par |
JSON récupéré par HTTP |
3 |
Désigne un fichier local existant |
JSON lu depuis le fichier |
4 |
Sinon |
Erreur : |
L’étape 1 s’applique aussi aux URL et aux chemins : https://example.com/items/role et ./items/deployment sont résolus vers les composants intégrés ansible/role et k8s/deployment. La catégorie n’est pas comparée : other/deployment est résolu vers k8s/deployment.
Les chemins relatifs sont résolus par rapport au répertoire de travail du processus de la CLI ou du backend.
Échec |
Message |
|---|---|
La récupération de l’URL échoue |
|
Le JSON ne correspond pas au schéma |
|
Élément¶
Clé |
Type |
Obligatoire |
Valeur par défaut |
Description |
|---|---|---|---|---|
|
chaîne |
oui |
— |
Nom du composant |
|
chaîne |
oui |
— |
Catégorie. La référence est |
|
chaîne |
non |
|
Titre affiché |
|
chaîne |
non |
|
Description sur une ligne |
|
tableau de Champ |
non |
|
Champs déclarés |
|
tableau de Fichier |
oui |
— |
Fichiers à rendre, dans l’ordre |
Champ¶
Clé |
Type |
Obligatoire |
Valeur par défaut |
Description |
|---|---|---|---|---|
|
chaîne |
oui |
— |
Nom du champ, et nom de la variable de template |
|
booléen |
non |
|
Le rendu échoue lorsqu’aucune valeur n’est fournie et que |
|
chaîne |
non |
absent |
Valeur utilisée lorsqu’aucune n’est fournie |
|
chaîne |
non |
absent |
Texte d’aide |
|
chaîne |
non |
absent |
Valeur d’exemple |
|
tableau d”Option |
non |
|
Valeurs suggérées. Non imposées |
Option¶
Clé |
Type |
Obligatoire |
Valeur par défaut |
Description |
|---|---|---|---|---|
|
chaîne |
oui |
— |
Valeur de l’option |
|
chaîne |
non |
|
Libellé affiché. L’API HTTP renvoie |
Fichier¶
Clé |
Type |
Obligatoire |
Description |
|---|---|---|---|
|
chaîne |
oui |
Template du chemin de sortie, relatif au répertoire cible |
|
chaîne |
oui |
Template du contenu du fichier |
Le rendu de path et de template est effectué avec MiniJinja à l’aide du contexte du template. Un retour à la ligne final dans template est conservé. Une variable non définie est rendue comme une chaîne vide.
Contexte du template¶
Variable |
Type |
Valeur |
|---|---|---|
|
chaîne |
Nom du composant : |
|
chaîne |
Champ |
|
map de chaîne vers chaîne |
Labels fournis, avec |
chaque champ déclaré sauf |
chaîne, liste ou map |
Valeur fournie, sinon |
chaque champ fourni non déclaré |
chaîne, liste ou map |
Valeur fournie |
Le namespace par défaut est :
Appelant |
Namespace par défaut |
|---|---|
|
|
|
|
|
|
Un champ déclaré nommé namespace n’a aucun effet : son default n’est pas appliqué.
Un champ obligatoire sans valeur fournie et sans default échoue avec --<field> is required for <category>/<name>.
Champs à valeur JSON¶
Toute valeur fournie et toute valeur par défaut est une chaîne. Une valeur dont le premier caractère autre qu’un espace est [ ou { est analysée comme du JSON :
Valeur |
Le template reçoit |
|---|---|
|
une liste |
|
une map, dont les clés sont parcourues dans l’ordre alphabétique |
|
la chaîne d’origine |
toute autre valeur |
la chaîne d’origine |
Règles de chemin¶
Vérifiées lorsque les fichiers sont écrits par kikx add, kikx setup et kikx apply. POST /api/render n’écrit rien et n’applique que la vérification des doublons au sein d’un même élément.
Règle |
Erreur |
|---|---|
Deux fichiers d’un même élément sont rendus vers le même chemin |
|
Deux fichiers d’une même exécution sont rendus vers le même chemin ( |
|
Le chemin est absolu |
|
Le chemin, lu de gauche à droite, remonte au-dessus du répertoire cible à un |
|
Le fichier cible existe et |
|
Toutes les vérifications ont lieu avant l’écriture du premier fichier. Les répertoires parents sont créés au besoin.
Exemple¶
registry-item.json :
{
"name": "configmap",
"category": "k8s",
"title": "ConfigMap",
"description": "Key/value configuration for pods.",
"fields": [
{"name": "data", "required": true, "description": "JSON map of keys and values.", "example": "{\"LOG_LEVEL\": \"info\"}"},
{"name": "immutable", "default": "false", "options": [{"value": "true"}, {"value": "false"}]}
],
"files": [
{
"path": "{{ name }}-configmap.yaml",
"template": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: {{ name }}\n namespace: {{ namespace }}\n labels:\n app: {{ labels.app }}\nimmutable: {{ immutable }}\ndata:\n{% for key in data %} {{ key }}: \"{{ data[key] }}\"\n{% endfor %}"
}
]
}
Commande :
kikx add ./registry-item.json --name web --set 'data={"LOG_LEVEL":"info","MODE":"prod"}'
Sortie, web-configmap.yaml :
apiVersion: v1
kind: ConfigMap
metadata:
name: web
namespace: default
labels:
app: web
immutable: false
data:
LOG_LEVEL: "info"
MODE: "prod"