---
Title: Includes
Description: Compatible avec tous les types de fichiers décrits précédemment, ils représentent le meilleur moyen d'appliquer la méthode "DRY" en faisant référence à un autre fichier de référence.
Weight: 80
---

Au sein d'une organisation, les différents [clusters]({{< ref "configuration/clusters" >}}) ont la plupart du temps un vaste nombre de métriques en commun. Dans un souci de code "DRY", l'outil [dir2config]({{< ref "cli/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]({{< ref "configuration" >}}) documentées ici (sauf les [hosts]({{< ref "configuration/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.

{{% notice note %}}
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.
{{% /notice %}}

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.

