[英]Puppet - Escaping YAML variables for Hiera
我有一個非常簡單的要求,但我已經嘗試了我能想到的每個轉義序列,但無法獲得所需的輸出。
我需要將文件輸出到文件中:
%{VAR}
這是我的YAML文件:
myclass::outputstuff:
- Heres a litteral var %{VAR}
- Heres something else %{SOMETHING}
還有我的template.erb:
<%= @outputstuff.each do | ostuff | -%>
<%= ostuff -%>
<% end -%>
但就像這樣,它輸出:
Heres a litteral var
Heres something else
如果按照其他帖子的建議添加%%{VAR}
類的百分號,則會輸出:
Heres a litteral var %
Heres something else %
如果我添加像%\\{VAR}
這樣的反斜杠,它會輸出:
Heres a litteral var %\{VAR}
Heres something else %\{SOMETHING}
我需要這個哈哈:
Heres a litteral var %{VAR}
Heres something else %{SOMETHING}
使用Hiera 3.3.1,您可以在YAML中使用它:
%%{}{EXAMPLE}
這將輸出這個文字:
%{EXAMPLE}
從v2.0.0開始,有literal
函數,這是更“正確”的方法:
%{literal('%')}{VAR}
我設法讓這個工作的唯一方法是這種hacky方式,在這里找到
基本上我將template.erb更改為:
<%- @oupputstuff.each do | ostuff | -%>
<%- if ostuff -%>
<%= ostuff.gsub(/___/, '%') %>
<%- end -%>
<%- end -%>
然后在YAML文件中:
myclass::outputstuff:
- Heres a litteral var ___{VAR}
- Heres something else ___{SOMETHING}
非常令人驚訝的是,正常的逃脫序列都沒有工作
我需要一種方法來表示在Hiera 1.x和2.x上都有效的文字%{VAR}
字符串,這樣我升級時就不會出現任何問題。
這是我提出的愚蠢技巧,在1.3.4和2.0.0中對我有用:
---
"%": "%"
myclass::outputstuff:
- "Heres a literal var %{hiera('%')}{VAR}"
插值后 - 在Hiera版本中 - 評估為:
{"%":"%","myclass::outputstuff":["Heres a literal var %{VAR}"]}
當然,這會導致額外的%
鍵浮動,但這不會造成任何傷害。 然后,升級后我可以切換到%{literal('%')}
,並刪除額外的YAML條目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.