puppet 3.2.4: スタックレベルが深すぎます

puppet 3.2.4: スタックレベルが深すぎます

私は、カスタム Puppet モジュールの大規模なリポジトリのリファクタリング プロジェクトに取り組んでいます。これには、Puppet 2.x から 3.2.4 へのアップグレードが含まれます。ようやく臨界質量に達し、いくつかの変更をテストし始めたとき、すぐに次のエラーが発生しました。

Info: Retrieving plugin
Info: Loading facts in /etc/puppet/modules/base/lib/facter/elversion.rb
Info: Loading facts in /etc/puppet/modules/base/lib/facter/site.rb
Info: Loading facts in /var/lib/puppet/lib/facter/elversion.rb
Info: Loading facts in /var/lib/puppet/lib/facter/site.rb
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: stack level too deep at /etc/puppet/manifests/nodes.pp:9 on node puppet
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

さまざまな Puppet のバグ レポートを確認した後、問題を単純化してみることにしました。問題を次のように定義した 2 つのクラスに絞り込みました。

class base::includes { }

そして

class prod_secure::base::includes inherits base::includes { }

prod_secure::base::includes のみを含むノードは、上記のエラー出力を生成します。関連する可能性のある唯一の警告は次のとおりpuppet-lintです。

WARNING: class inherits across module namespaces on line 1

...しかし、これは単なる警告であり、エージェントの実行時に Puppet がクラッシュすることはないと思います。何かアイデアはありますか? 設定した名前空間スキームが Puppet でサポートされていない可能性はありますか?

アップデート

私はテストをさらに進めて、継承クラスの名前を変更することにしました。新しい定義は次のとおりです。

class prod_secure::base2::includes2 inherits base::includes { }

結果は同じです...stack level too deepこの問題は名前空間とは関係ないように思えます。

アップデート2

前回のデバッグ中に、私は 1 つの重要な詳細を見逃しました。

Wed Sep 11 11:25:09 -0400 2013 Puppet (info): Caching node for puppet
Wed Sep 11 11:25:09 -0400 2013 Puppet (debug): importing '/etc/puppet/manifests/nodes.pp' in environment production
Wed Sep 11 11:25:09 -0400 2013 Puppet (debug): importing '/etc/puppet/manifests/config_file.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): importing '/etc/puppet/modules/prod_secure/manifests/base2/includes2.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): Automatically imported prod_secure::base2::includes2 from prod_secure/base2/includes2 into production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): importing '/etc/puppet/modules/prod_secure/manifests/base/includes.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): Automatically imported prod_secure::base::includes from prod_secure/base/includes into production
Wed Sep 11 11:25:10 -0400 2013 Puppet (err): stack level too deep at /etc/puppet/manifests/nodes.pp:9 on node puppet
Wrapped exception:
stack level too deep

理由ははっきりとは言えませんが、prod_secure::base::includes をロードしようとしていたため、それが問題のあるエントリでした。そのファイルを完全に削除すると、テストは合格しました。名前空間の理論に戻ります...

答え1

puppet 3.2.3 を試してみるといいかもしれません。

3.2.2は#21376同様の問題ですが、3.2.3で修正されました。回帰の問題かもしれません。

関連情報