2017-03-21 8 views
0

私はubuntuノードから取得しなければならない結果に基づいてレシピからスクリプトを実行する必要があります。私はエージェントのバージョンを稼働させる必要があり、それに基づいてスクリプトを実行する必要があります。以下は私が走っているレシピの状態です。シェフのレシピからシェルスクリプトを実行する

notifies :run, 'bash[uninstall CloudPassage]', :immediate 
only_if { Mixlib::ShellOut.new("dpkg -s cphalo | grep Version | awk '{print $2}'" -lt "3.9.5").run_command.success? } 

しかし、それは構文を与えています。誰もがubuntuノードからバージョン番号を取得する構文で私を助けることができます。

構文エラー:

FATAL: Cookbook file recipes/default.rb has a ruby syntax error: 
FATAL: /home/ubuntu/chef-repo/cookbooks/cloudPassage/recipes/default.rb:27:syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 
FATAL: ...rsion | awk '{print $2}'" -lt "3.9.5").run_command.success? } 
FATAL: ...        ^
FATAL: /home/ubuntu/chef-repo/cookbooks/cloudPassage/recipes/default.rb:27: syntax error, unexpected ')', expecting '}' 
FATAL: ... awk '{print $2}'" -lt "3.9.5").run_command.success? } 
FATAL: ... 

答えて

0

このスクリプトチェックcphaloバージョンは3.9.5-lt)未満である場合。それはawkにパイプ次いで

"dpkg -s cphalo | grep Version" 
  • 、結果が比較される第2フィールド($2

    | awk '{print $2}'" 
    
  • を印刷:cphaloVersionを読み出す行を取得

    • "3.9.5"ありがとうございましたまたはfalseを返し

      ">result<" -lt "3.9.5" 
      

    しかし、内部二重引用符で囲むように文字列を分割してはいけません。以下試してください:

    " $(dpkg -s cphalo | grep Version | awk '{print $2}') -lt 3.9.5 " 
    

    または角括弧が必要な場合:

    only_if { Gem::Requirement.create('< 3.9.5').satisfied_by?(Gem::Version.create(shell_out!('dpkg -s cphalo').stdout[/^Version: (.*)$/, 1])) } 
    

    またはそのような何か:これを書くために

    " [ $(dpkg -s cphalo | grep Version | awk '{print $2}') -lt 3.9.5 ] " 
    
  • +0

    私はこの状態を書いていますが、この状態はシェフのレシピから構文エラーを出しています。 – Deepak

    +0

    料理本がアップロードされましたが、シェフクライアントがノードで失敗しています。私のonly_ifブロックに間違いがありますか? – Deepak

    +0

    両方のソリューションを試しましたか? '[y.x -lt a.b]'は 'y.x'が' a.b'より小さければ '0'を返します。 –

    関連する問題