====== 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名