どうも、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
ポイントは…frequency
と frequency_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-client -z -c .solo.rb -j .nodeslocalhost.json
終わりました。
結果を見てみる
以下のコマンドで task が登録されていることを確認します。
schtasks.exe /QUERY /TN "test"
以下のように出力されました。
ちゃんと実行されているかも確認しましょう。
hoge の中身も確認してみます。
ちゃんと中身も hogehoge
が出力され続けていますね。
最後に
Windows で chef を利用して task 登録してみましたが、Windows だからと言って小難しいことありませんでした。ただ、エスケープ文字やレシピファイル保存時の文字コード等には注意する必要があるので若干の試行錯誤は必要かもしれません。
ということで…もう一度申し上げます。
Surface Pro 3 が欲しいです!
元記事は、「Chef on Windows で task を登録したい」です。