2016-10-30 4 views
1

私は本を読んで人形を学ぼうとしています。この本は、eachのラムダブロックを使った反復を示す非常に簡単な例を持っています。しかし、私は私の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 

質問:このサンプルコードで何が問題になっていますか?

答えて

0

書籍に実際にその内容がある場合は、おそらくその本の使用をやめてください。これは、ラムダの正しい構文ではありません。

適切な構文は次のとおりです。

$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があり反復ラムダに関する参考資料

Puppet> = 4またはPuppet> = 3.2 < = 3.8を使用する必要があります。将来のパーサーでコード内でlambdasを使用できるようにする必要があります。

+0

私はあなたの提案を試みましたが、もう一度エラーが発生しました。あなたのコードで質問を更新してください。私は、本を少しデバッグするための例を修正しました。 –

+0

@JayRajput私のコードは有効で、正しく動作します。私はあなたがラムダをサポートしていない人形のバージョンを使用していると仮定する必要があります。将来のパーサを有効にして、Puppet> = 4または3.8を使用していることを確認してください。 –

+0

私はpuppet.confの中で将来のパーサを有効にしました。助けてくれてありがとう –

関連する問題