2017年12月23日土曜日

IDCFクラウドで追加ネットワークに仮想マシン作成時からIPを指定する

IDCF Cloud Advent Calendar 2017 に参加してます。

気付いたら1年ぶりの投稿でした。
ブログって意識してないとホント書きませんね。
という訳で、アドベントカレンダーがあったので書くきっかけにしてみました。

IDCFクラウドで追加ネットワークって仮想マシン作成時に、
コントロールパネルからIP指定して起動出来ないんですよね。
・追加ネットワークだけ使いたい(裏側のDBとか)
・プライベートネットワークと接続している
・別途マネージドFW/LBを契約している
とかとか。そんな時に超不便。
なのでcloudstack-apiを使用してさくっとIP指定して作ってしまいます。

cloudstack-apiのインストール方法は下記。
http://docs.idcf.jp/cloud/introduction/#install
ちなみに、上記のマニュアルは一部古くて、curlは以下が正解です。
curl -kL https://bootstrap.pypa.io/get-pip.py | python

2018年2月には現在ベータ版のidcfcloud-apiの仮想マシン機能がリリース予定らしいので、
その時はidcfcloud-apiに書き換えちゃいましょうね。
それまでの間って短いなーって感じですが、短い間でも楽しなきゃ損なので。

基本形はこれ。
/usr/bin/cloudstack-api deployVirtualMachine \
--serviceofferingid $SERVICEOFFERINGID \
--templateid $TEMPLATEID \
--zoneid $ZONEID \
--group $GROUP \
--keypair $KEYPAIR \
--name $NAME \
--networkids $NETWORKIDS \
--ipaddress $IPADDR

順を追って確認しましょう。
先ずは serviceofferingidですが、仮想マシンのタイプです。
以下コマンドで起動したい仮想マシンのタイプのidをメモ。
cloudstack-api listServiceOfferings -t name,id

templateidも同じように以下コマンドで起動したいテンプレートのidをメモ。
※セルフテンプレートの場合は以下。公式のを使う人は templatefilterをselfからfeaturedに変更
cloudstack-api listTemplates --templatefilter self -t displaytext,id,name,ostypename,status,zonename

次はzoneidを確認。
cloudstack-api listZones -t name,id


groupを確認。
※新しく指定する場合は必要なし。
cloudstack-api listInstanceGroups -t name


keypairを確認。
※指定するときは名前。finger printは確認の意味で。
cloudstack-api listSSHKeyPairs -t name,fingerprint


networkidを確認。
cloudstack-api listNetworks -t name,id,cidr

上記コマンドで確認した内容を前述の以下コマンドで流せば作成できます。
$NAMEの部分は作成したい仮想マシンの名前。
$IPADDRの部分は指定したいIPアドレスを代入してください。
/usr/bin/cloudstack-api deployVirtualMachine \
--serviceofferingid $SERVICEOFFERINGID \
--templateid $TEMPLATEID \
--zoneid $ZONEID \
--group $GROUP \
--keypair $KEYPAIR \
--name $NAME \
--networkids $NETWORKIDS \
--ipaddress $IPADDR

ちなみにnetworkidsは複数指定可能なので、仮想ルーターのデフォルトNWと追加NWを両方出来ます。

これをshellとかにして引数にIPアドレスと名前を指定出来るようにしておけば、
オートスケールに使ったり出来るし、結構万能に使えます。

「なんで追加ネットワークのIP指定出来ないんだよ!」
って発狂気味の皆さんはぜひお試しください。

それではよいクラウド構築を。