未通过cookbook_file通知的提供者

时间:2012-11-11 04:57:10

标签: chef

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

我有一个名为ssl的供应商,名为ssl,名为gtm_cq,我在食谱的默认食谱中将其定义为:

gtm_cq_ssl "author" do
    # attributes will come later
end  

然后我的cookbook_file如下所示,一旦将证书推送到服务器,就会通知我的ssl提供商的import操作:

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会按预期推高,但我的ssl提供程序的import操作永远不会被调用。我看到的任何引用最多的是日志中的这几行(删除了日志标题):

.. 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)

这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

在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动作而不是对其进行排队,这将运行该资源。

答案 1 :(得分:0)

我认为语法应该是

notifies :import, "gtm_cq_ssl[author]", :immediately