2017-12-06 31 views
0

シェフのレシピでグローバル変数を定義することは可能ですか?&シェフのリソースでvarを変更した後に、この変更された値をレシピコードで使用したいと考えています。シェフのグローバル変数を使用する

version="" 
ruby 'extract_module' do 
    #cwd ::File.dirname(C:\\chef\\cache) 
    code <<-EOH 
     require 'win32/registry' 
     Win32::Registry::HKEY_LOCAL_MACHINE.open(
     'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall') do |reg| 
      reg.each_key do |key| 
       k = reg.open(key) 
       app = k["DisplayName"] rescue nil 

       if app == "Qlik Sense 3.2" 
        version = k["DisplayVersion"] rescue nil 
        puts version 
       end 
      end 
     end 
    EOH 
end 

puts "#{version}" 

この変数は、rubyリソースの外側には表示されません。私たちはPythonのような何かをすることができます、グローバルキーワード&と宣言して値を変更します。ここに似ていますか?

+1

コードのインデントを読み取り可能にしてください。 – coderanger

+2

@coderangerは言った、そしてまたあなたは 'EOH'の前に特別な' end'を持っているようだ。 – engineersmnky

答えて

0

rubyリソースは同じプロセスで実行されず、ruby -Eをサブプロセスとして実行します。あなたが望むのは無関係のruby_blockリソースです。

+0

返事をありがとう。インデントは問題ではありません。私はちょうど私のレシピコードのルビーリソースの外に "バージョン"変数を使用できるいくつかの方法があるかどうかを知りたい。変数をグローバルにするのと同じです。再度、感謝します。 –

+0

私の答えはインデントに関連していません。 – coderanger

+0

こんにちは、すみません、私はそれを逃しました。はい、私は今それを得ました。シェフのリソースは、メインのルビコードと同じプロセスで実行されないため、変数は範囲外です。それは私が宣言する各リソースのための別のサブプロセスを作成しますか?通常、subprocess.popenなどもメインプロセスからサブプロセスを作成しますが、サブプロセスの実行はメインプロセスに戻すことができます。前もって感謝します。 –

関連する問題