
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 수업에는 적합하지 않을 수 있습니다.