問題タブ [lwrp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - LWRP のコンパイルおよび収束フェーズ
LWRP アクション (特にライブラリ) 内の ruby コードは、常に収束フェーズで実行されることがわかりました (これも ruby_block リソースなしで!)。これは予想される動作ですか?それに関する特定のドキュメントは見つかりませんでした。Ruby コードは通常、コンパイル段階で実行されることを知っていると、少し混乱します。Chef 12.0.3 を使用しています。
ここに小さな例があります:
レシピ/default.rb:
providers/my_resource.rb:
キッチンの出力は次のとおりです。
したがって、タイムスタンプの最初の出力はコンパイル段階であることがわかりますが、タイムスタンプの次の出力は収束段階にあります。
前もって感謝します!
ruby - LWRP のアクション内で Chef DSL を使用する方法
アクションcookbook_file
内に作成する必要があるLWRPがありますcreate
そしてテストレシピ
chef-client
実行はエラーで失敗しますNoMethodError: undefined method 'vu_name' for nil:NilClass
cookbook_file
メソッドから削除するcreate
と、ログが正しく表示されます:INFO: vu:@new_resource.vu_name-text.txt
次のステップでは、置き換えました
テストレシピで指定された値と同じ
ファイルが取得されました。私には、cookbook_file
内側のルビブロックがコピーされていないように見えnew_resource
、 になりnil
ます。
アクション内で宣言されたリソースの引数として LWRP のプロパティを使用する方法は?
apache - Chef、Apache2 クックブック リソースがカスタム リソースから呼び出されたときにサービス [apache2] を見つけられない
私のカスタム シェフ クックブック ( https://github.com/sanguis/chef-omeka/tree/lwrpにあります)。
カスタム Solo.rb レシピから呼び出されているカスタム リソース (LWRP) 内から Apache2 リソース web_app を呼び出しています。
これはエラーを返します:
[#] [2016-02-23T23:02:31+00:00] 致命的: バグ レポートを提出する場合は、stacktrace.out ファイルの内容を提供してください
[#] [2016-02-23T23:02:31+00:00] エラー: instanceomeka.dev にエラーがありました: Chef::Exceptions::ResourceNotFound: resource execute[a2enmod headers] is configured to notify resource service[apache2]アクション reload を使用しますが、リソース コレクションに service[apache2] が見つかりません。execute[a2enmod headers] は /tmp/kitchen/cache/cookbooks/apache2/definitions/apache_module.rb:35:in `block in from_file' で定義されています
ただし、ここでカスタム レシピの内部から直接同じリソースを呼び出すと(126 行目)、機能します。
私の実行リストは次のとおりです
これは、ubuntu 14.04 と centos7 の両方で失敗します。
ruby - Chef - LWRP の他のアクションからアクションを呼び出す
以下のようにプロバイダーを定義しています。
stop
とstart
inの実装を書き直す代わりに、次のようにandをrestart
呼び出したいと思います。action :stop
action :start
action :restart
これを達成する方法はありますか?
編集- Coderangerの回答で述べたように、解決策は次のとおりです。
chef-infra - Chef レシピの変数にリソースを割り当てるとどうなりますか?
githubでjohnbellone/consul-cookbookを見ていると、次のように表示されます。
リソースをインストール変数に割り当てると、リソース/プロバイダーが実行されますか? 多分それはすぐにそれを実行しますか?コンパイルとコンバージの 2 フェーズ プロセスを別々のフェーズとして実行する代わりに?
ruby - レシピで registry_key を使用してライブラリ モジュール メソッドを使用すると Chef NoMethodError が発生する
エラーが表示される
Chefクックブックを収束するとき。
これはlibraries/hash_operations.rbの短いバージョンのコードです:
そして、ここにレシピ/default.rbがあります:
主な問題は、レシピから呼び出されるモジュール内のメソッド内でChef リソースのregistry_keyを使用しようとすることにあると思います。
moduleを使用していない場合は動作するバージョンがありますが、いくつかの記事が指摘しているように、ChefSpecでコードをテストする場合はモジュールが必要です(このような: ChefSpec のライブラリ クラス メソッドのスタブ)
上記のリンクは、モジュール内で定義されていない限り end?(HashOperations)を使用する理由です。
インクルード ステートメントを使用してみましたが、いくつかの StackOverflow の投稿で示唆されているように、コメントまたはレシピの最初の行で確認できますが、うまくいきません。1 つの投稿で LWRP の使用法について議論していましたが、コードはこのレシピに厳密に関連しており、他のクックブックでは使用されないため、ここではそうではないと思います。
注:私はselfを使用しています。defが互いに見えるようにするためです。そうしないと、 generate_reg_keys_for_item_keyが利用できないというエラーが表示されます。
だから、StackOverflowによって提案されたものを含め、これに関する解決策を探すのにかなりの時間を費やしたという事実を考慮して、質問:このエラーを解決し、ChefSpecでテストできる簡単な解決策を持つための最良の方法は何ですか(ただし、LWRP を完全に除外しているわけではありません)、converge 操作でregistry_keyを表示するには、何をどのように含める必要がありますか?