2016-07-08 3 views
0

의 모든 배열 요소를 넣어, 속성은 다음과 같습니다방법 따옴표 요리사 내

요리사의 조리법 내
default['cluster']['ipaddress'] = ["10.211.130.108", "10.211.242.203"] 

, 내가 큰 따옴표로 모든 배열 요소를 넣어 가지고, map를 사용하여 :

json_nodes = node['consul']['cluster']['ipaddress'].map { |s| "#{s.to_s}:8300" } 

bash 'configuring file.json' do 
    code <<-EOH 
    echo #{json_nodes} > "/home/user1/file.json" 
    EOH 
end 

[10.211.130.108:8300, 10.211.242.203:8300] 

목 :

나는 파일 /home/user1/file.json 내에서 다음과 같은 출력을 얻을 나는 당신의 데이터가없는

json_nodes = node['cluster']['ipaddress'].map { |s| "#{s.to_s}:8300" } 

하지만 여기 내 콘솔에서 예는 다음과 같습니다 :

["10.211.130.108:8300", "10.211.242.203:8300"] 
+0

출력하면'하지' "10.211.130.108:8300,10.211.242.203:8300"설명 된대로 정말 : – StephenKing

+0

당신은 이것을 셰프에서 어떻게 출력하고 있습니까? – StephenKing

+0

내 질문을 편집했습니다. 제발 도와주세요. thanks @ StephenKing – meallhour

답변

1

방법에 대해 :

[3] pry(main)> arr = [1,2,3,4,5] 
=> [1, 2, 3, 4, 5] 
[4] pry(main)> arr.map { |s| "#{s.to_s}:3000" } 
=> ["1:3000", "2:3000", "3:3000", "4:3000", "5:3000"] 

참고 다음과 같이 전자 출력은 큰 따옴표를해야한다 .join을 끝에 붙이면 모든 문자열이 하나의 문자열로 연결됩니다.

[8] pry(main)> arr.map { |s| "#{s.to_s}:3000" }.join(',') 
=> "1:3000,2:3000,3:3000,4:3000,5:3000" 
+0

큰 따옴표가 표시되지 않습니다. 출력은 여전히'[10.211.130.108:8300,10.211.242.203:8300]' – meallhour

+0

입니다. 아직도 .join (',')을하고 있습니까? 그렇다면 모든 요소를 ​​쉼표로 구분 된 문자열로 연결합니다. 배열 요소를 큰 따옴표로 묶으려면 내 대답이 효과적입니다. – andrunix

+0

작동하지 않습니다. – meallhour

0

이 코드는 당신이 당신의 대답으로 지정한 것을 할 것입니다. 조금 이상하지만, 여러분이 목표로하는 문자열은 배열 선언처럼 보입니다.

a = ['10.211.130.108','10.211.242.203'] 
a.map! { |s| "\"#{s}:8300\"" } 
result = "[#{a.join(',')}]" 
puts result 
# Output: ["10.211.130.108:8300","10.211.242.203:8300"] 
+0

큰 따옴표가 표시되지 않습니다. 출력은 여전히'[10.211.130.108:8300,10.211.242.203:8300]' – meallhour

+0

입니다. 내 대답을 편집했습니다. 다시 시도하십시오. – BrunoFacca

+0

'map'을'each'로 바꾸면 여전히 큰 따옴표를 얻지 못하고 있습니다. 마지막에 확인하십시오. – meallhour

1

요리사를 사용할 때 (그리고 bash ..를 호출하지 마세요) 요리사를 사용하면 상황이 훨씬 쉬워집니다. 요리사에서 그것을 해결에 번역 문제는 다음과 같습니다

file "/home/user1/file.json" do 
    content node['consul']['cluster']['ipaddress'].map { |s| "#{s}:8300" }.to_s 
end 

루트가 아닌 소유권을 필요로하고 권한을 읽으면에서, owner and mode options of the file resource를 보라.

json_nodes = node['cluster']['ipaddress'].map { |s| "\"#{s.to_s}:8300\"" } 
-1

나는 다음과 같은 사용하여 따옴표를 얻을 수 있었다?
+0

물론,하지만 여전히 'bash' 리소스를 사용한다면 완전히 잘못된 방식으로 Chef를 사용하는 것입니다. 이런 식으로해서는 안된다. 그러면 bash 명령을 벗어날 필요가 없으므로 따옴표 문제에 빠지지 않는다. – StephenKing