どうも、cloudpackかっぱ@inokara)です。
Surface Pro 3 が欲しいです!

はじめに

早速ですが Chef で Windows のタスクを登録してみたいと思います。


手順

事前準備

Chef on Windows ではほぼ必須と言っても良いと思います。以下の cookbook をインストールしておきます。

この cookbook の windows_task というリソースを利用します。

ちなみにインストールは berkshelf をインストールしました。

source "https://supermarket.getchef.com"

cookbook 'windows', '~" 1.34.6'

上記のように Berksfile を用意して…以下のようにインストールします。

berks vendor

簡単ですな。(環境によっては berks vendor ${dir} とする必要があるかもしれません)

レシピ

テスト用に以下のようなレシピを書きました。

files = ['test.bat', 'hoge.rb']
files.each do |file|
  cookbook_file "C:\#{file}" do
    source "#{file}>"
    action :create
  end
end

windows_task 'test' do
  user 'Administrator'
  password 'your_password'
  #cwd 'C:Program` Files` `(x86`)Logrotate'
  cwd 'C:tmp'
  #command 'C:Program` Files` `(x86`)Logrotatelogrotate.exe C:Program` Files` `(x86`)LogrotateContentlogrotate.conf'
  command 'C:¥test.bat'
  frequency :minute
  frequency_modifier 1
end

ポイントは…frequencyfrequency_modifier で一分に一回を指定している所と…今回はコメントアウトして実行するようになっていませんが C:Program Files (x86) をバッククォートでエスケープしているのは以下のようなエラーが出てしまう為です。

x86 : The term 'x86' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the

対策はこちらを参考にさせて頂きました。サンキューベリーマッチ。因みにバッククォートは powershell のエスケープ文字となるので注意しましょう。

今回は以下のコマンドをタスクに登録します。

command 'C:¥test.bat'

一分に一回 task.bat を実行します。test.bat の中身は以下の通りです。

C:opscodechefdkembeddedbinruby C:hoge.rb "" C:tmphoge

hoge.rb の中身は以下の通りです。

puts "hogehoge"

シンプル、シンプル。

the 収束

chef-client を実行して収束させますが、まずは僕らの –why-run で様子を見ます。

chef-client -z -c .solo.rb -j .nodeslocalhost.json -W

どないでしょか。

Chef on Windows タスク登録: 動作確認(1)

いけそうですな。では、イッテミヨー。

chef-client -z -c .solo.rb -j .nodeslocalhost.json

終わりました。

Chef on Windows タスク登録: 動作確認(2)

結果を見てみる

以下のコマンドで task が登録されていることを確認します。

schtasks.exe /QUERY /TN "test"

以下のように出力されました。

Chef on Windows タスク登録: 動作確認(3)

ちゃんと実行されているかも確認しましょう。

Chef on Windows タスク登録: 動作確認(4)

hoge の中身も確認してみます。

Chef on Windows タスク登録: 動作確認(5)

ちゃんと中身も hogehoge が出力され続けていますね。

最後に

Windows で chef を利用して task 登録してみましたが、Windows だからと言って小難しいことありませんでした。ただ、エスケープ文字やレシピファイル保存時の文字コード等には注意する必要があるので若干の試行錯誤は必要かもしれません。

ということで…もう一度申し上げます。
Surface Pro 3 が欲しいです!

元記事は、「Chef on Windows で task を登録したい」です。