Posted at

Openstackで立てたVMのフレーバー情報を確認するコマンド


概要

払い出した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のフレーバー別の使用状況も見れたりしてよさそうです。