vSphere 上の仮想サーバ情報を取得する

運用の中で、仮想化ソフトウェア上のデータ取得や仮想サーバの作成をする場合があると思います。
本稿では、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 仕様をご覧ください。

TOP