2015-11-15 58 views
2

我有一個非常簡單的要求,但我試過了我能想到的所有轉義序列,但無法獲得所需的輸出。傀儡 - 爲Hiera轉義的YAML變量

我需要輸出litterally到一個文件:

%{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} 
+0

哪個Hiera的版本您使用的? –

+0

hiera版本1.3 –

+0

我在PuppetLabs門票系統中找到這個小寶石相當無趣:https://tickets.puppetlabs.com/browse/HI-127 – Magellan

回答

1

我設法得到這個工作的唯一辦法,就是這個哈克的方式,發現here

基本上我改變了template.erb到:

<%- @oupputstuff.each do | ostuff | -%> 
    <%- if ostuff -%> 
    <%= ostuff.gsub(/___/, '%') %> 
    <%- end -%> 
    <%- end -%> 

然後在YAML文件:

myclass::outputstuff: 
    - Heres a litteral var ___{VAR} 
    - Heres something else ___{SOMETHING} 

非常令人驚訝的沒有規範al轉義序列工作大聲笑

1

從v2.0.0開始,有literal函數,它是更「正確」的方式做到這一點:

%{literal('%')}{VAR} 
+0

這些方法都行不通......我已經升級到hiera版本3,但仍然沒有。 '%{literal('%')} {VAR}'outputs'{VAR}'...'%% {} {VAR}'和'%% {FOO} {VAR}'什麼都不輸出。 –

+0

我不得不去木偶3.5.1。 Hiera升級本身是不夠的。 – Magellan

0

我需要一種方法來表示文字%{VAR}字符串跨Hiera 1.x和2.x工作,以便沒有任何破壞,而我是中等升級。

這裏是愚蠢的把戲我想出了,這兩個1.3.4和2.0.0爲我工作:

--- 
"%": "%" 

myclass::outputstuff: 
    - "Heres a literal var %{hiera('%')}{VAR}" 

插之後 - 在任何Hiera版本 - 這個計算結果爲:

{"%":"%","myclass::outputstuff":["Heres a literal var %{VAR}"]} 

當然這會導致額外的%鍵漂移,但這沒有任何傷害。然後,升級後我可以切換到%{literal('%')},並刪除額外的YAML條目。

2

隨着Hiera 3.3。1,你可以在你的YAML使用:

%%{}{EXAMPLE} 

將輸出這個文字:

%{EXAMPLE}