[英]How can you use a Chef recipe to set an environment variable by reading from Shell script?
[英]Excecuting shell script from chef recipe
我必須根據必須從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: ...
正確的寫法:
only_if { Gem::Requirement.create('< 3.9.5').satisfied_by?(Gem::Version.create(shell_out!('dpkg -s cphalo').stdout[/^Version: (.*)$/, 1])) }
或類似的東西。
該腳本檢查cphalo
版本是否小於( -lt
) 3.9.5
。
與cphalo
閱讀Version
:
"dpkg -s cphalo | grep Version"
然后將其通過管道傳輸到awk
並打印第二個字段( $2
)
| awk '{print $2}'"
-lt
將結果與"3.9.5"
進行比較
">result<" -lt "3.9.5"
返回true或false 。
但是,您不能像使用內部雙引號一樣破壞字符串。 請嘗試以下方法:
" $(dpkg -s cphalo | grep Version | awk '{print $2}') -lt 3.9.5 "
或者如果需要方括號:
" [ $(dpkg -s cphalo | grep Version | awk '{print $2}') -lt 3.9.5 ] "
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.