Ajouter des lignes à / etc / profile avec une marionnette?

16

J'utilise des marionnettes pour installer un JDK et un tomcat actuels.

package {
    [ "openjdk-6-jdk", "openjdk-6-doc", "openjdk-6-jre",
      "tomcat6", "tomcat6-admin", "tomcat6-common", "tomcat6-docs", 
      "tomcat6-user" ]:
    ensure => present,
}

J'aimerais maintenant ajouter

JAVA_HOME="/usr/lib/java"
export JAVA_HOME

pour /etc/profile, juste pour mettre cela hors du chemin. Je n'ai pas encore trouvé de réponse simple dans les documents. Existe-t-il un moyen recommandé de procéder?

En général, comment dire à la marionnette de placer ce fichier là ou de le modifier? J'utilise marionnette pour un seul nœud (en mode autonome) juste pour l'essayer et pour garder un journal de la configuration du serveur .

miku
la source
1
Si vous entrez dans Puppet, consultez l'Exemple42 pour les modules prédéfinis. Ils ne fonctionnent pas toujours comme vous le souhaitez, mais ils sont cohérents et stables. github.com/example42/puppet-modules
kashani

Réponses:

26

Ajoutez un fichier /etc/profile.d/avec le suffixe .sh. Il sera fourni dans le cadre de / etc / profile dans Red Hat et Debian et ses dérivés, je ne peux pas le dire sur d'autres distributions. De manière générale, si possible, il est préférable d'ajouter des extraits plutôt que de remplacer des fichiers distribués car cela a tendance à être plus sûr à l'avenir.

Donc, en marionnette, ce qui suit ferait:

file { "/etc/profile.d/set_java_home.sh":
    ensure => present,
    source => ...[whatever's appropriate for your setup]...,
    ...
}

C'est ce que vous cherchez ou avez-vous besoin de plus de détails?

marque
la source
1
Cela fonctionne également sur OpenSUSE et Gentoo.
Kamil Kisiel
1
Merci, c'est super. Je l'ai presque travaillé, il suffit de trouver un moyen approprié de référencer un fichier par rapport à la .ppsource.
miku
1
En supposant que Puppet 0.25 ou une source meilleure => marionnette: /// $ nom_module / $ fichier avec le chemin système réel étant $ nom_module / fichiers / $ fichier
kashani
2
IIRC 2.6.5 et versions ultérieures émettent un avertissement de dépréciation si vous utilisez la notation marionnette: /// $ modulename / files / $ filename. il devrait ressembler à une marionnette: /// modules / $ modulename / files / $ filename
ztron
42

La solution de Mark est la meilleure pour ajouter des trucs au profil de tout le monde, mais si jamais vous avez besoin de vous assurer que certaines lignes sont dans un fichier, Puppet Labs a un excellent module appelé stdlib qui inclut file_line qui fera ce dont vous avez besoin. Auparavant, j'ai utilisé echo et grep dans le type exec pour ce faire, mais file_line est tellement plus facile et plus propre.

Voici l'aide pour cela:

Ensures that a given line is contained within a file. The implementation
matches the full line, including whitespace at the beginning and end. If
the line is not contained in the given file, Puppet will add the line to
ensure the desired state. Multiple resources may be declared to manage
multiple lines in the same file.

Example:

file_line { 'sudo_rule':
   path => '/etc/sudoers',
   line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
   path => '/etc/sudoers',
   line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}

In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.
Mark McKinstry
la source
2
Assurez-vous que pluginsync est activé sur le client, sinon cela semble échouer en silence.
gak
1
voici le document avec l'ancre directe forge.puppetlabs.com/puppetlabs/stdlib#resources
Francesco Casula