Chef:chef-client在执行代码之前首先执行代码

时间:2014-06-27 02:44:22

标签: ruby chef chef-recipe

在我想要的厨师食谱中

  1. 解压缩文件
  2. 使用zip中的一个文件来迭代内容。
  3. 我遇到的问题是当我经营厨师 - 客户时,它没有说“没有这样的文件或目录”。在它甚至在第1步中解压缩文件之前

    以下是提供商的代码:

        action :create do
          if @current_resource.exists
            converge_by("Create #{ @current_resource }") do
               unzip('realFileToUnzip','someLocation')  
               do_something_with_file('realFileToOpen')
            end
          end
        end
    ....
    

    在同一个提供者文件中,我有一个def定义如下

    def unzip(fileToUnzip, unzipToLocation)
      bash "unzip" do
        user "root"
        cwd "/tmp"
        code <<-EOH
            unzip  -o #{fileToUnzip} -d #{unzipToLocation}
        EOH
      end
    end
    

    这个def也

    def do_something_with_file(fileToConvert)
      ::File.open(fileToConvert, 'r') do |properties_file|
        properties_file.read.each_line do |line|
          puts line
        end
      end
    end
    

    似乎chef-client在执行代码之前首先执行代码。所以在遍历文件时不存在,因为它在执行解压缩代码之前不会存在。

    我该如何避免这种情况?

1 个答案:

答案 0 :(得分:1)

来自Chef Docs

  

使用ruby_block资源在chef-client期间执行Ruby代码   跑。 ruby_block资源中的Ruby代码与其他资源一起评估   资源在收敛期间,而Ruby代码在...之外   ruby_block资源在之前评估其他资源,作为配方   编译。

然后你必须创建一个ruby_block并将do_something_with_file的代码插入到这个资源中。也许你必须做一些修改。

祝你好运!