Utilisation d'une recette Chef pour ajouter plusieurs lignes à un fichier de configuration
Je suis en train de créer une recette Chef pour ajouter plusieurs lignes (20 à 30) à un fichier de config.
Je suis conscient que le modèle recommandé est de changer ensemble de fichiers de configuration plutôt que de simplement ajouter du texte à un fichier, mais je n'aime pas cette approche pour plusieurs raisons.
Jusqu'à présent, la seule solution que j'ai trouvé est d'utiliser un cookbook_file
et ensuite utiliser un bash de ressources pour le faire:
cat lines_to_append >> /path/configfile
Évidemment, cela ne fonctionnerait pas correctement, il faudrait ajouter un fichier de plus de et plus, à chaque fois que vous exécutez le chef-client. Je dois créer un petit script bash pour rechercher une chaîne spécifique à la première, et, si elle ne trouve pasajouter au fichier.
Mais ce qui semble à l'encontre du but de l'utilisation de Chef. Il doit y avoir une meilleure façon.
Une solution prometteuse est la ligne de livre de cuisine de OpsCode de la Communauté. Elle vise à résoudre ce problème exact. Malheureusement, la fonctionnalité est incomplète, buggy, et le code est juste un petit hack. Loin d'être une solution solide.
Une autre option, j'ai évalué a été augeas. Semble assez puissant, mais il serait bien de l'ajouter encore une autre couche d'abstraction du système. Overkill, dans mon cas.
Étant donné que c'est l'un des la plupart des tâches évidentes pour tout sysadmin, est-il facile et belle solution avec le Chef que je ne suis pas voyant?
EDIT: voici comment je suis résoudre jusqu'à présent:
cookbook_file "/tmp/parms_to_append.conf" do
source "parms_to_append.conf"
end
bash "append_to_config" do
user "root"
code <<-EOF
cat /tmp/parms_to_append.conf >> /etc/config
rm /tmp/parms_to_append.conf
EOF
not_if "grep -q MY_IDENTIFIER /etc/config"
end
Il fonctionne, mais pas sûr que cela est recommandé Chef de modèle.
source d'informationauteur Gui Ambros | 2013-06-02
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez dit vous-même, le Chef patron est de gérer l'ensemble du dossier.
Si vous utilisez Chef 11 vous pourriez probablement faire usage de partiels pour ce que vous essayez d'atteindre.
Il n'y a plus d'infos ici et sur ce exemple de livre de cuisine.
Aussi longtemps que vous avez accès à la config d'origine du modèle, ajoutez simplement
<%= render "original_config.erb" %>
vers le haut de votreparms_to_append.conf
modèle.Comme l'a dit avant, à l'aide de modèles et les partiels est commune façon de le faire, mais le chef permet d'ajouter des fichiers, et même la modification(édition) lignes du fichier. Appendind est réalisée en utilisant les fonctions suivantes:
Vous pouvez trouver et exemple ici sur stackoverflow, et une documentation complète sur rubydoc.info
Veuillez l'utiliser avec prudence, et seulement quand les partiels et les modèles ne sont pas appropriées.
J'ai fait quelque chose comme ceci:
monit_overwrites/templates/default/monitrc.erb:
Dans ma recette je l'ai fait:
monit_overwrites/recettes/par défaut.rb:
La meilleure façon de lutter contre ce serait de créer une chaîne de caractères et la passer au contenu. Bien sûr bash blocs de travail... mais je pense que le fichier de ressources sont élégantes.