puppet4 .erb .each 上的 nilClass

puppet4 .erb .each 上的 nilClass

埃布

$names = ['foo','boo','wee','haa']
<% @names.each do |name| %>
Hello <%= name %>
he is here
<% end %>

配置.pp

file {'/tmp/tester':
    ensure=>'present',
    content=>template("test/hello.erb"),
}

运行时出错puppet agent -t

 Filepath:  /etc/puppetlabs/code/environments/development/modules/test/tem plates/hello.erb
 Line: 2
 Detail: undefined method `each' for nil:NilClass

在谷歌中,有人建议我改用 [@name].each。puppet agent -t将运行,但 /tmp/tester 将如下所示:


猫/tmp/测试仪

$names = ['foo','boo','wee','haa']


Hello 
he is here

问题 2) 假设我们有一个包含大量内容的 .conf 文件。我想这样做。

如果匹配“AllowUser*”#matching AllowUser 及其后的所有内容。设置“AllowUser no”否则 add_line“ALlowUser no”

答案1

hello.erb是一个模板文件。
这意味着只有标签标记内的代码才会被解释为 ruby​​ 代码。
您的变量分配不在这些标签内,因此没有声明 $names 变量。
该文件中没有变量声明,它只是一个仅被写出的字符串。

至于您的第二个问题,可能有一些方法可以做到这一点,但我根本不会这么做。Puppet
是一种描述目标系统的方式(“这是一个 Web 服务器,它获取包含内容 X 的配置文件”)。
您通常无法根据这样的客户端文件做出决定,因为服务器对它们一无所知(请记住:目录正在服务器上编译!)。
我宁愿做正确的事情并完全模板化文件(或使用已经这样做的现有模块)。

相关内容