0

LWRPを作成しましたが(初めて)、必要に応じて機能しないようです。何かが足りないのか、何か間違ったことをしたのかわかりません。opscodeのドキュメントはひどいです。以下にコードを示します。

プロバイダー

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

chefの出力にはFOOBARが表示されますが、 bashスクリプト内には何も出力されません。したがって、bashは実行されません。ポインタはありますか?

4

2 に答える 2

1

アクションを実行するようにインスタンスに指示する必要はありません :restart

お気に入り

restart = nameOfCookbook_nameOfResource "process" do
  action :nothing
end

restart.run_action(:restart)

初期化を再起動と言うように設定したことは知っていますが、 action :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 に答える