当前厨师食谱代码
ruby_block 'replace_line' do
block do
file = Chef::Util::FileEdit.new(common_conf)
file.search_file_replace_line(/fs.type.*/, 'fs.type='+fs_type)
file.write_file
end
only_if { File.exist?(common_conf) }
end
我收到以下警告:
Running handlers complete
[0m[2017-09-01T03:22:36-05:00] INFO: Report handlers complete
Deprecated features used!
Cloning resource attributes for ruby_block[replace_line] from prior resource
[0mPrevious ruby_block[replace_line]: /var/chef/cache/cookbooks/spark_deployer/recipes/execution_component.rb:61:in `from_file'
[0mCurrent ruby_block[replace_line]: /var/chef/cache/cookbooks/spark_deployer/recipes/execution_component.rb:70:in `from_file' at 1 location:[0m
- /var/chef/cache/cookbooks/spark_deployer/recipes/execution_component.rb:70:in `from_file'[0m
See https://docs.chef.io/deprecations_resource_cloning.html for further details
有人可以帮助我更好地编写上面的代码吗?
答案 0 :(得分:1)
你有没有试过
有关详细信息,请参阅https://docs.chef.io/deprecations_resource_cloning.html
因为错误信息清楚地告诉你了吗?如果你有,你可能会在这个食谱之前看到另一个名字完全相同:'replace_line'
。要解决此问题,您需要将此配方(以及可能的所有引用)重命名为独特的内容,例如:
ruby_block 'replace_line_fs_type' do
答案 1 :(得分:1)
因为您要问的是更好的方式,'你可以查看line
cookbook。它提供了一些用于编辑行的基元,例如:
append_if_no_line "make sure a line is in some file" do
path "/some/file"
line "HI THERE I AM STRING"
end
最佳解决方案是在Chef中管理整个文件,并在您的食谱中嵌入模板,从您的食谱中复制文件,或将整个文件作为{{ {1}}。部分管理的文件可能充满危险。
此外,与the other answer一样,您依赖资源克隆,因为您拥有多个同名资源。即使您切换到行菜谱,您还应确保所有资源名称都是唯一的(或将所有编辑组合到一个资源中)。