運用の中で、仮想化ソフトウェア上のデータ取得や仮想サーバの作成をする場合があると思います。
本稿では、Kompira Enterprise から代表的なサーバ仮想化ソフトウェア「VMware vSphere」と連携して、仮想サーバの情報を取得する方法をご紹介します。
※本稿では既に動いている vSphere 環境があり、Kompira Enterprise からアクセスできる状態を想定しています。
動作確認環境
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.5.5.post11 |
OS | CentOS 7.8.2003 |
または
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.6.2.post4 |
OS | CentOS 7.8.2003 |
vSphere 仮想サーバの用意
事前に Kompira Enterprise から取得する仮想サーバを用意します。
本稿では以下のような「Demo-CentOS8」のサーバを対象とします。
pyVmomi のインストール
Kompira Enterprise から vSphere への連携は pyVmomi という Python のライブラリを使用して連携を行います。
ライブラリ使用方法の詳細については以下を参照してください。
https://github.com/vmware/pyvmomi
Kompira Enterprise へのインストールは pip コマンドを利用してインストールします。
$ sudo /opt/kompira/bin/pip install pyvmomi
Kompira Enterprise ライブラリの作成
ここでは vSphere 上の仮想サーバに接続し、情報を取得する「Vmomi」というライブラリ型オブジェクトを作成します。
ここで入力する Python コードは以下の通りです。
ライブラリ「Vmomi」
from pyVim.connect import Disconnect, SmartConnect from pyVmomi import vim import atexit import ssl def auth(params): # SSL証明書対策 context = None if hasattr(ssl, '_create_unverified_context'): context = ssl._create_unverified_context() # vCenterへ接続 try: si = SmartConnect( host = params['host'], user = params['username'], pwd = params['password'], sslContext = context) except Exception as e: raise Exception('認証に失敗しました。エラー内容: {}'.format(e.msg)) # 処理完了時にvCenterから切断 atexit.register(Disconnect, si) return si.content def get_vm_info(params): # 認証 content = auth(params) # 対象の仮想サーバを取得 vm = None r = content.viewManager.CreateContainerView( content.rootFolder, [vim.VirtualMachine], True) for i in r.view: if i.name == params['vm_name']: vm = i break # 仮想サーバのディスクを取得 device = None for dev in vm.config.hardware.device: if isinstance(dev, vim.vm.device.VirtualDisk): device = dev break return { 'name': vm.config.name, 'num_cpu': vm.config.hardware.numCPU, 'memory_mb': vm.config.hardware.memoryMB, 'disk_size_kb': device.capacityInKB }
auth メソッドでは vSphere の認証処理を行なっています。get_vm_info メソッド内で認証、仮想サーバの取得、仮想サーバのディスクを取得する処理を行なっています。
Kompira Enterprise ジョブフローの作成
次に上記で作成したライブラリを呼び出すジョブフローを作成します。今回のジョブフローでは引数の設定、ライブラリの呼び出し、結果の出力を行います。
ジョブフロー「仮想サーバ情報取得」
| host = 'vcsa.example.com' | | username = 'xxxx' | | password = 'xxxx' | | vm_name = 'Demo-CentOS8' | [ params = { 'host': host, 'username': username, 'password': password, 'vm_name': vm_name } ] -> [./Vmomi.get_vm_info: params] -> [res = $RESULT] -> print('サーバ名: ', res.name) -> print('CPU数: ', res.num_cpu) -> print('メモリ容量: ', int(res.memory_mb / 1024), 'GB') -> print('ディスク容量: ', int(res.disk_size_kb / 1024 / 1024), 'GB')
それぞれのジョブフロー引数については以下の通りです。
引数名 | 説明 |
---|---|
host | vSphere のドメイン |
username | vSphere ログインユーザ名 |
password | vSphere ログインパスワード |
vm_name | 対象の仮想サーバ名 |
ジョブフロー引数を正しく入力して、ジョブフローを実行すると以下のように仮想サーバの情報が取得できます。
本稿で紹介した vSphere 連携では仮想サーバを取得するだけの簡単なものですが、pyVmomi の他 API を使用することで、仮想サーバの作成や削除もすることが可能です。詳しくは先に紹介した API 仕様をご覧ください。