我已经为 SUSE 编写了一个厨师食谱,以安装软件包,其中正在安装它,但是每当主厨客户端运行时它都会继续运行enable命令即使配置没有变化,也会运行。
食谱样本示例:
zypper_package 'apache2' do
action :install
end
service 'apache2' do
action [:enable, :start]
end
请告知,如何使其幂等?
答案 0 :(得分:2)
我在SuSE遇到这种情况。至少使用的主厨版本(12.13,不确定新版本)似乎是错误的初始化决定因此内部测试以查看服务是否已启用工作正确。
最有趣的是我发现在SLES 11上工作的提供者是Chef::Provider::Service::Redhat
。我必须处理支持11和12,所以我最终在资源定义中使用了一个if块
service 'apache2' do
action [:enable, :start]
if node['init_package'] != 'systemd'
provider Chef::Provider::Service::Redhat
end
end
我只花了30分钟的时间挖掘所有我的食谱试图找到原始的,但不能,我确实只是确认SLES SP4展示了你描述的行为,并且上面修复了它
-----> Converging <default-sles-11-sp4>...
Recipe: apache_test::default
* zypper_package[apache2] action install (up to date)
* service[apache2] action enable (up to date)
* service[apache2] action start (up to date)
答案 1 :(得分:1)
尝试使用 not_if 。您可以根据配置文件的存在将启用包装在某种条件下,以便不运行命令。
e.g。
package 'Install Apache' do
package_name 'apache2'
action :enable
not_if do ::File.exists?(/some/config/file.conf) end
end