ユーザ用ツール

サイト用ツール


サイドバー

Index

はじめてのおつかい






DokuWiki整形記法


PlayGround



os:xenserver:autometer

xenserver-automater

GitHubで公開されているxenserver-automaterを利用すると、テンプレートから仮想マシンを作成する際に任意のIPアドレスを設定することができる
なお、automaterはautomatorのtypoだと思われるが、元サイトでそのように記述されているのでそのままにしています。

※以下はCentOS 6.5用に書いていますのでご注意ください。

FreeBSD用に移植しましたので、FreeBSDの方はFreeBSDにxenserver-automatorを移植するを参照してください knifeと組み合わせた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

インストール

テンプレート用の元VM1)にインストールします。

  1. xenserver-automaterサイトからファイルをダウンロードして、「xe-set-*」ファイルを/usr/sbin/にコピーして実行権限をつけます。2)
  2. Upstart用のxe-automate.confを/etc/init/にコピー。3)

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用に変更4)

#!/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の作成

ホスト5)で作業します

# 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名
1)
DomU
2)
スクリプトはUbuntu用になっているので、CentOS用の変更が必要です
3)
CentOS用の変更が必要
4)
ifcfg-eth0のバックアップがORG.ifcfg-eth0なのはワザとです。後ろにORGをつけても読み込むという腐った仕様なので…
5)
Dom0
os/xenserver/autometer.txt · 最終更新: 2017/04/14 14:21 (外部編集)