ようへいの日々精進XP

よかろうもん

xenserver-automater と knife-xenserver と chef-zero で提供する仮想マシン構築自動化(2)

概要

  • 前回の補足
  • xensever-automator について(ハマった点)

前回の補足

実装

実装の内容を図面で起こしてみた。

f:id:inokara:20130605001050p:plain

上記の通り、XenServer を中心として Dom0XenStore から IP アドレス等の情報を取得してサーバーに設定した上で chef server との通信の後で設定が開始する実装。

稼働メッセージ

XenStore を利用することで knife xenserver create vm の起動メッセージに変化があった。

Connecting to XenServer host ${XenServer IP}... 
Creating VM hogehoge... 
Using template ${your_template} [uuid: ${template_uuid}]...
Adding attributes to xenstore... # ← ここが追加になった
VM Name: xxxxxxx
VM Memory: 512 MB 

Waiting server... 
Trying to SSH to ${VM IP}...

xensever-automator について(ハマってる点)

xensever-automator を検証していてところハマってしまった点を紹介。

xe-automater.conf

xe-automater.conf/etc/init/ 以下に設置しなければいけないようだが、対象となる環境(Debian)には初期状態では /etc/init ディレクトリがそもそも無かった...

そもそも /etc/init/ とは /etc/init.d と対を成すものらしく、利用するには upstart コマンドが必要となり現状の環境には適用出来ない。ということで、無理くり /etc/init.d/ 以下に置くようなコマンドを自作してみた。

#!/bin/sh                                             
         
### BEGIN INIT INFO
# Provides: xenserver-automater
# Default-Start: 2 3 4 5                            
# Default-Stop: 0 1 6
# Required-Start:
# Required-Stop:
# Description: XenServer Guest Configuration Automator
### END INIT INFO
                                                      
NAME=xenserver-automater
USER=root
DESC="XenServer Guest Configuration Automator"

case "$1" in
        start )
        echo -n "Starting $DESC: "                    
        /usr/sbin/xe-set-network
        /usr/sbin/xe-set-hostname                     
  ;;
esac

上記のシェルを作成し /etc/init.d 以下に xe-automater というファイル名で設置する。設置後、sudo update-rc.d xe-automator defaults にて起動スクリプトとして登録。

この状態で再起動時 xe-automater が実行されて IP アドレスが仮想ホストに設定されるという算段でいたが IP アドレスが正常に設定されない事象が発生している。

原因として考えられるのが...

  • xe-automater が実行されるより前に Xen 関連のサービスが起動する必要がある?
  • そもそもスクリプトがヘタレである

xe-automater を手動で cd /etc/init.d && sudo ./xe-automater start として実行すると正常に IP が設定されることからスクリプトがヘタレである点と合わせて OS 起動時に Xen 関連のサービスが起動している必要がありそうだ。

まとめ

  • Chef の話というよりも XenServer の話になってきているが引き続き調査していく
  • そもそも init スクリプトの書き方を知らなかった自分が恥ずかしい...