Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra 如果语句被破坏了,请检查_Chef Infra - Fatal编程技术网

Chef infra 如果语句被破坏了,请检查

Chef infra 如果语句被破坏了,请检查,chef-infra,Chef Infra,我有一本简单的厨师烹饪书,如果文件存在,它应该是厨师。如果确实存在,则应终止,如果不存在,则继续下一个配方: file '/tmp/db_backup.lock' do action :nothing only_if { ::File.exist?('/tmp/db_backup.lock') } raise "backup in progress since" not_if { ::File.exist?('/tmp/db_backup.lock') }

我有一本简单的厨师烹饪书,如果文件存在,它应该是厨师。如果确实存在,则应终止,如果不存在,则继续下一个配方:

file '/tmp/db_backup.lock' do
    action :nothing
    only_if { ::File.exist?('/tmp/db_backup.lock') }
    raise "backup in progress since"
    not_if { ::File.exist?('/tmp/db_backup.lock') }
    include_recipe "#{cookbook_name}::hostname"
end

但是,当我在服务器上运行这段代码时,它总是失败并输出raise语句。有人能提出这个逻辑的问题吗

< >代码>在这样的资源的中间提出语句将总是失败,并在厨师期间输出您的提升语句。此外,您不能在另一个类似的资源中运行
include\u recipe
。最后,您不应该有多个防护,在这种情况下,这些防护是冲突的。一个命令资源在文件存在时不要运行,另一个命令资源仅在文件存在时运行。您需要做的是这样的事情:

if ::File.exist?('/tmp/db_backup.lock')
  raise 'backup in progress, stopping'
else
  include_recipe "${cookbook_name::hostname}"
end
如果文件存在,这将引发异常,否则将运行包含的配方

或者,如果您想跳过随附的菜谱,但继续主厨课程,您可以执行以下操作:

if ::File.exist?('/tmp/db_backup.lock')
  Chef::Log.warn("backup in progress, skipping #{cookbook_name::hostname}")
else
  include_recipe "#{cookbook_name::hostname}"
end