То, как использовать марионеток, сохранило конфигурацию, и concat для генерации точки с запятой разделил список IP адресов?

марионеточная версия 2.7.18 сохранила конфигурации (не puppetdb)

Я мой случай, у меня есть 3 couchbase узла, которые должны быть concated к couchbase строке подключения, которая похожа на это:

192.168.19.12;192.168.19.40;192.168.19.66

таким образом на каждом couchbase сервере я делаю что-то вроде этого:

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

и на сервере приложений, который должен соединиться с couchbase сервером, я хочу, генерируют yaml файл конфигурации, бывший похожий на это:

  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

все кроме строк хоста не проблема, но запись хоста действительно хитра

я concat хосты путем сбора их с:

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

таким образом, теперь у меня есть проблема, которую я имею не""; вызов concat как это

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

произведет:

host:         ;192.168.19.12;192.168.19.40;192.168.19.66

вызов concat как этот

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

произведет:

host:         192.168.19.12;192.168.19.40;192.168.19.66;

таким образом, как изменить собранное содержание или как я получаю желаемый результат?

host:         192.168.19.12;192.168.19.40;192.168.19.66
3
задан 31 August 2013 в 01:25
1 ответ

Я добился этого для Zookeeper, используя PuppetDB для извлечения узлов и специальный плагин для их соединения. Подробности использования PuppetDB находятся в ответе на мой исходный вопрос , а настраиваемый плагин выглядит так:

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

Это должно позволить вам создать строку в вашем манифесте следующим образом:

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

Что будет используйте PuppetDB, чтобы найти все узлы, которым назначен класс couchbase , и вернуть их IP-адреса.

Обратите внимание, что это способствует конечной согласованности - все узлы будут запущены для сообщить PuppetDB, что им назначен класс couchbase , и только при втором запуске они все подключатся. Это отлично работает для моего класса Zookeeper, но, полагаю, может не совсем подходить для класса Couchbase.

0
ответ дан 3 December 2019 в 08:16

Теги

Похожие вопросы