毎日Learning

学んだことを共有します

opscodeのwindows cookbooksを使う方法

windows Cookbook - Chef Supermarket
opscode-cookbooks/windows · GitHub

Windows仮想OSに対して、VagrantのProvisionでChefのレシピを実行するための手順といいますか、お作法が分かったので備忘録しておきます。

Project/
  |- Vagrantfile
  |- cookbooks/
    |- chef_handler/
    |- windows/
    |- my_recipe/
      |- metadata.rb
      |- recipes
        |- default.rb

こんな感じのフォルダ構成にして、windowsフォルダにOpscodeで公開されている便利レシピをとってきて、呼び出す感じです。

1. Vagrantfileの作成
2. Windows Cookbookのダウンロード
3. metadata.rbの作成
4. recipeの作成
5. vagrant up

詳細は、以下ぁ~

実践 Vagrant

実践 Vagrant

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

1. Vagrantfileの作成

Vagrantfileは、こんな感じ。

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "Win2012R2"
  config.vm.box_url = "Win2012R2.box"

  # vagrant-omnibus
  config.omnibus.chef_version = :latest

  config.vm.network "forwarded_port", guest: 3389, host: 13389
  config.vm.network "forwarded_port", guest: 5985, host: 5985, id: "winrm", auto_correct: true

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "cookbooks"
    chef.custom_config_path = "Vagrantfile.chef"
    chef.run_list = [
      "my_recipe"
    ]
  end
end

ポイントは、winrmのポートフォワードにIDつけてるところと、chefにVagrantfile.chefをcustom_config_pathに指定してるところ。

このあたりは、
Vagrant で作ったり壊したりできる Windows 環境を手に入れるまでの手順 - てっく煮ブログ
こちらを、とてもとても参考にさせていただきました。
すぺしゃるさんくすです。

2. Windows Cookbookのダウンロード

OpscodeからCookbookをとってきます。

とりかたは、いろいろあるけど、今回は、ふつーにGitHubからDLしてきて解凍しておいたった。
opscode-cookbooks/windows · GitHub

と、Windows Cookbookは、chef_handlerに依存しているので、こいつも取ってくる。
opscode-cookbooks/chef_handler · GitHub

3. metadata.rbの作成

で、この記事で一番だいじなこと言います。

depends "windows"

って書いたmetadata.rbを my_recipe フォルダの直下に作ります。

このmeta情報を書くことで、my_recipe にWindows CookbookのResourceを呼ぶことができるようになって、あんなことやこんなことを、できちゃう。

4. recipeの作成

で、まあ、今回はサンプルなので、かるい内容のレシピを書いときます。

cookbooks/my_recipe/recipes/default.rb

windows_batch "Add hoge to hoge.txt" do
  code <<-EOH
    echo "hoge" >> C:/hoge.txt
  EOH
end

みたいな。
こんな単純なWindowsコマンドなんだけど、これ一つ実行さすのでも、実はChefを使わない場合、けっこう面倒なんだよね。

で、windows_batchもじゅうぶん強力なResourceですが、なんといっても一番の目玉は、windows_packageでしょうね。

これさえ実行できれば、そこそこのWIndows Installerは実行できちゃうんじゃないか。

そんな期待を持っています。

このあたりは、これからもそっと調べていく予定。

5. vagrant up

$ vagrant up

を実行したら、良い感じに起動されます。

ちなみに、Vagrantfile内に、

  # vagrant-omnibus
  config.omnibus.chef_version = :latest

って書いてて、かつ、

$ vagrant plugin install vagrant-omnibus

ってーのを事前にインストールしておいたら、仮想側のWindowsにchefを自動でインストールしてくれちゃうから、もうこりゃたまらん。ずびっ。

以上。