2016-11-01 7 views
0

Puppet으로 구성된 Ruby 템플릿 erb 파일에서 Facter 사실을 사용하는 방법을 파악하려고합니다.Puppy를 사용하여 Ruby 템플릿에서 Facter 값을 사용하는 방법

인형에서

샘플 루비 템플릿 변수

zk.l.conn= 

예상 config 파일 출력

zk.l.conn=ip-xx-31-xx-xxx.ec2.internal:2181,ip-xxx-31-xx- xxx.ec2.internal:2181,ip-172-xxx-xxx-xx.ec2.internal:2181 

Facter 사실 데이터 : 한마디로

"zk-internal": [ 
    { 
    "host": "ip-xx-31-xx-xxx.ec2.internal", 
    "port": 2181, 
    "priority": 2, 
    "weight": 10 
    }, 
    { 
    "host": "ip-xxx-31-xx-xxx.ec2.internal", 
    "port": 2181, 
    "priority": 3, 
    "weight": 10 
    }, 
    { 
    "host": "ip-172-xxx-xxx-xx.ec2.internal", 
    "port": 2181, 
    "priority": 1, 
    "weight": 10 
    } 
], 

답변

2

:

zk.1.conn=<%= @facts['zk-internal'].map { |h| "#{h['host']}:#{h['port']}" }.join(',') %> 

@facts['zk-internal']@zk-internal이 하이픈으로 인해 유효한 변수 이름이 아니기 때문에 사용 된 구조화 된 사실 값에 액세스하게합니다.

.map { |h| "#{h['host']}:#{h['port']}" }은 모든 요소를 ​​반복하고 각 요소에서 "host : port"가 포함 된 새로운 문자열을 반환하므로 호스트/포트 배열이 반환됩니다.

.join(',')은 각 요소를 쉼표로 구분하여 배열에서 문자열을 반환합니다.

이 출력 : 당신이 쉼표를위한`.join`을 사용할 수 있도록

zk.1.conn=ip-xx-31-xx-xxx.ec2.internal:2181,ip-xxx-31-xx-xxx.ec2.internal:2181,ip-172-xxx-xxx-xx.ec2.internal:2181 

은 (꼭두각시 4.7에서 테스트)

+0

영리한 반복하는 동안 배열로 유지하기 위해'.map'를 사용합니다. –

+0

우수! 하지만 내가 예제 ip-xx-31-xx-xxx.ec2.internal : 2181 같은 각 ip에 포트를 추가해야하는 경우? – rocky

+0

두 번째 부분에서이를 바꿀 것입니다 -'.map {| h | "# {h [ 'host']} : # {h [ 'port']}"}'는 host : port 문자열 배열을 반환합니다. –