我将erb与Puppet,Hiera和模板结合使用时出现以下问题:
通过Hiera我得到以下字符串作为变量:
首先是数组中的变量example
(data [example])
something with _VARIABLE_ in it
和变量example_information
with
some kind of \1 and maybe also a \2
现在我想用Puppet模板中的_VARIABLE_
替换第二个包含合法反斜杠()的字符串。所以我这样做了:
result=data['example'].gsub('_VARIABLE_', @example_information)
所以我从数组中取出了example
并用@example_information
填充了占位符。
结果如下:
something with some kind of and maybe also a in it
没有反斜杠,因为gsub
将它们解释为反向引用。那么如何解决我的问题以保留我的反斜杠而不必在Hiera文件中双重转义它们?我需要在代码中进一步使用Hiera变量,而不需要双重转义反斜杠。
答案 0 :(得分:0)
我现在这样解决了这个具体问题如下:
再次变量example
something with _VARIABLE_ in it
和变量example_information
with
some kind of \1 and maybe also a \2
模板中的代码部分:
# we need to parse out any backslashes
info_temp=example_information.gsub('\\', '__BACKSLASH__')
# now we substitute the variables with real data (but w/o backslashes)
result_temp=data['example'].gsub(/__ITEM_NAME__/, info_temp)
# now we put together the real string with backslashes again as before
result=result_temp.gsub('__BACKSLASH__', '\\')
现在结果如下:
something with some kind of \1 and maybe also a \2 in it
也许有更好的方法可以做到,但在我的研究中,我没有偶然发现更好的解决方案,所以如果你知道更好的方法,请添加评论。