只有当包裹存在时,厨师才会运行资源

时间:2015-08-11 10:38:50

标签: chef

我想在大厨食谱中解压缩一个文件,但我想确保在解压缩之前在该机器上安装解压缩包。如何在厨师中做到这一点?

我试过下面的食谱但是在安装了解压缩包的机器上它根本就不执行它。

bash 'extract' do
    cwd '/home/norun/'
    code <<-EOH
        unzip wso2.zip
        EOH
    only_if { ::File.exists?('/home/norun/wso2.zip') }
    not_if { ::File.exists?('/home/norun/wso2as-5.2.1') }
end

apt_package 'unzip' do
    action :install
    notifies :run , 'bash[extract]', :immediately
end

提前致谢

1 个答案:

答案 0 :(得分:2)

只需更改订单,因为订单在Chef中很重要:

package 'unzip' do
    action :install
    # notifies :run , 'bash[extract]', :immediately
end

这将确保安装unzip实用程序。顺便说一句,您可以使用package资源,因为这会使您的代码更具可移植性。 Chef将自动选择合适的提供者。此外,我建议从package[unzip]删除通知,因为如果已安装unzip,则不会触发解压缩过程。

bash 'extract_wso2' do
    cwd '/home/norun/'
    code 'unzip wso2.zip'
    only_if { ::File.exists?('/home/norun/wso2.zip') }
    not_if { ::File.exists?('/home/norun/wso2as-5.2.1') }
end

您无需通知bash[extract_wso2]资源,因为它由not_if保护。

您可能还想使用ark食谱。

,而不是手动解压缩