Je voudrais écrire un manifeste de marionnette pour installer et configurer une application sur des serveurs cibles.
Des parties de ce manifeste doivent être réutilisables. Ainsi, j'ai utilisé define
pour définir ma fonctionnalité réutilisable. En le faisant, j'ai toujours le problème que certaines parties de la définition ne sont pas réutilisables.
Un exemple simple est un ensemble de fichiers de configuration à créer. Ces fichiers doivent être placés dans le même répertoire. Ce répertoire doit être créé une seule fois.
Exemple :
nodes.pp
nœud 'monNœud.dans.undomaine' {
mymodule::addconfig {'configfile1.xml':
param => 'valeurquelconque',
}
mymodule::addconfig {'configfile2.xml':
param => 'uneautrevaleur',
}
}
mymodule.pp
définir mymodule::addconfig ($param) {
$config_dir = "/le/répertoire/"
#assurer que le répertoire existe :
file { $config_dir:
assurer => répertoire,
}
#créer le fichier de configuration :
file { $name:
chemin => "${config_dir}/${name}"
contenu => modèle('a_template.erb'),
nécessite => Fichier[$config_dir],
}
}
Cet exemple va échouer, car la ressource fichier {$config_dir:
est définie deux fois maintenant.
D'après ce que j'ai compris, il est nécessaire d'extraire ces parties dans une classe
. Ensuite, cela ressemble à ceci :
nodes.pp
nœud 'monNœud.dans.undomaine' {
class { 'mymodule::createConfigurationDirectory':
}
mymodule::addconfig {'configfile1.xml':
param => 'valeurquelconque',
nécessite => Classe ['mymodule::createConfigurationDirectory'],
}
mymodule::addconfig {'configfile2.xml':
param => 'uneautrevaleur',
nécessite => Classe ['mymodule::createConfigurationDirectory'],
}
}
Mais cela rend mon interface difficile à utiliser. Chaque utilisateur de mon module doit savoir qu'il y a une classe qui est en plus requise. Pour ce cas d'utilisation simple, la classe supplémentaire peut être acceptable. Mais avec la complexité croissante du module (beaucoup de définitions), j'ai un peu peur de perturber l'utilisateur des modules.
Donc, j'aimerais savoir s'il existe une meilleure façon de gérer ces dépendances. Idéalement, des classes comme createConfigurationDirectory
sont cachées de l'utilisateur de l'API des modules.
Ou existe-t-il d'autres "Meilleures pratiques"/modèles pour gérer de telles dépendances ?