簡體   English   中英

Puppet - 為Hiera轉義YAML變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM