usa arquivo local como modelo de boneco

2

Sou desenvolvedor de um software Java e tento encontrar uma maneira inteligente de distribuir e configurar meu aplicativo em nosso datacenter. Para isso, eu construo um pacote rpm e criamos um satélite. O SO de destino é o Red Hat Enterprise. Para o gerenciamento de configurações, usamos o fantoche.

Até agora, tudo está correndo bem. Estamos definindo cadeias de caracteres e nomes de host de conexão de banco de dados com base nas configurações de nó no fantoche. Eles entram em arquivos de modelo ERB que também temos no mestre de marionetes.

Mas agora, preciso corrigir um único arquivo que faz parte do RPM. Este é um arquivo que é gerado na compilação e muda com cada compilação, portanto, não gostamos de colocá-lo no fantoche. Existe um identificador em (livremente escolhido, como <% baseURL% >). Infelizmente, precisamos definir um URL base nesse arquivo, que depende do nó para onde ele vai. Pensei em colocar nosso arquivo no RPM como .erb, mas parece que o fantoche não pode usar arquivos locais do sistema de destino como modelos, em todos os exemplos que vi os modelos estão localizados no mestre de marionetes.

O outro problema é que a transformação do modelo no arquivo de configuração real deve acontecer se o pacote for atualizado ou a configuração baseUrl for alterada.

Eu gostaria de utilizar o modelo de fantoche para isso, mas não tenho certeza se isso funciona.

Minha solução atual é: Eu uso o fantoche para criar um arquivo dependente do nó em cada máquina em / etc / myapp / webstart_baseurl. Parece:

MYAPP_WEBSTART_BASEURL=http\:\/\/10.12.1.42\/myapp_ws\/
export MYAPP_WEBSTART_BASEURL

Então eu escrevi um script de shell, que incluí no meu RPM. Isso é colocado em /usr/bin/patchHostnameForWebstart.sh

#!/bin/sh

#the file where to load the baseUrl from (in property $MYAPP_WEBSTART_BASEURL)
MYAPP_WEBSTART_SERVERCONFIG=/etc/myapp/webstart_baseurl

MYAPP_JNLP_TOKEN=@@myapp.webstart.baseurl@@

if [ -f $MYAPP_WEBSTART_SERVERCONFIG ]
then
    source $MYAPP_WEBSTART_SERVERCONFIG
    echo "found config for webstart server, baseUrl is $MYAPP_WEBSTART_BASEURL"
    echo "replacing tokens MYAPP_JNLP_TOKEN .."

    find /var/www/html/myapp_ws -name *.jnlp -print -exec sed -i  "s/${MYAPP_JNLP_TOKEN}/${MYAPP_WEBSTART_BASEURL}/g" {} \;
    echo "url tokens of all .jnlp files in /var/www/html/myapp_ws have been processed"

else
    echo "WARNING! no config for webstart server found, baseUrl of .jnlp files might not be set"
    exit 1

fi

Separar o script do fantoche tem a vantagem de poder ser executado diretamente na instalação do rpm, bem como no fantoche, caso a configuração baseUrl seja alterada.

No entanto, as desvantagens desta solução são que eu tive que implementar a substituição no meu onw e que eu preciso escrever a configuração baseUrl desta maneira muito feia, com várias barras invertidas. Eu acho que isso é bastante propenso a erros se alguém mais mudar isso.

Qualquer sugestão de melhoria seria ótima. Agradecemos antecipadamente

Michel

    
por mkraemerx 19.09.2011 / 13:56

2 respostas

3

os fantoches podem usar informações locais. Se você escrever um script facter que defina um fato, você pode fazer referência a esse valor de dentro do fantoche.

Exemplo

$ facter puppetversion
2.6.4

Eu posso usar $ puppetversion no meu modelo ou arquivo pp para obter o 2.6.4. Escrever um roteiro é fácil e você pode usar o boneco para distribuir o roteiro para colocá-lo no local correto, assim, quando você executar o facter, ele será adicionado à lista.

link

    
por 19.09.2011 / 14:29
0

Por que não executar um script perl para corrigir isso?

$baseURL = "/path/with/$fact/inside"
exec { "perl -p -i.bak -e 's^\Q<% baseURL %>\E^$baseURL^' /path/to/file/":
    onlyif  => "grep -q '<% baseURL %>' /path/to/file",
    require => Package['yourrpm'],
}
    
por 19.09.2011 / 16:06