0

我创建了一个 LWRP(我的第一次),但它似乎没有按要求工作。我不确定我是否遗漏了什么或做错了什么。操作码文档很糟糕。我在下面显示了我的代码:

提供者

puts "FOO"

def restart_process
  @svc = Chef::Resource::RestartProcesses.new(new_resource.name)
  Chef::Log.debug("Restarting services according to the box")
  notifies :run, resources(:execute => 'restart-storm')
end

puts "BAR"

action :restart do

  execute 'restart-process' do
    command <<-EOH
      echo "-------Executing restart process--------"
      #Some bash code
    EOH
  end
end

资源

actions :restart

attribute :name, :kind_of => String, :name_attribute => true

def initialize(*args)
  super
  @action = :restart
end

调用资源的配方

template "#{install_dir}/####Something" do
  source "someSource.erb"
  variables(
    ###Some variables
  )

  notifies :run, 'nameOfCookbook_nameOfResource[process]'
end

nameOfCookbook_nameOfResource "process" do
  action :nothing
end

厨师输出显示FOO BAR但它没有在我的bash脚本中打印任何内容。所以它不会运行 bash。任何指针?

4

2 回答 2

1

您不需要告诉实例运行操作吗:restart

restart = nameOfCookbook_nameOfResource "process" do
  action :nothing
end

restart.run_action(:restart)

我知道您已将初始化设置为重新启动,但我认为传递操作 :nothing 会覆盖它,因此请按照上述示例强制它在您需要时运行,或者在模板部分中通知您想要的实际操作

notifies :restart

通过自己运行它,我看到了一个 :nothing 仅在资源上执行的操作。不是在我的情况下的默认行为 :stop

通过将通知更改为 :stop 它具有预期的行为。

我从日志中的理解是你已经告诉你的资源运行,但它的动作是 :nothing 所以它什么也不做。

于 2012-10-30T13:23:12.567 回答
0

确保您的

notifies :run, 'nameOfCookbook_nameOfResource[process]'

在实际计划运行的模板中。(例如,使用调试输出)。因为如果文件已经存在,则什么都不会做,所以也重新启动。

于 2012-10-30T15:31:39.380 回答