概要
払い出したVMのフレーバーを確認するために1つ1つのVMをGUIなどで確認するのは手間がかかるため、novaコマンドを利用してコマンド一発で全VMのフレーバーを確認するスクリプトを作成してみました。
使うこと
- python2
- VMの一覧を確認するために
nova list --fields
を使います。このとき、VMのidは数字および小文字の羅列が8文字以上存在することを想定しています。 - フレーバーの一覧を確認するために
nova flavor-list
を使います。このとき、Is_Public列のTrueとFalseで必要な行を取得します。 - テナントIDを引数として渡します。(テナントIDを調べるのもぶっちゃけ面倒なので、テナント名に命名規則があるなら、それを特定するようなコードを挟むと良いです。)
# -*- coding: utf-8 -*-
import sys
import commands
# nova listの結果からVM名、flavorIDだけ取り出してリスト化します。
def flavorCount(tenant):
dic = flavorDict()
novaResult = commands.getoutput("export OS_TENANT_ID=" + tenant + " ; nova list --fields name,flavor | grep '[0-9a-z]\{8\}' | awk -F '|' '{print $3 $4}' | sed -e 's/[ ]^*//'")
for column in novaResult.splitlines():
vm = column.split()
if len(vm) == 2:
vm[1] = dic[vm[1]]
print(vm)
# nova flavor-listの結果からflavorID, Nameを取り出して辞書化します。
def flavorDict():
fravorDictionary = {}
flavorListResult = commands.getoutput("nova flavor-list | grep -e 'True' -e 'False' | awk -F '|' '{print $2 $3}' | sed -e 's/[ ]^*//'")
for column in flavorListResult.splitlines():
vm = column.split()
if len(vm) == 2:
fravorDictionary[vm[0]] = vm[1]
return fravorDictionary
if __name__ == '__main__':
args = sys.argv
if len(args) < 2 or len(args) > 2:
print('usage: thiscode.py tenant_id')
sys.exit()
tenant = args[1]
flavorCount(tenant.decode())
print('Completed.')
実行例
$ python thiscode.py 5wfd9ab3109aee53bbb8e91ad6a4523d
['vm1', 'm1-large']
['vm2', 'm1-small']
['vm3', 'm2-small']
['vm4', 'm1-medium']
Completed.
今後
VMごとの起動時間・課金情報とかと組み合わせると、VMのフレーバー別の使用状況も見れたりしてよさそうです。