문자열을 구성하려고 합니다.
내가 할 수있는:
"Blah blah ${::osfamily} blah blah"
"Blah blah ${$::osfamily} blah blah"
그런데 변수를 매개변수로 사용하여 함수를 호출하고 문자열 보간 작업을 수행하는 구문은 무엇입니까?
다음 중 어느 것도 작동하지 않았습니다.
"Blah blah ${downcase($::osfamily)} blah blah"
"Blah blah ${downcase($osfamily)} blah blah"
"Blah blah ${downcase(::osfamily)} blah blah"
"Blah blah ${$downcase(osfamily)} blah blah"
"Blah blah ${$downcase($osfamily)} blah blah"
등등.
내가 얻는 것은 다음과 같습니다.
Error 400 on SERVER: Syntax error at '('; expected ')'
Puppet 언어에서도 가능합니까?
답변1
그것은 불가능합니다. Puppet의 언어는 약간 이념적입니다. 많은 것들이 효과가 있을 것이라고 생각하지만... 하지 마세요. 다음과 같이 함수의 반환 값을 변수에 할당한 다음 해당 변수를 문자열에 삽입해야 합니다.
$downcased_osfamily = downcase($::osfamily)
"Blah blah ${downcased_osfamily} blah blah"
물론 문자열 자체는 아무 소용이 없으므로 아마도 해당 문자열을 자체 변수에 할당하거나 자원 속성의 값으로 사용하고 있을 것입니다.
답변2
그것아니었다가능하지만 지금은 그렇습니다. 다음은 귀하의 예를 사용하여 작동합니다.
notice("Blah blah ${downcase($::osfamily)} blah blah")
이것은 Puppet 4.10.x에서 테스트되었으며 4.6까지 문서화되었습니다.https://puppet.com/docs/puppet/4.6/lang_data_string.html#보간법
답변3
bogit의 답변에 더 나아가 다음 구문을 사용할 수도 있습니다.
puppet apply -e 'notice("Blah blah ${::osfamily.downcase} blah blah")'
최신 사실 해시를 사용하고 싶을 수도 있습니다.
puppet apply -e 'notice("Blah blah ${facts['os']['family'].downcase} blah blah")'