我有一个看起来像这样的Chef_resource
bash 'regenerate-master-list' do
code <<-EOH
rm -f /etc/datadog-agent/conf.d/redis_sentinel.d/conf.yaml
EOH
action :run
notifies :create, 'cookbook_file[/etc/datadog-agent/conf.d/redis_sentinel.d/conf.yaml]', :immediately
not_if "diff <(cat /etc/datadog-agent/conf.d/redis_sentinel.d/master_list) <(redis-cli -p 26379 info sentinel | grep name | sed 's/,.*//' | cut -d '=' -f 2-)"
end
此块总是执行,因为not_if
是错误的,当我尝试手动运行它时,我看到了预期的结果,即无差异。我有什么要添加到脚本中的吗?
您可以尝试使用等于您的execute
保护对象的命令来创建bash not_if
资源。
execute "diff <(cat /etc/datadog-agent/conf.d/redis_sentinel.d/master_list) <(redis-cli -p 26379 info sentinel | grep name | sed 's/,.*//' | cut -d '=' -f 2-)"
它将在下一次厨师运行时失败,您将看到输出。
我的猜测是,厨师不能运行redis-cli,因为它不在厨师的PATH中。