如何使厨师食谱在 SUSE 操作系统的厨师中幂等



我已经为 SUSE 编写了一个厨师配方,用于安装一个软件包,其中它正在安装它,但是每次 chef-client 运行时它都会运行 enable 命令,即使配置没有变化。

配方示例示例

zypper_package 'apache2' do
action :install
end
service 'apache2' do
action  [:enable, :start]
end

请告知,如何使其幂等?

我在SuSE上遇到了这种情况。至少对于我正在使用的 chef 版本(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)

尝试使用not_if。您可以根据配置文件的存在将启用包装在某种条件下,以不运行该命令。

例如

package 'Install Apache' do
   package_name 'apache2'
   action :enable
   not_if do ::File.exists?(/some/config/file.conf) end
end

相关内容

  • 没有找到相关文章

最新更新