puppet lambda块未能通过语法分析器验证

puppet lambda块未能通过语法分析器验证,puppet,Puppet,我想通过读书来学习木偶。这本书有一个非常简单的例子,展示了使用lambda块进行迭代,每个块都有。然而,我无法在我的Ubuntu盒上执行它 /vagrant/manifests/mountpoints.pp $data = ['routers'] $data.each |String $item| { notify {$item: message => $item } } 使用puppet parser validate验证代码失败,我无法确定原因 [t

我想通过读书来学习木偶。这本书有一个非常简单的例子,展示了使用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

我的问题是:这个示例代码有什么问题?

如果你的书中确实有,那么你可能应该停止使用那本书。对于lambda来说,这从来都不是正确的语法,甚至在3.8和未来的解析器中也是如此

正确的语法是:

$data = ['routers']
$data.each |$item| {
  notify {$item:
    message => $item
  }
}
或者使用更干净/整洁的样式(仅给定一个元素、资源和一个与标题重复的参数):

有一些关于迭代lambdas的有用文档


同样值得注意的是,你必须使用Puppet>=4或Puppet>=3.2,如果你的书确实有,那么你可能应该停止使用那本书。对于lambda来说,这从来都不是正确的语法,甚至在3.8和未来的解析器中也是如此

正确的语法是:

$data = ['routers']
$data.each |$item| {
  notify {$item:
    message => $item
  }
}
或者使用更干净/整洁的样式(仅给定一个元素、资源和一个与标题重复的参数):

有一些关于迭代lambdas的有用文档


另外值得注意的是,您必须使用Puppet>=4或Puppet>=3.2。我尝试了您的建议,但再次出现错误。让我用您的代码更新问题。。我确实对书中给出的示例做了一些修改,以便进行更多的调试。@JayRajput我的代码是有效的,并且工作正常。我必须假设您使用的是不支持lambdas的puppet版本。确保在启用未来解析器的情况下使用Puppet>=4或3.8。我在Puppet.conf中启用了未来解析器,它正常工作。谢谢你的邀请help@JayRajput当然,让我也更新答案。我尝试了你的建议,但又出现了一个错误。让我用你的代码更新问题。。我确实对书中给出的示例做了一些修改,以便进行更多的调试。@JayRajput我的代码是有效的,并且工作正常。我必须假设您使用的是不支持lambdas的puppet版本。确保在启用未来解析器的情况下使用Puppet>=4或3.8。我在Puppet.conf中启用了未来解析器,它正常工作。谢谢你的邀请help@JayRajput当然,让我也更新一下答案。