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}
从v2.0.0开始,有literal
功能,更'proper'的做法是:
%{literal('%')}{VAR}
我设法让这个工作的唯一方法是这种 hacky 方法,发现 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}
非常令人惊讶 none 的正常转义序列工作 Lol
我需要一种方法来表示在 Hiera 1.x 和 2.x 上工作的文字 %{VAR}
字符串,这样当我 mid-upgrade 时就不会出现任何问题。
这是我想出的愚蠢技巧,它在 1.3.4 和 2.0.0 中对我都有效:
---
"%": "%"
myclass::outputstuff:
- "Heres a literal var %{hiera('%')}{VAR}"
插值后——在任一 Hiera 版本中——计算结果为:
{"%":"%","myclass::outputstuff":["Heres a literal var %{VAR}"]}
当然,这会导致额外的 %
键四处浮动,但这不会造成任何伤害。然后,post-upgrade 我可以切换到 %{literal('%')}
,并删除多余的 YAML 条目。
对于 Hiera 3.3.1,您可以在 YAML 中使用它:
%%{}{EXAMPLE}
这将输出这个文字:
%{EXAMPLE}
我有一个很简单的要求,但是我已经尝试了所有我能想到的转义序列,但无法获得所需的输出。
我需要随意输出到一个文件中:
%{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}
从v2.0.0开始,有literal
功能,更'proper'的做法是:
%{literal('%')}{VAR}
我设法让这个工作的唯一方法是这种 hacky 方法,发现 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}
非常令人惊讶 none 的正常转义序列工作 Lol
我需要一种方法来表示在 Hiera 1.x 和 2.x 上工作的文字 %{VAR}
字符串,这样当我 mid-upgrade 时就不会出现任何问题。
这是我想出的愚蠢技巧,它在 1.3.4 和 2.0.0 中对我都有效:
---
"%": "%"
myclass::outputstuff:
- "Heres a literal var %{hiera('%')}{VAR}"
插值后——在任一 Hiera 版本中——计算结果为:
{"%":"%","myclass::outputstuff":["Heres a literal var %{VAR}"]}
当然,这会导致额外的 %
键四处浮动,但这不会造成任何伤害。然后,post-upgrade 我可以切换到 %{literal('%')}
,并删除多余的 YAML 条目。
对于 Hiera 3.3.1,您可以在 YAML 中使用它:
%%{}{EXAMPLE}
这将输出这个文字:
%{EXAMPLE}