Como usar puppets armazenados config & concat para gerar uma lista separada por ponto-e-vírgula de endereços ip?

3

versão de fantoche 2.7.18 configurações armazenadas (não puppetdb)

No meu caso, eu tenho 3 nós couchbase, que devem ser concentrados em uma string de conexão couchbase que se parece com isso:

192.168.19.12;192.168.19.40;192.168.19.66

então em cada servidor couchbase eu faço algo assim:

@@concat::fragment { "foo": target => '/tmp/foo', content => "$ipaddress", order => 1, }

e no servidor de aplicativos, que deve se conectar ao servidor couchbase, eu quero gerar um arquivo de configuração yaml com esta aparência:

  couchbase:
    class:          MyCouchbaseStorage
    param:
      connection:   MyCouchbaseConnection
      connection_param:
        username:     myusername
        password:     mypassword
        bucket:       mybucket
        host:         192.168.19.12;192.168.19.40;192.168.19.66
        persist:      1

todos, exceto as linhas de host, não são problema, mas a entrada do host é realmente complicada

concatino os hosts coletando-os com:

Concat::Fragment <<| tag == 'mycbtag' |>> { target => '/tmp/database.yml' }

agora eu tenho o problema, que eu não tenho ";" chamando concat como este

@@concat::fragment { "foo": target => '/tmp/foo', content => ";$ipaddress", order => 1, }

produzirá:

host:         ;192.168.19.12;192.168.19.40;192.168.19.66

chamando concat assim

@@concat::fragment { "foo": target => '/tmp/foo', content => "$ipaddress;", order => 1, }

produzirá:

host:         192.168.19.12;192.168.19.40;192.168.19.66;

Então, como modificar o conteúdo coletado ou como obtenho o resultado desejado?

host:         192.168.19.12;192.168.19.40;192.168.19.66
    
por c33s 31.08.2013 / 00:25

1 resposta

0

Eu consegui isso para o Zookeeper usando PuppetDB para recuperar os nós e um plugin personalizado para se juntar a eles. Os detalhes do uso do PuppetDB estão na resposta à minha pergunta original e o plug-in personalizado é assim:

require 'puppet/face'
module Puppet::Parser::Functions
    newfunction(:comma_join_nodes, :type => :rvalue) do |args|
        query = args[0]
        fact = args[1]
        q = Puppet::Face[:query, :current].facts(query)
        return q.each_value.collect { |facts| facts[fact] }.sort.join(',')
    end
end

Isso deve permitir que você crie uma string no seu manifesto assim:

$nodes = comma_join_nodes('Class[couchbase]', ipaddress)

O qual usará o PuppetDB para encontrar todos os nós atribuídos à classe couchbase e retornará seus endereços IP.

Observe que isso acontece para consistência eventual - será necessário executar todos os nós para informar ao PuppetDB que eles têm a classe couchbase atribuída e, somente na segunda execução, todos eles conectar. Isso funciona bem para a minha classe Zookeeper, mas eu suponho que pode não ser adequado para a classe Couchbase.

    
por 04.02.2015 / 13:16

Tags