puppet lambda块失败的解析器验证

时间:2016-10-30 00:19:40

标签: puppet

我正在尝试通过阅读一本书来学习木偶。这本书有一个非常简单的例子,展示了使用each的lambda块进行迭代。但是,我无法在我的Ubuntu盒子上执行它。

/vagrant/manifests/mountpoints.pp

$data = ['routers']
$data.each |String $item| {
    notify {$item:
        message => $item
    }
}

代码无法使用puppet parser validate验证,我无法确定原因。

[tmp]$puppet parser validate /vagrant/manifests/mountpoints.pp
Error: Could not parse for environment production: Syntax error at '.' at /vagrant/manifests/mountpoints.pp:2

我的问题是:此示例代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

如果你的书实际上有,那么你应该停止使用那本书。对于lambda来说,这从来就不是正确的语法,甚至回到3.8和未来的解析器。

正确的语法是:

$data = ['routers']
$data.each |$item| {
  notify {$item:
    message => $item
  }
}

或者使用更干净/更整洁的样式(只给出一个元素,资源和一个与标题重复的参数):

['routers'].each |String $item| { notify { $item: } }

https://docs.puppet.com/puppet/latest/reference/lang_iteration.html有一些关于迭代lambda的有用文档。

值得注意的是,您必须使用Puppet> = 4或Puppet> = 3.2< = 3.8并启用未来的解析器以在代码中使用lambdas。