2014-12-03 59 views
0

需要在centos上安裝6 logrotate 3.8.7通過廚師進行源代碼。 使用簡單的執行。但也需要檢查現有的安裝。如果我不能解析logrotate --version輸出,我該怎麼做那件事。通過紅寶石進行字符串解析(廚師)

logrotate --version | tr -cd [:digit:] 

&

logrotate --version | tr -d "logrotate" 

和awk - 沒有用..

即使我不解析輸出,廚師不能將其與我的變量比較..

我的食譜是:

ver = `logrotate --version` 

if ver.eql? "logrotate 3.8.7" 
    puts "nothing to do" 
else 

bash "logrotate-source-install" do 
    user "root" 
    group "root" 
    cwd "/tmp" 
    code <<-EOH 
     cd /tmp 
     yum -y install gettext popt-devel 
     wget https://fedorahosted.org/releases/l/o/logrotate/logrotate-3.8.7.tar.gz 
     tar xf logrotate-3.8.7.tar.gz 
     cd logrotate-3.8.7 
     gmake 
    gmake install 
    EOH 
end 

end 

Thx提前。

Upd。

actual_ver = `logrotate --version 2>&1 | awk '{print $2}'` 
ver = "3.8.7" 

if actual_ver == ver 
    puts "nothing to do" 
else 

bash "logrotate-source-install" do ... 

解析完成,但廚師無法識別輸出..

回答

1

更好的版本的這個:

bash "logrotate-source-install" do 
    user "root" 
    group "root" 
    cwd "/tmp" 
    code <<-EOH 
     cd /tmp 
     yum -y install gettext popt-devel 
     wget https://fedorahosted.org/releases/l/o/logrotate/logrotate-3.8.7.tar.gz 
     tar xf logrotate-3.8.7.tar.gz 
     cd logrotate-3.8.7 
     gmake 
     gmake install 
    EOH 
    only_if do 
     version = shell_out('logrotate --version') 
     version.error? || version.stdout.split.last != '3.8.7' 
    end 
end 

這使用only_if guard子句來控制資源是否收斂,並使用shell_out幫手而不是Ruby的shell執行語法。這將更加便於攜帶,自動拆分stdout和stderr,並在命令失敗時正確運行安裝。也不依賴於awk。

0

通過字符串解析紅寶石做的事:

actual_ver = `logrotate --version 2>&1 | awk '{print $2}'` 
ver = "387" 

if actual_ver.delete('^0-9') == ver 
    puts "nothing to do" 
else 

bash "logrotate-source-install" do 
    user "root" 
    group "root" 
    cwd "/tmp" 
    code <<-EOH 
     cd /tmp 
     yum -y install gettext popt-devel 
     wget https://fedorahosted.org/releases/l/o/logrotate/logrotate-3.8.7.tar.gz 
     tar xf logrotate-3.8.7.tar.gz 
     cd logrotate-3.8.7 
     gmake 
     gmake install 
    EOH 
end 

end 
2

你可以使用attribute only_if來保護這個資源的冪等性。 此外,好的想法是拉版本像節點屬性:

default['logrotate']['version'] = '3.8.7' 

,然後在recepie使用它:

version = default['logrotate']['version'] 

bash "logrotate-source-install" do 
    user "root" 
    group "root" 
    cwd "/tmp" 
    code <<-EOH 
     yum -y install gettext popt-devel 
     wget https://fedorahosted.org/releases/l/o/logrotate/logrotate-#{version}.tar.gz 
     tar xf logrotate-#{version}.tar.gz 
     cd logrotate-#{version} 
     gmake 
     gmake install 
    EOH 
    not_if "[ ${version} = \"$(logrotate --version 2>&1 | awk '{print $2}')\" ]" 
end