esxcliで遊ぶ

概要

vCenterなんて家にはないけど、esxcliでどこまでできるか考えてみる。

デプロイ

Windows上で試行することを考える。 まず、VMPlayerに対して、5.5を入れる。 VMware vSphere Hypervisor 5.5のisoをダウンロード。

https://my.vmware.com/jp/group/vmware/evalcenter?p=free-esxi5

この辺からダウンロードできる。Clientはインストールされている前提。

自動でCPUのVTなどはenableされるので、特に特殊な設定はいらない。 ネットワークはNATではなく、ホストオンリーで設定しておく。

とりあえず、

  • mgmtの変更
  • enable SSH

をした。

# esxcli system version get
  Product: VMware ESXi
  Version: 5.5.0
  Build: Releasebuild-1331820
  Update: 0

よしよし。

調べた

どうやら、ESXiのコマンドラインは何種類かあるらしい。

vim-cmd

vim-cmd hostsvc/net/vswitch_add hoge

みたいにできる。 YAMLっぽいので表示がでるので、ちょっと見にくいかも。 逆にいうと、コード書くときは操作しやすい?

esxcli

esxcli  network nic set

などできるが、基本的には「変更」であって、新規とか廃棄はできないっぽい? つかわないでよさそう。

vmkfstools

vmdk操作用。ファイルシステムはこれで操作?

なんとなくわかること

# vSwitchを作った
vim-cmd hostsvc/net/vswitch_add hoge
# esxcfg-vswitch -a hoge
# でもよさそう

# 消す
esxcfg-vswitch -d hoge2
esxcfg-vswitch -A vlan2 hoge
esxcfg-vswitch -A vlan3 hoge
esxcfg-vswitch -A vlan-all hoge
esxcfg-vswitch hoge -p vlan2 -v 2
esxcfg-vswitch hoge -p vlan3 -v 3
esxcfg-vswitch hoge -p vlan-all -v 4095
esxcfg-vswitch -l hoge

esxcli network nic list
などで、vmnicを確認する

VMのテンプレートデプロイ

自分でmgmt用のVMを作った時などを考える

http://qiita.com/binzume/items/096ce77f73b6e853c342

などをみると、原則、vmxを作っておいて登録すべきっぽい。

vyOSのテンプレートを作ってみようと思う

/vmfs/volumes/datastore1/iso/vyos-1.1.6-amd64.iso

があるものとする

vmid=` vim-cmd vmsvc/createdummyvm vyos-templ /vmfs/volumes/datastore1/`
cd /vmfs/volumes/datastore1/vyos-templ
# これはsedじゃないといけないね
# echo guestOS = "otherlinux-64" >> vyos-templ.vmx
echo memsize = "512" >> vyos-templ.vmx
echo numvcpus = "1" >> vyos-templ.vmx
rm vyos-templ.vmdk vyos-templ-flat.vmdk
vmkfstools --createvirtualdisk 2G -d thin vyos-templ.vmdk
#迷子になったら、これでvmid得る
vim-cmd  vmsvc/getallvms
vim-cmd vmsvc/reload $vmid

# 次に、localでのtemplate用mgmtを作成する
# これはuntagなネットワーク
vim-cmd hostsvc/net/vswitch_add templ_mgmt
esxcfg-vswitch -A untag templ_mgmt
esxcfg-vswitch templ_mgmt -p untag -v 0
esxcfg-vswitch -l hoge templ_mgm

vim-cmd vmsvc/get.networks $vmid
ethernet0.virtualDev = "e1000"
ethernet0.networkName = "untag"
ethernet0.addressType = "generated"
ethernet0.present = "TRUE"
ide0:0.deviceType = "cdrom-image"
ide0:0.fileName = "/vmfs/volumes/55f5304e-ab1a64a3-e8eb-000c295ba3fe/iso/vyos-1.1.6-amd64.iso"
ide0:0.present = "TRUE"
vim-cmd vmsvc/reload $vmid
vim-cmd vmsvc/power.on $vmid

コンソールをとって
vyos/vyos
して
install image
> yes, sda, yes, [enter], [enter], [enter], [password], [enter]
> passwordをtestにした
そのあと
poweroff

vim-cmd vmsvc/power.getstate $vmid
> Powered offであること
sed -i -e 's/ide0:0\..*//' vyos-templ.vmx
vim-cmd vmsvc/power.on $vmid

vyos:testで入る
configure
delete interface ethernet eth0 hw-id
set interface ethernet eth0 address 192.168.254.200/24
set service telnet
set service ssh
commit
save
exit
poweroff
> yes

VMを複製する

vim-cmd vmsvc/power.getstate $vmid
> Powered offであること
cd /vmfs/volumes/datastore1
mkdir vyos-clone1
cd vyos-clone1
# ディスクをレプリケーションする
vmkfstools -i ../vyos-templ/vyos-templ.vmdk ./vyos-clone1.vmdk
> vyos-clone1-flat.vmdk  vyos-clone1.vmdk
ができます。
# 各種ファイルのコピー
cp ../vyos-templ/vyos-templ.vmx ./vyos-clone1.vmx
sed -i -e 's/vyos-templ/vyos-clone1/g' vyos-clone1.vmx
cp ../vyos-templ/*.nvram ./vyos-clone1.nvram
cp ../vyos-templ/*.vmsd ../vyos-clone1.vmsd
cp ../vyos-templ/*.vmxf ./vyos-clone1.vmxf
# ここで、eth0の生成されたMACアドレスを削除しておく
# こうしないと、cloneで作ったものとアドレスが被る。
sed -i -e 's/ethernet0.generatedAddress.*//' vyos-clone1.vmx
# cloneしたVMのpower on
vmid=`vim-cmd solo/registervm /vmfs/volumes/datastore1/vyos-clone1/vyos-clone1.vmx vyos-clone1`
vim-cmd  vmsvc/getallvms
# VMをpower-onするが、replicaであるので、その"answer"をしたい
vim-cmd vmsvc/power.on $vmid &
sleep 1
vim-cmd vmsvc/message 6とすると
> Virtual machine message _vmx2:
> 2. button.uuid.copiedTheVM (I Copied It) [default]
などでるので、
vim-cmd vmsvc/message $vmid _vmx2 2
する

設定用サーバ

これは、動的なものでないので、最初から立ち上げる。 eth2に192.168.254.1をもつubuntuホストとした。 eth1はDHCPでNATしており、 eth0はmgmtのアドレスが付与されている。

192.168.78.125