Adicionando linhas ao / etc / profile com fantoche?

16

Eu uso o fantoche para instalar um JDK e um tomcat atuais.

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

Agora eu gostaria de adicionar

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

para /etc/profile, só para tirar isso do caminho. Ainda não encontrei uma resposta direta nos documentos. Existe uma maneira recomendada de fazer isso?

Em geral, como digo ao fantoche para colocar esse arquivo lá ou modificá-lo? Estou usando o fantoche para um único nó (no modo autônomo) apenas para testá-lo e manter um log da configuração do servidor .

miku
fonte
11
Se você está entrando no Puppet, consulte o Exemplo42 para obter os módulos pré-criados. Eles nem sempre funcionam como você deseja, mas são coerentes e estáveis. github.com/example42/puppet-modules
Kashani

Respostas:

26

Adicione um arquivo ao /etc/profile.d/com o sufixo .sh. Ele será fornecido como parte do / etc / profile no Red Hat e Debian e derivados, não posso dizer em outras distros. De um modo geral, se possível, é melhor adicionar trechos em vez de substituir arquivos distribuídos, pois eles tendem a ser mais seguros para o futuro.

Assim, no fantoche, o seguinte faria:

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

É isso que você procura ou precisa de mais detalhes?

marca
fonte
11
Isso também funciona no OpenSUSE e Gentoo.
Kamil Kisiel
11
Obrigado, isso é ótimo. Já está quase funcionando, basta encontrar uma maneira apropriada de fazer referência a um arquivo em relação à .pporigem.
Miku
11
Assumindo Puppet 0,25 ou melhor fonte => fantoche: /// $ modulename / $ file com o caminho sistema real sendo US $ ModuleName / arquivos / $ file
Kashani
2
O IIRC 2.6.5 e posterior emitem um aviso de descontinuação se você usar a notação fantoche: /// $ modulename / files / $ filename. ele deve ser parecido fantoche: /// módulos / $ ModuleName / files / $ filename
ztron
42

A solução da mark é a melhor para adicionar itens ao perfil de todos, mas se você precisar garantir que algumas linhas estejam em um arquivo, o Puppet Labs possui um ótimo módulo chamado stdlib, que inclui file_line, que fará o que você precisa. Anteriormente, usei echo e grep no tipo exec para fazer isso, mas o file_line é muito mais fácil e limpo.

Aqui está a ajuda para isso:

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
fonte
2
Verifique se o pluginsync está ativado no cliente, caso contrário, isso parece falhar silenciosamente.
gak
11
aqui está o doc com âncora diretos forge.puppetlabs.com/puppetlabs/stdlib#resources
Francesco Casula