Includes

Au sein d’une organisation, les différents clusters ont la plupart du temps un vaste nombre de métriques en commun. Dans un souci de code “DRY”, l’outil dir2config gère l’héritage de configurations par le biais d’un mécanisme intitulé “includes”, et qui permet comme son nom l’indique d’inclure des fichiers parents depuis des enfants afin d’éviter d’en répéter la configuration sur ceux-ci.

Les configurations documentées ici (sauf les hosts bien entendu car forcément propres aux clusters) peuvent être définies dans un dossier parent au nom voulu et pouvant être placé n’importe où dans l’arborescence, elles seront alors appliquées par défaut à toutes les configurations. Par convention, il est tout de même conseillé d’utiliser le nom defaults pour ce dossier et c’est le nom qui sera utilisé dans la suite de cette documentation. Les différents clusters, hosts et configs du dossier courant pourront alors en hériter automatiquement.

Le dossier defaults PEUT être présent dans un répo git mais ce n’est pas obligatoire. Egalement, il peut être situé dans un endroit totalement différent de l’arborescence et trouvable par dir2config grâce à l’utilisation d’un lien symbolique.

Voici un exemple commun d’arborescence :

./
├─ defaults/
│  ├─ addons/
│  ├─ cert-requests.yaml
│  ├─ clusters/
│  ├─ configs/
│  ├─ hosts/
│  ├─ static-pods/
│  ├─ ssl-config.json
├─ clusters/
├─ hosts/
├─ includes.yaml            ## Ce fichier permet l'appel au dossier defaults

Les configurations héritées spécifient alors l’utilisation d’une configuration parente en appelant le dossier defaults voulu et la branche git optionnelle, par l’intermédiaire d’un fichier includes.yaml :

- path: defaults
  branch: v1.25            ## Optionnel

Avec cette configuration, le dossier “defaults” est recherché à la racine du dossier de configuration, ce qui peut être atteignable par un lien symbolique. A la suite de cette spécification, il est possible d’inclure des fichiers grâce à la spécification #!include en première ligne de configurations clusters et hosts.

Par exemple, le contenu du fichier clusters/prod.yml pourrait être :

#!include clusters/metal
 ^--------------- mot clé invariable
             ^-------- nom du dossier à hériter, pouvant être présent localement ou dans le dossier defaults
                    ^--- nom du fichier à hériter (omettre l'extension .yaml)

(... ajout des variables à écraser depuis le parent spécificé ci-dessus ...)

Ainsi, avec l’exemple précédent, le fichier defaults/clusters/metal dans la branche git v1.25 serait utilisé comme parent avec overwrite des variables enfants.