1

我正在使用 Vagrant (1.0.5) 和 chef-solo (10.12.0) 开发 ssl 提供商

我有我的提供程序,在名为 gtm_cq 的食谱中称为 ssl,我在食谱的默认食谱中将其定义为:

gtm_cq_ssl "author" do
    # attributes will come later
end  

然后我有我的 cookbook_file 如下所示,import一旦它将证书推送到服务器,它应该通知我的 ssl 提供者的操作:

cookbook_file "#{node[:cq][:ssl][:author_cert_location]}/foo.cer" do
    source "foo.cer"
    owner "crx"
    group "root"
    mode "0644"
    notifies :import, resources(:gtm_cq_ssl => "author")
end

当我运行它时, foo.cer 会按预期向上推,但import我的 ssl 提供程序的操作永远不会被调用。我在任何参考资料中看到的最多的是日志中的这几行(删除了日志标题):

.. cookbook_file[/opt/cq5/author/foo.cer] sending import action to gtm_cq_ssl[author] (delayed)
.. Processing gtm_cq_ssl[author] action import (gtm_cq::author line 34)

有一个很大的非常明显的日志语句,以及使用另一个 cookbook_file 作为测试文件将某些内容推送到服务器。没有日志语句,没有推送测试文件。我也确定 foo.cer 文件在每次测试之前从服务器中删除。

我发现如果我像这样编辑我的通知行:immediately

notifies :import, resources(:gtm_cq_ssl => "author"), :immediately

它似乎工作。我想这在我的特殊情况下是可以的,但如果这是我可以打电话给我的提供者的唯一方式,那似乎有些不对劲。

对此的任何帮助将不胜感激。

谢谢!

编辑:

因此,经过进一步调查,事实证明我的提供者确实被调用了,但我的提供者中的 cookbook_file 调用从未被调用。日志没有提及它。这是我的提供者:

action :import do

    Chef::Log.info "This is my LOG!!!!!!!!!!"
    cookbook_file "/opt/cq5/worked.dat" do
        source "worked.dat"
        cookbook "gtm_cq"
        owner "crx"
        group "root"
        mode "0644"
    end

end

这是我的日志语句出现的日志,但没有关于worked.dat正在执行的食谱文件”

INFO: cookbook_file[/opt/cq5/author/nike.cer] sending import action to gtm_cq_ssl[author] (delayed)
INFO: Processing gtm_cq_ssl[author] action import (gtm_cq::author line 15)
INFO: This is my puts you PUTZ!!!!!!!!!!
INFO: template[/etc/httpd/conf/cq-farms/farm_10author.any] sending restart action to service[apache2] (delayed)
INFO: Processing service[apache2] action restart (apache2::default line 217)

这是一个错误吗?

4

2 回答 2

1

接收到“延迟”通知(即没有 :immediately)的资源在 Chef 运行结束时执行。

cookbook_file我认为到那时对于像你里面的东西来说可能为时已晚:import。

你可以尝试这样的事情:

action :import do
    Chef::Log.info "This is my LOG!!!!!!!!!!"
    cookbook_file "/opt/cq5/worked.dat" do
        source "worked.dat"
        cookbook "gtm_cq"
        owner "crx"
        group "root"
        mode "0644"
        action :nothing      # <— add this
     end.run_action(:create) # <- change this
end

这将在调用 :import 操作后立即运行该资源,而不是对其进行排队。

于 2012-11-30T12:48:45.033 回答
0

我相信语法应该是

notifies :import, "gtm_cq_ssl[author]", :immediately
于 2012-11-27T14:09:54.713 回答