====== xenserver-automater ======
GitHubで公開されている[[https://github.com/krobertson/xenserver-automater|xenserver-automater]]を利用すると、テンプレートから仮想マシンを作成する際に任意のIPアドレスを設定することができる\\
なお、automaterはautomatorのtypoだと思われるが、元サイトでそのように記述されているのでそのままにしています。 \\
**//※以下はCentOS 6.5用に書いていますのでご注意ください。//**
**FreeBSD用に移植しましたので、FreeBSDの方は[[os:xenserver:autometer:xenauto-freebsd|]]を参照してください
[[serverapps:configmgmt:xen-knife_autometer|knifeと組み合わせた]]り[[serverapps:configmgmt:xen_autometer_perl|perlスクリプトと組み合わせる]]ことで、一気にVMをIP付きで作成できます**
====== XenStoreの確認 ======
XenStore を利用したパラメータの受け渡しができるか確認
===== Dom0 =====
仮想マシンのUUIDを取得
xe vm-list name-label=xxxx
パラメータセット
xe vm-param-set uuid=仮想マシンのUUID xenstore-data:vm-data/ip=IPアドレス
パラメータ確認
xe vm-param-list uuid=仮想マシンのUUID | grep 'xenstore-data'
パラメータ削除
xe vm-param-remove uuid=仮想マシンのUUID param-name=xenstore-data param-key=vm-data/ip
===== DomU =====
再起動してからパラメータ参照
# xenstore-read vm-data/ip
xx.xxx.xx.xxx
====== インストール ======
テンプレート用の元VM((DomU))にインストールします。
- xenserver-automaterサイトからファイルをダウンロードして、「xe-set-*」ファイルを/usr/sbin/にコピーして実行権限をつけます。((スクリプトはUbuntu用になっているので、CentOS用の変更が必要です))
- Upstart用のxe-automate.confを/etc/init/にコピー。((CentOS用の変更が必要))
====== xe-automator.conf ======
/etc/init/xe-automator.conf をCentOS用に変更
# xe automator
description "XenServer Guest Configuration Automator"
start on stopped rc RUNLEVEL=[2345]
script
/usr/sbin/xe-set-network
/usr/sbin/xe-set-hostname
end script
====== xe-set-hostname ======
ホスト名を設定すスクリプト /usr/sbin/xe-set-hostname をCentOS用に変更
#!/bin/bash
XENSTOREREAD=`which xenstore-read`
if [ -e $XENSTOREREAD ]; then
NAME=`$XENSTOREREAD name`
DOMAIN=`$XENSTOREREAD vm-data/dm`
#change hostname
[ "$NAME" = "" ] && exit 0
cp /etc/sysconfig/network /etc/sysconfig/network.ORG
cat << EOF > /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=$NAME
EOF
/bin/hostname $NAME
#if domain info wasn't passed in then dont alter the hosts file
[ "$DOMAIN" = "" ] && exit 0
# read passed in IP address if it exists
IP=`$XENSTOREREAD vm-data/ip`
# otherwise just use the ip address that the machine has already
if [ $IP = "" ]; then IP=`ip addr list eth0 | grep "inet " | cut -d' ' -f6 | cut -d/ -f1`; fi
# change hosts
cat << EOF > /etc/hosts
127.0.0.1 localhost
$IP $NAME.$DOMAIN $NAME
EOF
fi
exit 0
====== xe-set-network ======
ネットワーク情報を設定するスクリプト /usr/sbin/xe-network をCentOS用に変更((ifcfg-eth0のバックアップがORG.ifcfg-eth0なのはワザとです。後ろにORGをつけても読み込むという腐った仕様なので…))
#!/bin/bash
XENSTOREREAD=`which xenstore-read`
[ -x $XENSTOREREAD ] || exit 0
IP=`$XENSTOREREAD vm-data/ip`
GW=`$XENSTOREREAD vm-data/gw`
NM=`$XENSTOREREAD vm-data/nm`
NS=`$XENSTOREREAD vm-data/ns`
DM=`$XENSTOREREAD vm-data/dm`
[ "$IP" = "" ] && exit 0
[ "$GW" = "" ] && exit 0
[ "$NM" = "" ] && exit 0
[ "$NS" = "" ] && exit 0
# eth0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ORG.ifcfg-eth0
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
#BROADCAST=
DNS1="$NS"
GATEWAY="$GW"
#HWADDR=
IPADDR="$IP"
NETMASK="$NM"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
#UUID=
EOF
# service restart
service network restart
exit 0
====== テンプレートの作成 ======
Shutdownしてテンプレートを作成する。\\
以下のコマンドか、XenCenterから作成
xe vm-param-set uuid=仮想マシンのUUID is-a-template=true
====== テンプレートからVMの作成 ======
ホスト((Dom0))で作業します
# xe vm-install template=テンプレートのUUID new-name-label=新VM名
OR
# xe vm-install template=$(xe template-list name-label=テンプレート名 --minimal) new-name-label=新VM名
OR
# xe vm-install template=テンプレート名 new-name-label=新VM名
UUIDが表示されます
まだ起動しません
IPなどのネットワーク情報を設定します
# xe vm-param-set uuid=表示された新VMのUUID xenstore-data:vm-data/ip=IPアドレス
# xe vm-param-set uuid=表示された新VMのUUID xenstore-data:vm-data/gw=ゲートウェイ
# xe vm-param-set uuid=表示された新VMのUUID xenstore-data:vm-data/nm=ネットマスク
# xe vm-param-set uuid=表示された新VMのUUID xenstore-data:vm-data/ns=DNSサーバIP
# xe vm-param-set uuid=表示された新VMのUUID xenstore-data:vm-data/dm=ドメイン名
仮想マシンを起動
# xe vm-start uuid=表示された新VMのUUID
仮想マシンにログインしてネットワーク情報を確認
# ifconfig
eth0 Link encap:Ethernet HWaddr AA:AB:AC:BA:BB:BC
inet addr:192.168.xxx.xxx Bcast:192.168.xxx.255 Mask:255.255.255.0
<略......>
# hostname
新VM名