Chef infra 与厨师动态食谱
我试图创建一个解压一些文件的方法,然后行为取决于zipfile的内容。 但我不知道如何克服编译与收敛阶段 在执行配方之前,目录不存在,因此获取子目录的命令必须位于ruby块中,以便在运行时获取数据 但是一旦命令进入ruby块,我就无法“读取”变量或属性的新值 以下是一个示例:Chef infra 与厨师动态食谱,chef-infra,Chef Infra,我试图创建一个解压一些文件的方法,然后行为取决于zipfile的内容。 但我不知道如何克服编译与收敛阶段 在执行配方之前,目录不存在,因此获取子目录的命令必须位于ruby块中,以便在运行时获取数据 但是一旦命令进入ruby块,我就无法“读取”变量或属性的新值 以下是一个示例: ruby_block 'update patch attributes' do block do OPatchPath="#{node[:oracle][:rdbms][:ora_home]}/OPatc
ruby_block 'update patch attributes' do
block do
OPatchPath="#{node[:oracle][:rdbms][:ora_home]}/OPatch/#{Patch_No}"
Subdir_list = Dir.glob("#{OPatchPath}/*/")
Subdir_list.each do |dir|
Subdir_list.map! {|dir| dir.sub("#{OPatchPath}/", "")}
Subdir_list.map! {|dir| dir.sub('/', "")}
end
node.set[:oracle][:rdbms][:oracle_patch_list]=Subdir_list
end
end
## if there are no directories with numberes
if Subdir_list.find { |e| /^\d+$/ =~ e } == nil
do something
else
if Subdir_list.count == 2
do something else
else
do some other something
end
end
我在网上做了深入的研究,并尝试了很多建议,包括使用lazy、node.set、node.default node.run_state而没有运气。
我错过了什么?
有什么建议吗
谢谢,Ofir.这是一个编译与聚合的问题,您可以查看更详细的概述,但tl;dr是指ruby_块内的代码发生在ruby_块外的代码之后,即使这可能与文件中的顺序不匹配。您可能需要创建一个自定义资源。您能举例说明如何使用自定义资源来解决此问题吗?我可以在ruby代码中使用自定义资源吗?