在我想要的厨师食谱中
我遇到的问题是当我经营厨师 - 客户时,它没有说“没有这样的文件或目录”。在它甚至在第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在执行代码之前首先执行代码。所以在遍历文件时不存在,因为它在执行解压缩代码之前不会存在。
我该如何避免这种情况?
答案 0 :(得分:1)
来自Chef Docs:
使用ruby_block资源在chef-client期间执行Ruby代码 跑。 ruby_block资源中的Ruby代码与其他资源一起评估 资源在收敛期间,而Ruby代码在...之外 ruby_block资源在之前评估其他资源,作为配方 编译。
然后你必须创建一个ruby_block并将do_something_with_file
的代码插入到这个资源中。也许你必须做一些修改。