次のようなChefコードがあるとします。
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
どこに/bin/somecommand
それがでインストールされているため、まだ存在していませんsomepackage
。これはその理由でレシピのコンパイル時に失敗しますが、パッケージが正常にインストールされれば、収束時に明らかに機能します(それでも失敗しない場合は、レシピが失敗したことは明らかです)。パッケージがインストールされている場合、これらはすべて事前にコンパイルされるため、ランリストの前のレシピとしても失敗します。Chefレシピに、そのレシピまたはランリストがインストールするものを含めるにはどうすればよいですか?
この種のことはCFEngineでは問題ではありません
—
Gaius
myvar
実際の答えはありません。使用に関する洞察がなければ、他のリソースを定義する必要がない限り、通常はコンパイル時に外部コマンドからのコード評価を使用しません。手短に言えば、私は次のことをしますruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
@Tensibai
—
ガイウス
node.run_state
はまさに私が探していたものでした-ありがとう。それを答えてください、私はそれを受け入れます!
それは明日まで待たなければならないだろう:)電話で正しい答えを書くのは難しすぎる
—
Tensibai