세미콜론으로 구분된 IP 주소 목록을 생성하기 위해 꼭두각시 저장 구성 및 연결을 사용하는 방법은 무엇입니까?

세미콜론으로 구분된 IP 주소 목록을 생성하기 위해 꼭두각시 저장 구성 및 연결을 사용하는 방법은 무엇입니까?

puppet 버전 2.7.18 저장된 구성(puppetdb 아님)

제 경우에는 3개의 Couchbase 노드가 있는데, 이 노드는 다음과 같은 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::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::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

답변1

저는 PuppetDB를 사용하여 노드를 검색하고 사용자 정의 플러그인을 사용하여 노드를 조인하는 Zookeeper를 위해 이를 달성했습니다. 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 수업에는 적합하지 않을 수 있습니다.

관련 정보