Aggiunta di linee a / etc / profile con burattino?


16

Uso Puppet per installare un JDK e un Tomcat attuali.

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

Ora vorrei aggiungere

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

a /etc/profile, solo per toglierlo di mezzo. Non ho ancora trovato una risposta semplice nei documenti. C'è un modo consigliato per farlo?

In generale, come posso dire a Puppet di posizionare questo file lì o modificarlo? Sto usando il pupazzo per un singolo nodo (in modalità autonoma) solo per provarlo e tenere un registro delle impostazioni del server .


1
Se stai entrando in Puppet, controlla Esempio42 per i moduli predefiniti. Non funzionano sempre come vorresti, ma sono coerenti e stabili. github.com/example42/puppet-modules
kashani il

Risposte:


26

Aggiungi un file a /etc/profile.d/con il suffisso .sh. Verrà fornito come parte di / etc / profile in Red Hat, Debian e derivati, non posso dirlo in altre distro. In generale, se possibile, è meglio aggiungere frammenti piuttosto che sostituire i file distribuiti in quanto tende ad essere più sicuro per il futuro.

Quindi nelle marionette, farebbe quanto segue:

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

Questo è quello che stai cercando o hai bisogno di maggiori dettagli?


1
Questo funziona anche su OpenSUSE e Gentoo.
Kamil Kisiel,

1
Grazie, fantastico. Ha funzionato quasi, ho solo bisogno di trovare un modo appropriato per fare riferimento a un file relativo a .ppcome sorgente.
Miku,

1
Supponendo Puppet 0.25 o migliore source => puppet: /// $ modulename / $ file con il percorso di sistema reale che è $ modulename / files / $ file
kashani

2
IIRC 2.6.5 e versioni successive emettono un avviso di deprecazione se si utilizza la notazione puppet: /// $ modulename / files / $ filename. dovrebbe apparire come un pupazzo: /// modules / $ nome modul / file / $ nomefile
ztron

42

La soluzione di Mark è la migliore per aggiungere elementi al profilo di tutti, ma se hai mai bisogno di assicurarti che alcune linee siano in un file, Puppet Labs ha un ottimo modulo chiamato stdlib che include file_line che farà ciò di cui hai bisogno. In precedenza ho usato echo e grep nel tipo exec per farlo, ma file_line è molto più semplice e pulito.

Ecco l'aiuto per questo:

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.

2
Assicurati di avere pluginsync abilitato sul client, altrimenti questo sembra fallire silenziosamente.
Gak

1
ecco il documento con l'ancora diretta forge.puppetlabs.com/puppetlabs/stdlib#resources
Francesco Casula
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.