2014年2月19日水曜日

VagrantでWindowsゲストを立ててChef-Soloのrecipeを実行する

2014.02.23 Boxの元の仮想マシン名とBoxの名前がカブってて具合悪かったので一部修正。

VagrantはWindows関連の情報が少ないので色々実践してみた。当ブログはWindows技術者の味方です(おおげさ)。
前回のVagrantの記事はあまりに色々端折っていたので、今回はVagrantを知らない人にも分かる様、少し詳しめに書こうと思う。

今回の目的を下記に定める。

  • ホストOSもWindows、ゲストOSもWindowsという環境
  • VagrantによるゲストOSの起動、ゲストOSに対するChef-Soloの自動インストールとrecipe自動実行まで行う
  • recipeは、とりあえずお試しということで、IISの自動インストールとする
  • ゲストOSはWindows Server 2012 R2 180日評価版とする
  • ゲストOSを複数台同時に立ち上げられるように、sysprepも実施する
  • sysprepの自動応答ファイルも作成することとする

ゲストを評価版にしたのは、元々Vagrantが開発環境を作ったり壊したりするためのツールであることから、ライセンスのアクティベーションが発生する製品版よりは評価版の方が適しているとの考えから。
最初に用語解説
Vagrant
「開発環境作成ツール」などとと呼ばれているが、要は数行のコマンドを叩くだけでゲストOSを簡単に立ち上げられるツール。
この一言だけだと、普通にVMwareやVirtualBox等で仮想マシンテンプレートをコピーして立ち上げるのとあまり変わらなくて嬉しさが伝わらないが、
  • インターネット上で公開されているテンプレート(Boxファイル)が使えるので、自分でテンプレートを使う手間が省ける
  • Chefと連携することにより、環境設定を自動化できる
  • ゲストOSの削除・再作成もコマンドで一発。何度でも環境を作り直せる
といった辺りがメリットかと思う。
初期のVagrantはVirtualBoxのフロントエンドであったが、現在はVMware ESXiのフロントエンドとしても使えるので、開発環境だけでなく本番環境のデプロイにも使えるかと思う(試してない)。
また、今回は触れていないが、Snapshotを簡単に取れるようにする"vagrant-vbox-snapshot"というプラグインもある。
なお、Windowsのテンプレートは、ライセンス上の問題でインターネット上には公開されていないので、自分で作る必要がある。今回のエントリはWindowsテンプレートの自作もテーマの1つ。

Chef-Solo
Chefは「サーバ状態管理フレームワーク」と呼ばれており、サーバの設定変更やソフトウェアのインストール等を自動化するためのツールである。自動化したい内容を記述したものをrecipeと呼び、recipeをグループ化したものをcookbookと呼ぶ。
ChefにはClient-Server方式(Serverでcookbookやrecipeを管理し、Clientに配信して実行させる方式)と、Serverを立てなくても単体で動かせるChef-Soloの2種類がある。今回はChef-Soloを使う。
VagrantにはChef-Soloと連携する機能があって、ゲストOSを立ち上げた時に自動的にrecipeを実行させることができる(Provisioningと言う)。
recipeは自作も可能だし、opscode(Chefの開発元)のサイトに置かれているものをそのまま使うこともできる。凝ったことをしようと思うと自作する必要がある。
今回の検証(IISの自動インストール)においては、opscodeのサイトに置いてあるrecipeを使う。

vagrant-windows
VagrantはゲストOSとの通信にSSHを使うので、ゲストOSがWindowsだと色々困る(Windowsには標準でSSH Serverが入っていないため)。そこで登場したVagrantプラグインがvagrant-windows。こいつを使うと、SSHの代わりにWinRMでゲストOSと通信できるようになる。

vagrant-omnibus
Vagrantで起動したゲストOSに自動的にChef-Soloをインストールしてくれるすごいプラグイン。
(このプラグインが無いと、テンプレート(Box)化するゲストOSにあらかじめChef-Soloを入れておくか、何らかの手段でChef-SoloをゲストOSにインストールしなければならない。それはちょっと自動化とは呼べないよね…)

Berkshelf
「Chefのcookbookとその依存関係を管理するツール」とされており、cookbookの雛形を自動生成してくれたり、opscodeのサイトからダウンロードしてくれたりする賢い奴。
なお、BerkshelfとVagrantを連携させる"vagrant-berkshelf"というプラグインがあるのだが、近々開発を終了するということなので、このプラグインは使わないこととした。

注意:
2014.2.18現在、vagrant-omnibusのリリース版(1.2.1)におけるWindows対応が不完全である。GitHubのリポジトリのmasterブランチには既にWindows対応版のソースがMergeされているので、ここからファイルをダウンロードして置き換えるという手間をかければ動く(手順は後述)。今後Windows対応バージョンのvagrant-omnibusが正式リリースされたら、この手間は不要になるはず。

今回私が検証に使った環境を説明。

ホストOS
  • Windows 7 Ultimate x64
  • Oracle VM VirtualBox 4.3.6
  • Ruby 1.9.3
  • Vagrant 1.4.3

ゲストOS
  • Windows Server 2012 R2 評価版
Windows Server 2012 R2 のダウンロードから 9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_JA-JP-IRM_SSS_X64FREE_JA-JP_DV5.ISO をダウンロードする。

じゃ行きます。

VirtualBoxのインストール
Downloads – Oracle VM VirtualBoxから VirtualBox-4.3.6-91406-Win.exe をダウンロードしてインストールする。
Boxの元となるゲストOSの作成
VirtualBoxで普通に仮想マシンを新規作成する。仮想マシン名は"Win2012R2_eval_base"とした。
この仮想マシンにWindows Server 2012 R2 評価版をインストールする。今回の検証では、エディションはStandard フルインストール(GUIあり)をチョイス。この辺の手順は省かせていただく。

ゲストOSの設定内容は前回のエントリの「BaseとなるWindowsゲストを作る。」節を参照してほしいが、「サーバーマネージャの自動起動を無効化」は実施しても意味が無いので省略してよい(sysprepすると設定がリセットされちゃう)。
で、sysprepだけちょっと待った。
sysprepの自動応答ファイルを作る

sysprepを実行した後にOSを起動すると、OOBEというウィザードで各種設定作業をさせられるので、この作業を自動化するために自動応答ファイルを作成する。
ホストOSにてWindows 8.1 用 Windows ADKをダウンロードし、インストールする。途中で機能を選ぶところでは、"Deployment Tools"だけ選択し、他のチェックは外してよい。
次に、Windows Server 2012 R2のインストールメディア 9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_JA-JP-IRM_SSS_X64FREE_JA-JP_DV5.ISO をDaemon Toolsか何かでマウントし、その中の\sources\install.vimをコピー。ローカルのHDD上のどこかにsourcesというフォルダを作り、そこにペーストする。

スタートメニューからWindows System Image Managerを起動。
左下の「Windows イメージ」ペインを右クリックし「Windows イメージの選択」を選択。
ファイル選択ダイアログが表示されるので、さきほど保存したinstall.vimを選択。
「イメージの選択」ダイアログが表示されたら、インストールしたゲストOSのエディションを選択。
「カタログファイルを作成しますか?」と問われるのでOKをクリック。
この後、数分(数十分)待たされる。
処理が終わったら、「応答ファイル」ペインを右クリックし「新しい応答ファイル」を選択。
以下、下記のように作業を行う。
「Windows イメージ」ペインにて以下の操作を行う。
  • amd64_Microsoft-Windows-Security-SPP_6.xxx を右クリックし「パス 3 generalize に設定を追加」を選択。
  • amd64_Microsoft-Windows-Shell-Setup_6.xxx -> AutoLogon を右クリックし「パス 7 oobeSystem に設定を追加」を選択。
  • amd64_Microsoft-Windows-Shell-Setup_6.xxx -> OOBE を右クリックし「パス 7 oobeSystem に設定を追加」を選択。
  • amd64_Microsoft-Windows-Shell-Setup_6.xxx -> UserAccounts を右クリックし「パス 7 oobeSystem に設定を追加」を選択。
  • amd64_Microsoft-Windows-International-Core_6.xxx を右クリックし「パス 7 oobeSystem に設定を追加」を選択。
  • amd64_Microsoft-Windows-ServerManager-SvrMngNc_6.xxx を右クリックし「パス 4 specialize に設定を追加」を選択。

「応答ファイル」ペインにて以下の通り設定していく。
  • 3 generalize -> amd64_Microsoft-Windows-Security-SPP_neutral を選択。右のプロパティペインで下記を設定。
SkipRearm 1
  • 4 specialize -> amd64_Microsoft-Windows-ServerManager-SvrMngNc_neutral を選択。下記を設定。
DoNotOpenServerManagerAtLogon true
  • 7 oobeSystem -> amd64_Microsoft-Windows-International-Core_neutral を選択。下記を設定。
InputLocale 0411:E0010411
(英語キーボードの場合は0409:00000409)
SystemLocale ja-JP
UserLocale ja-JP
  • 7 oobeSystem -> amd64_Microsoft-Windows-Shell-Setup_neutral を選択。下記を設定。
TimeZone Tokyo Standard Time
  • 7 oobeSystem -> amd64_Microsoft-Windows-Shell-Setup_neutral -> AutoLogon を選択。下記を設定。
Enabled true
Username vagrant
  • 7 oobeSystem -> amd64_Microsoft-Windows-Shell-Setup_neutral -> AutoLogon -> Password を選択。下記を設定。
Value vagrant
  • 7 oobeSystem -> amd64_Microsoft-Windows-Shell-Setup_neutral -> OOBE を選択。下記を設定。
HideEULAPage true
NetworkLocation Work
ProtectYourPC 1
SkipUserOOBE true
  • 7 oobeSystem -> amd64_Microsoft-Windows-Shell-Setup_neutral -> UserAccounts -> AdministratorPassword を選択。下記を設定。
Value (任意のパスワード)
Fig.1 こんな感じになる
ここまで設定したら、Ctrl+sを押下して応答ファイルを保存する。保存先とファイル名は適当でよいが、Unattend.xmlという名前にするのが一般的らしい。
できたxmlを貼っておく。これをそのまま使うことも可能(InputLocaleが英語キーボードになってるので注意!)。
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <SkipUserOOBE>true</SkipUserOOBE>
                <NetworkLocation>Work</NetworkLocation>
                <ProtectYourPC>1</ProtectYourPC>
            </OOBE>
            <UserAccounts>
                <AdministratorPassword>
                    <Value>dgBhAGcAcgBhAG4AdABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByAFAAYQBzAHMAdwBvAHIAZAA=</Value>
                    <PlainText>false</PlainText>
                </AdministratorPassword>
            </UserAccounts>
            <TimeZone>Tokyo Standard Time</TimeZone>
            <AutoLogon>
                <Password>
                    <Value>dgBhAGcAcgBhAG4AdABQAGEAcwBzAHcAbwByAGQA</Value>
                    <PlainText>false</PlainText>
                </Password>
                <Enabled>true</Enabled>
                <Username>vagrant</Username>
            </AutoLogon>
        </component>
        <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <UserLocale>ja-JP</UserLocale>
            <SystemLocale>ja-JP</SystemLocale>
            <InputLocale>0409:00000409</InputLocale>
        </component>
    </settings>
    <settings pass="generalize">
        <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
    <settings pass="specialize">
        <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:d:/sources/install.wim#Windows Server 2012 R2 SERVERSTANDARD" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

これにより何ができるかというと。。。
  • EULA画面をスキップ
  • ロケール、タイムゾーンを自動選択
  • Administratorのパスワードを自動設定
  • Sysprepの回数制限を回避
  • vagrantユーザーで自動ログオン
  • ログオン後にサーバーマネージャを表示させない
という感じ。
なお、今回の検証では評価版Windowsを使うので、プロダクトキーの自動入力は省いている。製品版Windowsを使う場合はプロダクトキーの自動入力設定も必要だ。詳しくはググってほしい

では、このUnattend.xmlを、ゲストOSのC:\直下にコピーする(ファイル共有を使う等、手段は問わない)。
その後、ゲストOSのコマンドプロンプトで、以下を実行する。
C:\users\dsp74118>C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:C:\Unattend.xml /mode:vm
これでsysprepが実行された後、ゲストOSが自動的にシャットダウンする。

ベースのゲストOSが完成したので、Vagrantの作業に入る。
Rubyインストール
Rubyのダウンロードサイトから rubyinstaller-1.9.3-p484.exe をダウンロードしてインストール。
Vagrantのインストール
Download Vagrantから Vagrant_1.4.3.msi をダウンロードしてインストール。

Vagrantのホームフォルダ(vagrant box addで追加したBoxの仮想ディスクやVagrantプラグインが置かれる場所)は、デフォルトだと %USERPROFILE%\.vagrant.d である。私はCドライブにVagrantのデータを置きたくないので、ユーザー環境変数で以下を設定した。
VAGRANT_HOME=S:\VM\.vagrant.d
※以下、"S:\VM" の部分は各自の環境に合わせて読み替えていただければっ!

[スタート] -> [全てのプログラム] -> [Ruby 1.9.3-p484] -> [Ruby コマンドプロンプトを開く] を選択。Ruby コマンドプロンプト上で下記コマンドを実行し、Vagrant plugin達とBerkshelfをインストールする。
C:\users\dsp74118>vagrant plugin install vagrant-windows
C:\users\dsp74118>vagrant plugin install vagrant-omnibus
C:\users\dsp74118>gem i berkshelf
vagrant-omnibusの上書き
冒頭で述べたとおり、2014.2.18時点のvagrant-omnibus(1.2.1)は、Windowsゲストへの対応が不完全である。そのため、以下の作業を行う。
vagrant-omnibusの次期リリース以降は、この作業は不要のはず。
  • vagrant-omnibusのGitHubに行き、"Download ZIP"をクリックして vagrant-omnibus-master.zip をダウンロードし、解凍する
  • 解凍したものを %VAGRANT_HOME%\gems\gems\vagrant-omnibus-1.2.1 に上書きする
Fig.2 vagrant-omnibusの最新masterをダウンロード
くどいようだが %VAGRANT_HOME% は普通なら C:\users\<username>\.vagrant.d である。今回の私の環境では S:\VM\.vagrant.d 。
さっき作ったゲストOSをBox化する
では、Windows Server 2012 R2ゲストをBox(テンプレート)化する。
Boxファイルは S:\VM\Vagrant_boxes フォルダに置くこととする。
S:\>mkdir S:\VM\Vagrant_boxes
S:\>vagrant package --base "Win2012R2_eval_base" --output S:\VM\Vagrant_boxes\win2012r2_eval-20140217.box
[Win2012R2_eval] Clearing any previously set forwarded ports...
[Win2012R2_eval] Creating temporary directory for export...
[Win2012R2_eval] Exporting VM...
[Win2012R2_eval] Compressing package to: S:/VM/Vagrant_boxes/win2012r2_eval-20140217.box
できたBoxをVagrantの管理下に追加する。
S:\>vagrant box add Win2012R2_eval S:\VM\Vagrant_boxes\win2012r2_eval-20140217.box
Downloading or copying the box...
Progress: 2% (Rate: 15.0M/s, Estimated time remaining: 0:04:46)
Successfully added box 'Win2012R2_eval' with provider 'virtualbox'!
追加されたことを確認してみる。
S:\>vagrant box list
Win2012R2_eval (virtualbox)
VagrantとBerkshelfの設定ファイル、およびcookbookの置き場所を考える
次にやることは、Vagrant設定ファイル、Berkshelf設定ファイル、cookbook配置フォルダの作成。
Vagrantの設定ファイルはVagrantfileという名前で、Berkshelfの設定ファイルはBerksfileという名前である。まず、これらをどこに置くかを考える。
Vagrantfile
仮想マシン(ゲストOS)の定義ファイルであり、1つのVagrantfileにつき1台の仮想マシンを立ち上げられる(仮想マシンの立ち上げには"vagrant up"というコマンドを使うが、これはVagrantfileが置いてあるフォルダで実行する必要がある)。つまり、Vagrantで複数の仮想マシンを同時に立ち上げる場合、複数のフォルダを作って、それぞれにVagrantfileを置く必要がある。
Berksfile
Berkshelfで管理するcookbookの定義ファイル。
cookbook配置フォルダ
Berkshelfでcookbookを管理する場合、普通はBerksfileとcookbook配置フォルダを同じ階層にする(Berksfile内でパスを指定すれば別の階層に置くことも可能)。また、VagrantをChef-Soloと連携させる場合にはVagrantfile内でcookbook配置フォルダを指定する必要があり、そのパスはVagrantfileからの相対パスで記述するので、Vagrantfileとcookbook保存先フォルダも同じ階層にしておくと都合がよい。

具体的には下記のイメージ。(このあたりの理屈を判りやすく載せてるサイトが全然ないよ!)。
作りたい仮想マシン(ゲストOS)毎のフォルダ
├Cookbookを置くフォルダ
├Vagrantfile
└Berksfile
というわけで、まず「作りたい仮想マシン毎のフォルダ」を決める。今回は S:\VM\Vagrantfiles\win2012r2-iis とする。で、cookbookの置き場所は S:\VM\Vagrantfiles\win2012r2-iis\cookbooks とした。
※注:一般公開されているcookbookを置くフォルダは"cookbooks"、自作のcookbookを置くフォルダは"site-cookbooks"とするのがお作法らしい。今回はopscodeのサイトにあるIISのcookbookを使うので cookbooks フォルダに置くようにした。

まずはフォルダを作成する。
Rubyコマンドプロンプトで下記を実行。
C:\users\dsp74118>s:
S:\>mkdir \VM\Vagrantfiles\win2012r2-iis\cookbooks
Vagrantfileを作る
では、Vagrantfileを作成し、編集する。
S:\>cd \VM\Vagrantfiles\win2012r2-iis
S:\VM\Vagrantfiles\win2012r2-iis>vagrant init
このコマンドでVagrantfile(の雛形)が作成されるので、エディタで編集する。内容は、vagrant-omnibusとChef-Soloの設定を追加した以外は、基本的には前回のエントリと同様。
下記は一例。途中のコメント行は端折った。
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.hostname = "win2012r2-iis"
  config.vm.box = "Win2012R2_eval"

  config.vm.provider :virtualbox do |vb|
     vb.gui = true
  end

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

  # chef_solo
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = [ "cookbooks", "site-cookbooks" ]
    chef.run_list = [
        "recipe[iis::default]"
    ]
  end

  # configs for Vagrant-Windows
  config.vm.guest = :windows
  config.vm.network :forwarded_port, guest: 3389, host: 13389
  config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true

  # extend boot_timeout
  config.vm.boot_timeout = 600

end
解説しよう。
config.vm.hostname で、VirtualBoxに作成する仮想マシン名を指定。なくてもよい。
config.vm.box には、先ほど "vagrant box add" したBox名を指定。
vb.gui = true を指定して、VirtualBoxのコンソールでVMをいじれるようにする。
config.omnibus.chef_version = :latest でvagrant-omnibusを有効化。値を ":latest" と書いておくと、ゲストOS起動時に自動的に最新版Chef-Soloをダウンロードしてインストールしてくれる。(※特定のバージョンを指定することも可能)
chef.cookbooks_path に、cookbookのフォルダをVagrantfileからの相対パスで指定。
chef.run_list に、実行したいrecipe名を記述。
# configs for Vagrant-Windows 以下の3行は、前回のエントリと同じ。RDPのポート(3389)は、今回もlocalhost:13389をフォワードするよう設定。
最後の config.vm.boot_timeout は、VagrantがゲストOSの起動を待つ時間を設定。デフォルトだと300秒らしいのだが、これだと私のおっそい検証環境ではタイムアウトしてしまうことがあるので…(涙)
Berksfileを作る
次に、BerkShelfの設定ファイルであるBerksfileを作る。
内容は下記の通り。
site :opscode

cookbook "iis"
なんとこれだけ。
site :opscode と書くことで、opscodeのWebサイトからcookbookをダウンロードすることを宣言。
で、opscodeのWebサイト内にIISのcookbookが用意されているので、それを指定しているというわけである。
Berksfileができたら、そのフォルダにて"berks install" コマンドを実行してcookbookをダウンロードする。
S:\VM\Vagrantfiles\win2012r2-iis>berks install --path cookbooks
Using iis (2.0.0)
Using windows (1.30.0)
Using chef_handler (1.1.4)
これでOK。cookbooksフォルダの中を見ると、ちゃんとファイルがダウンロードされていることが判る。
※berksfileの依存関係管理機能により"windows"と"chefhandler"という2つのcookbookが追加ダウンロードされている。これはすごい。
いよいよ起動してみる
S:\VM\Vagrantfiles\win2012r2-iis>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'Win2012R2_eval'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] The cookbook path 'S:/VM/Vagrantfiles/win2012r2-iis/site-cookbooks' doesn't exist. Ignoring...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 3389 => 13389 (adapter 1)
[default] -- 5985 => 5985 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Setting hostname...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Installing Chef 11.10.2 Omnibus package...
[default] Downloading Chef 11.10.2 for Windows...
[default] Installing Chef 11.10.2
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo..
[2014-02-20T01:31:31+09:00] INFO: *** Chef 11.10.2 ***
[2014-02-20T01:31:31+09:00] INFO: Chef-client pid: 2644
[2014-02-20T01:31:51+09:00] INFO: Setting the run_list to ["recipe[iis]"] from JSON
[2014-02-20T01:31:51+09:00] INFO: Run List is [recipe[iis]]
[2014-02-20T01:31:51+09:00] INFO: Run List expands to [iis]
[2014-02-20T01:31:51+09:00] INFO: Starting Chef Run for WIN-RB9PQ2JK7KK
[2014-02-20T01:31:51+09:00] INFO: Running start handlers
[2014-02-20T01:31:51+09:00] INFO: Start handlers complete.
[2014-02-20T01:33:26+09:00] INFO: windows_feature[IIS-WebServerRole] installed feature
[2014-02-20T01:33:27+09:00] INFO: Chef Run complete in 95.397377 seconds
[2014-02-20T01:33:27+09:00] INFO: Running report handlers
[2014-02-20T01:33:27+09:00] INFO: Report handlers complete
これでゲストOSが上がった。IISがちゃんと入っているかどうか、サーバーマネージャで確認してみる。
Fig.3 IISのインストールを確認
入ってた! これにてミッションコンプリート。

次回はChef-SoloによるSQL Serverの自動インストールを試そうかと画策中。あと、レジストリの操作にも挑戦したいところ。

0 コメント:

コメントを投稿