第2章 Python クイックスタートの例


2.1. Python のクイックスタート について

本章では、Python SDK を使用して基本的な Red Hat Virtualization 環境で仮想マシンを作成する手順を実例をあげて説明します。

重要

本章の例は、Python SDK のバージョン 3 で使用するように設計されています。

以下にあげる例では、ovirt-engine-sdk-python パッケージで提供される ovirtsdk Python ライブラリーを使用しています。このパッケージは、Red Hat Subsription Manager 経由で Red Hat Virtualization プールにサブスクライブされているシステムに提供されています。お使いのシステムをサブスクライブしてソフトウェアをダウンロードする方法については、「Python ソフトウェア開発キットのインストール」を参照してください。

作業を行うにあたってのその他の要件

  • ネットワーク接続された Red Hat Virtualization Manager のインストール
  • ネットワーク接続があり、設定済みの Red Hat Enterprise Virtualization Host
  • 仮想マシンにインストールするオペレーティングシステムが格納された ISO イメージファイル
  • Red Hat Virtualization 環境を構成する論理/物理オブジェクトに関する実用的な知識
  • Python プログラミング言語に関する実用的な知識
重要

Python の例にはすべて、認証情報用のプレースホルダー (ユーザー名には USER、パスワードには PASS) が含まれています。Python で実行されるすべての要求が、ご使用の環境の認証要件を満たしていることを確認してください。

注記

Red Hat Virtualization Manager は、各リソースの id 属性のグローバル一意識別子を生成します。以下の例に記載した識別子のコードは、ご使用の Red Hat Virtualization 環境の識別子コードと異なる場合があります。

注記

これらの Python の例には、基本的な例外およびエラー処理ロジックのみが含まれます。SDK に固有な例外処理の詳細については、ovirtsdk.infrastructure.errors モジュールの pydoc を参照してください。

$ pydoc ovirtsdk.infrastructure.errors
Copy to Clipboard Toggle word wrap

2.2. 例: Python を使用した API エントリーポイントへのアクセス

ovirtsdk Python ライブラリーは、API のエントリーポイントとして機能する API クラスを提供します。

例2.1 Python を使用した API エントリーポイントへのアクセス

以下の Python の例は、rhevm.demo.redhat.com で Red Hat Virtualization Manager によって提供される REST API のインスタンスに接続します。以下の例では、API クラスのインスタンスを作成して接続します。接続が成功した場合には、メッセージが表示されます。最後に、API クラスの disconnect() メソッドが呼び出されて接続が終了します。

この例で API クラスのコンストラクターに以下のパラメーターを提供します。

  • 接続する Manager の url
  • 認証するユーザーの username
  • 認証するユーザーの username
  • 証明書へのパスである ca_file。証明書は、Manager の認証局用コピーであることが想定されます。これは、https://[engine-fqdn]_ovirt-engine/services/pki-resource?resource=ca-certificate&format=_X509-PEM-CA から取得できます。

API クラスのコンストラクターは、他のパラメーターをサポートしますが、以下の例では、必須パラメーターのみを指定しています。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    print "Connected to %s successfully!" % api.get_product_info().name

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

接続試行が成功した場合には、次の例のような出力が表示されます。

Connected to Red Hat Virtualization Manager successfully!
Copy to Clipboard Toggle word wrap

2.3. 例: Python を使用したデータセンターコレクションの一覧表示

API クラスは、datacenters という名前のデータセンターコレクションへのアクセスを提供します。このコレクションには、環境内の全データセンターが含まれます。

例2.2 Python を使用したデータセンターコレクションの一覧表示

以下の Python の例は、datacenters コレクション内のデータセンターを一覧表示します。また、コレクション内の各データセンターの基本的な情報も出力します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    dc_list = api.datacenters.list()

    for dc in dc_list:
        print "%s (%s)" % (dc.get_name(), dc.get_id())

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

Default データセンターのみが存在する環境で、そのデータセンターがアクティブ化されていない場合は、次の例のような出力が表示されます。

Default (d8b74b20-c6e1-11e1-87a3-00163e77e2ed)
Copy to Clipboard Toggle word wrap

2.4. 例: Python を使用したクラスターコレクションの一覧表示

API クラスは、clusters という名前のクラスターコレクションを提供します。このコレクションには、環境内の全クラスターが含まれます。

例2.3 Python を使用したクラスターコレクションの一覧表示

以下の Python の例は、clusters コレクション内のクラスターを一覧表示します。また、コレクション内の各クラスターの基本的な情報も出力します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    c_list = api.clusters.list()

    for c in c_list:
        print "%s (%s)" % (c.get_name(), c.get_id())

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

Default クラスターのみが存在する環境の場合は、次の例のような出力が表示されます。

Default (99408929-82cf-4dc7-a532-9d998063fa95)
Copy to Clipboard Toggle word wrap

2.5. 例: Python を使用した論理ネットワークコレクションの一覧表示

API クラスは、networks という名前の論理ネットワークへのアクセスを提供します。このコレクションには、環境内の全論理ネットワークが含まれます。

例2.4 Python を使用した論理ネットワークコレクションの一覧表示

以下の Python の例は、networks コレクション内の論理ネットワークを一覧表示します。また、コレクション内の各ネットワークの基本的な情報も出力します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API(url="https://_HOST_",
              username="_USER_@_DOMAIN_",
              password="_PASS_",
              ca_file="_ca.crt_")

    n_list = api.networks.list()

    for n in n_list:
        print "%s (%s)" % (n.get_name(), n.get_id())

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

デフォルトの管理ネットワークのみが存在する環境の場合は、次の例のような出力が表示されます。

ovirtmgmt (00000000-0000-0000-0000-000000000009)
Copy to Clipboard Toggle word wrap

2.6. 例: Python を使用したホストコレクションの一覧表示

API クラスは、hosts という名前のホストコレクションへのアクセスを提供します。このコレクションには、環境内の全ホストが含まれます。

例2.5 Python を使用したホストコレクションの一覧表示

以下の Python の例は、hosts コレクション内のホストを一覧表示します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API(url="https://_HOST_",
              username="_USER_@_DOMAIN_",
              password="_PASS_",
              ca_file="_ca.crt_")

    h_list = api.hosts.list()

    for h in h_list:
        print "%s (%s)" % (h.get_name(), h.get_id())

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

Atlantic という名前のホストが 1 台のみアタッチされた環境では、次のような出力が表示されます。

Atlantic (5b333c18-f224-11e1-9bdd-00163e77e2ed)
Copy to Clipboard Toggle word wrap

2.7. 例: ISO ストレージドメインの ISO ファイルの表示

API クラスは storagedomains という名前のストレージドメインコレクションへのアクセスを提供します。同様に、このコレクションには、ストレージドメイン内のファイルを記述する files コレクションが含まれています。

例2.6 ISO ストレージドメインの ISO ファイルの表示

この Python の例は、Red Hat Virtualization 環境内の各 ISO ストレージドメイン内にある ISO ファイルを一覧で出力します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    storage_domains = api.storagedomains.list()

    for storage_domain in storage_domains:
        if(storage_domain.get_type() == "iso"):

            print(storage_domain.get_name() + ":\n")

            files = storage_domain.files.list()

            for file in files:
                print("     %s" % file.get_name())

            print()

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

2.8. 例: 仮想マシンのサイズの表示

API クラスは、vms という名前の仮想マシンコレクションへのアクセスを提供します。同様に、このコレクションには仮想マシンにアタッチされた各ディスクの詳細を記述する disks コレクションが含まれています。

例2.7 仮想マシンのサイズの表示

以下の Python の例は、Red Hat Virtualization 環境の仮想マシンとその合計ディスクサイズ (バイト単位) を一覧で出力します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    virtual_machines = api.vms.list()

    if len(virtual_machines) > 0:

        print("%-30s  %s" % ("Name","Disk Size"))
        print("==================================================")

        for virtual_machine in virtual_machines:

            disks = virtual_machine.disks.list()

            disk_size = 0

            for disk in disks:
                disk_size += disk.get_size()

            print("%-30s: %d" % (virtual_machine.get_name(), disk_size))

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

2.9. 例: Python を使用した NFS データストレージの作成

Red Hat Virtualization 環境の初回作成時には、少なくともデータストレージドメインを 1 つと ISO ストレージドメインを 1 つ定義する必要があります。データストレージドメインは、仮想マシンのディスクイメージを格納するのに使用する一方、ISO ストレージドメインはゲストオペレーティングシステムのインストールメディアを格納するのに使用します。

API クラスは、storagedomains という名前のストレージドメインコレクションへのアクセスを提供します。このコレクションには、環境内の全ストレージドメインが含まれています。storagedomains コレクションはストレージドメインの追加と削除に使用することができます。

注記

以下の例に記載したコードは、リモートの NFS 共有が Red Hat Virtualization 用に事前設定済みであることを前提としています。NFS 共有の使用準備に関する詳しい説明は、Red Hat Virtualization 管理ガイドを参照してください。

例2.8 Python を使用した NFS データストレージの作成

以下の Python の例は、NFS データドメインを storagedomains コレクションに追加します。Python を使用した NFS ストレージドメイン追加は以下のような手順で行います。

  1. datacenters コレクションの get メソッドを使用して、ストレージをアタッチする必要のあるデータセンターを特定します。

    dc = api.datacenters.get(name="Default")
    Copy to Clipboard Toggle word wrap
  2. hosts コレクションの get メソッドを使用して、ストレージのアタッチに使用する必要のあるホストを特定します。

    h = api.hosts.get(name="Atlantic")
    Copy to Clipboard Toggle word wrap
  3. NFS ストレージドメインの Storage パラメーターを定義します。以下の例では、NFS の場所に 192.0.43.10/storage/data を使用しています。

    s = params.Storage(address="192.0.43.10", path="/storage/data", type_="nfs")
    Copy to Clipboard Toggle word wrap
  4. storagedomains コレクションの add メソッドを使用して、ストレージドメイン作成を要求します。Storage パラメーターに加えて、以下の情報をすべて渡す必要があります。

    • ストレージドメインの名前
    • datacenters コレクションから取得したデータセンターオブジェクト
    • hosts コレクションから取得したホストオブジェクト
    • 追加するストレージドメインのタイプ (dataiso、または export)
    • 使用するストレージフォーマット (v1v2、または v3)

これらの手順を組み合わせた完全なスクリプトは以下のようになります。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    dc = api.datacenters.get(name="Default")
    h = api.hosts.get(name="Atlantic")

    s = params.Storage(address="192.0.43.10", path="/storage/data", type_="nfs")
    sd_params = params.StorageDomain(name="data1", data_center=dc, host=h, type_="data", storage_format="v3", storage=s)

    try:
        sd = api.storagedomains.add(sd_params)
        print "Storage Domain '%s' added (%s)." % (sd.get_name())
    except Exception as ex:
        print "Adding storage domain failed: %s" % ex

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add メソッド呼び出しが成功した場合は、スクリプトによって以下のような出力が表示されます。

Storage Domain 'data1' added (bd954c03-d180-4d16-878c-2aedbdede566).
Copy to Clipboard Toggle word wrap

2.10. 例: Python を使用した NFS ISO ストレージの作成

仮想マシンを作成するには、ゲストオペレーティングシステムのインストールメディアを使用可能な状態にする必要があります。Red Hat Virtualization 環境では、インストールメディアを ISO ストレージドメインに保管します。

注記

以下の例に記載したコードは、リモートの NFS 共有が Red Hat Virtualization 用に事前設定済みであることを前提としています。NFS 共有の使用準備に関する詳しい説明は、Red Hat Virtualization 管理ガイドを参照してください。

例2.9 Python を使用した NFS ISO ストレージの作成

以下の Python の例は、NFS データドメインを storagedomains コレクションに追加します。Python を使用した NFS ストレージドメイン追加は以下のような手順で行います。

  1. datacenters コレクションの get メソッドを使用して、ストレージをアタッチする必要のあるデータセンターを特定します。

    dc = api.datacenters.get( name="Default" )
    Copy to Clipboard Toggle word wrap
  2. hosts コレクションの get メソッドを使用して、ストレージのアタッチに使用する必要のあるホストを特定します。

    h = api.hosts.get(name="Atlantic")
    Copy to Clipboard Toggle word wrap
  3. NFS ストレージドメインの Storage パラメーターを定義します。以下の例では、NFS の場所に 192.0.43.10/storage/iso を使用しています。

    s = params.Storage(address="192.0.43.10", path="/storage/iso", type_="nfs")
    Copy to Clipboard Toggle word wrap
  4. storagedomains コレクションの add メソッドを使用して、ストレージドメイン作成を要求します。Storage パラメーターに加えて、以下の情報をすべて渡す必要があります。

    • ストレージドメインの名前
    • datacenters コレクションから取得したデータセンターオブジェクト
    • hosts コレクションから取得したホストオブジェクト
    • 追加するストレージドメインのタイプ (dataiso、または export)
    • 使用するストレージフォーマット (v1v2、または v3)

これらの手順を組み合わせた完全なスクリプトは以下のようになります。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    dc = api.datacenters.get(name="Default")
    h = api.hosts.get(name="Atlantic")

    s = params.Storage(address="192.0.43.10", path="/storage/iso", type_="nfs")
    sd_params = params.StorageDomain(name="iso1", data_center=dc, host=h, type_="iso", storage_format="v3", storage=s)

    try:
        sd = api.storagedomains.add(sd_params)
        print "Storage Domain '%s' added (%s)." % (sd.get_name())
    except Exception as ex:
        print "Adding storage domain failed: %s" % ex

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add メソッド呼び出しが成功した場合は、スクリプトによって以下のような出力が表示されます。

Storage Domain 'iso1' added (789814a7-7b90-4a39-a1fd-f6a98cc915d8).
Copy to Clipboard Toggle word wrap

2.11. 例: Python を使用したデータセンターへのストレージドメインのアタッチ

Red Hat Virtualization にストレージドメインを追加した後には、データセンターにアタッチしてアクティブ化し、使用できる状態にする必要があります。

例2.10 Python を使用した、データセンターへのストレージドメインのアタッチ

この Python の例は、data1 という名前のデータストレージドメインと、iso1 という名前の ISO ストレージドメインを default データセンターにアタッチします。アタッチのアクションは、データセンターの storagedomains コレクションの add メソッドを使用して実行されます。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    dc = api.datacenters.get(name="Default")

    sd_data = api.storagedomains.get(name="data1")
    sd_iso = api.storagedomains.get(name="iso1")

    try:
        dc_sd = dc.storagedomains.add(sd_data)
        print "Attached data storage domain '%s' to data center '%s' (Status: %s)." %
		      (dc_sd.get_name(), dc.get_name, dc_sd.get_status().get_state())
    except Exception as ex:
        print "Attaching data storage domain to data center failed: %s." % ex

    try:
        dc_sd = dc.storagedomains.add(sd_iso)
        print "Attached ISO storage domain '%s' to data center '%s' (Status: %s)." %
		      (dc_sd.get_name(), dc.get_name, dc_sd.get_status().get_state())
    except Exception as ex:
        print "Attaching ISO storage domain to data center failed: %s." % ex

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add メソッドの呼び出しが成功した場合は、スクリプトによって以下のような出力が表示されます。

Attached data storage domain 'data1' to data center 'Default' (Status: maintenance).
Attached ISO storage domain 'iso1' to data center 'Default' (Status: maintenance).
Copy to Clipboard Toggle word wrap

status には、ストレージドメインのアクティブ化がまだ必要であることが表示される点に注意してください。

2.12. 例: Python を使用したストレージドメインのアクティブ化

ストレージドメインを Red Hat Virtualization に追加してデータセンターにアタッチした後には、それらのストレージドメインをアクティブ化して使用できる状態にする必要があります。

例2.11 Python を使用したストレージドメインのアクティブ化

以下の Python の例は、data1 という名前のデータストレージドメインおよび iso1 という名前の ISO ストレージドメインをアクティブ化します。これらのストレージドメインはいずれも Default データセンターにアタッチされています。アクティブ化のアクションは、ストレージドメインの activate メソッドを使用して実行されます。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    dc = api.datacenters.get(name="Default")

    sd_data = dc.storagedomains.get(name="data1")
    sd_iso = dc.storagedomains.get(name="iso1")

    try:
        sd_data.activate()
        print "Activated data storage domain '%s' in data center '%s' (Status: %s)." %
		      (sd_data.get_name(), dc.get_name, sd_data.get_status().get_state())
    except Exception as ex:
        print "Activating data storage domain in data center failed: %s." % ex

    try:
        sd_iso.activate()
        print "Activated ISO storage domain '%s' in data center '%s' (Status: %s)." %
		      (sd_iso.get_name(), dc.get_name, sd_iso.get_status().get_state())
    except Exception as ex:
        print "Activating ISO storage domain in data center failed: %s." % ex

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

activate 要求が成功した場合は、スクリプトにより以下のような出力が表示されます。

Activated data storage domain 'data1' in data center 'Default' (Status: active).
Activated ISO storage domain 'iso1' in data center 'Default' (Status: active).
Copy to Clipboard Toggle word wrap

status には、ストレージドメインがアクティブ化されたことが表示される点に注意してください。

2.13. 例: Python を使用した仮想マシンの作成

仮想マシンを作成するには、いくつかの手順を実行する必要があります。第 1 のステップ (以下に説明) は、仮想マシンオブジェクト自体を作成する手順です。

例2.12 Python を使用した仮想マシンの作成

以下の Python の例は、vm1 という名前の仮想マシンを作成します。この仮想マシンの要件は以下のとおりです。

  • 512 MB のメモリーが割り当てられていること (バイト単位で表示)。

    vm_memory = 512 * 1024 * 1024
    Copy to Clipboard Toggle word wrap
  • Default クラスターにアタッチされ、その結果 Default データセンターにもアタッチされていること。

    vm_cluster = api.clusters.get(name="Default")
    Copy to Clipboard Toggle word wrap
  • デフォルトの Blank テンプレートをベースとしていること。

    vm_template = api.templates.get(name="Blank")
    Copy to Clipboard Toggle word wrap
  • 仮想ハードディスクドライブから起動すること。

    vm_os = params.OperatingSystem(boot=[params.Boot(dev="hd")])
    Copy to Clipboard Toggle word wrap

    上記のオプションは、vms コレクションの add メソッドを使用して仮想マシン自体を作成する前に、仮想マシンパラメーターオブジェクトに組み込みます。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    vm_name = "vm1"
    vm_memory = 512 * 1024 * 1024
    vm_cluster = api.clusters.get(name="Default")
    vm_template = api.templates.get(name="Blank")
    vm_os = params.OperatingSystem(boot=[params.Boot(dev="hd")])

    vm_params = params.VM(name=vm_name,
                         memory=vm_memory,
                         cluster=vm_cluster,
                         template=vm_template,
                         os=vm_os)

    try:
        api.vms.add(vm=vm_params)
        print "Virtual machine '%s' added." % vm_name
    except Exception as ex:
        print "Adding virtual machine '%s' failed: %s" % (vm_name, ex)

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。

Virtual machine 'vm1' added.
Copy to Clipboard Toggle word wrap

2.14. 例: Python を使用した仮想マシン NIC の作成

新規作成した仮想マシンが確実にネットワークにアクセスできるようにするには、仮想 NIC を作成してアタッチする必要があります。

例2.13 Python を使用した仮想マシン NIC の作成

以下の Python の例は、nic1 という名前の NIC を作成し、vm1 という名前の仮想マシンにアタッチします。この例の NIC は以下の条件を満たしている必要があります。

  • virtio ネットワークデバイスであること。

    nic_interface = "virtio"
    Copy to Clipboard Toggle word wrap
  • ovirtmgmt 管理ネットワークにリンクされていること。

    nic_network = api.networks.get(name="ovirtmgmt")
    Copy to Clipboard Toggle word wrap

    上記のオプションは、仮想マシンの nics コレクションの add メソッドを使用して NIC を作成する前に、NIC パラメーターオブジェクトに組み込みます。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    vm = api.vms.get(name="vm1")

    nic_name = "nic1"
    nic_interface = "virtio"
    nic_network = api.networks.get(name="ovirtmgmt")

    nic_params = params.NIC(name=nic_name, interface=nic_interface, network=nic_network)

    try:
        nic = vm.nics.add(nic_params)
        print "Network interface '%s' added to '%s'." % (nic.get_name(), vm.get_name())
    except Exception as ex:
        print "Adding network interface to '%s' failed: %s" % (vm.get_name(), ex)

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。

Network interface 'nic1' added to 'vm1'.
Copy to Clipboard Toggle word wrap

2.15. 例: Python を使用した仮想マシンのストレージディスクの作成

新規作成した仮想マシンが永続的なストレージに確実にアクセスできるようにするには、ディスクを作成してアタッチする必要があります。

例2.14 Python を使用した仮想マシンストレージの作成

以下の Python の例は、8 GB の virtio ディスクドライブを作成し、vm1 という名前の仮想マシンにアタッチします。この例のディスクは、以下の条件を満たしている必要があります。

  • data1 という名前のストレージドメイン上に格納されること。

    disk_storage_domain = params.StorageDomains(storage_domain=[api.storagedomains.get(name="data1")])
    Copy to Clipboard Toggle word wrap
  • サイズは 8 GB とすること。

    disk_size = 8*1024*1024
    Copy to Clipboard Toggle word wrap
  • ディスクタイプは、(data ではなく) system タイプであること。

    disk_type = "system"
    Copy to Clipboard Toggle word wrap
  • virtio ストレージデバイスであること。

    disk_interface = "virtio"
    Copy to Clipboard Toggle word wrap
  • cow フォーマットで格納されること。

    disk_format = "cow"
    Copy to Clipboard Toggle word wrap
  • 使用可能なブートデバイスとしてマークされること。

    disk_bootable = True
    Copy to Clipboard Toggle word wrap

    上記のオプションは、仮想マシンの disks コレクションの add メソッドを使用してディスク自体を作成する前に、ディスクパラメーターオブジェクトに組み込みます。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    vm = api.vms.get(name="vm1")

    sd = params.StorageDomains(storage_domain=[api.storagedomains.get(name="data1")])
    disk_size = 8*1024*1024
    disk_type = "system"
    disk_interface = "virtio"
    disk_format = "cow"
    disk_bootable = True

    disk_params = params.Disk(storage_domains=sd,
                              size=disk_size,
                              type_=disk_type,
                              interface=disk_interface,
                              format=disk_format,
                              bootable=disk_bootable)

    try:
        d = vm.disks.add(disk_params)
        print "Disk '%s' added to '%s'." % (d.get_name(), vm.get_name())
    except Exception as ex:
        print "Adding disk to '%s' failed: %s" % (vm.get_name(), ex)

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。

Disk 'vm1_Disk1' added to 'vm1'.
Copy to Clipboard Toggle word wrap

2.16. 例: Python を使用した仮想マシンへの ISO イメージのアタッチ

新規作成した仮想マシンにゲストオペレーティングシステムのインストールを開始するには、オペレーティングシステムのインストールメディアを格納した ISO ファイルをアタッチする必要があります。

例2.15 ISO イメージの特定

ISO イメージは、ISO ストレージドメインにアタッチされた files コレクション内にあります。以下の例は、ISO ストレージドメイン上の files コレクションのコンテンツを一覧表示します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API(url="https://_HOST_",
              username="_USER_@_DOMAIN_",
              password="_PASS_",
              ca_file="_ca.crt_")

    sd = api.storagedomains.get(name="iso1")
    iso = sd.files.list()

    for i in iso:
        print "%s" % i.get_name()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

成功した場合には、スクリプトにより、files コレクション内のファイルごとに以下の例のようなエントリーが出力されます。

RHEL6.3-Server-x86_64-DVD1.iso
Copy to Clipboard Toggle word wrap

ISO ドメイン上のファイルには必ず一意名が付けられるため、ファイルの id および name 属性が共有される点に注意してください。

例2.16 Python を使用した仮想マシンへの ISO イメージのアタッチ

以下の Python の例では、RHEL6.3-Server-x86_64-DVD1.iso の ISO イメージファイルを vm1 仮想マシンにアタッチします。イメージファイルを特定し、仮想マシンの cdroms コレクションの add メソッドを使用してアタッチします。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API(url="https://_HOST_",
              username="_USER_@_DOMAIN_",
              password="_PASS_,
              ca_file="_ca.crt_")

    sd = api.storagedomains.get(name="iso1")

    cd_iso = sd.files.get(name="RHEL6.3-Server-x86_64-DVD1.iso")
    cd_vm = api.vms.get(name="vm1")
    cd_params = params.CdRom(file=cd_iso)

    try:
        cd_vm.cdroms.add(cd_params)
        print "Attached CD to '%s'." % cd_vm.get_name()
    except Exception as ex:
        print "Failed to attach CD to '%s': %s" % (cd_vm.get_name(), ex)

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。

Attached CD to 'vm1'.
Copy to Clipboard Toggle word wrap
注記

上記の例は、ステータスが Down の仮想マシンに ISO をアタッチするための手順です。ステータスが Up の仮想マシンに ISO をアタッチするには、第 2 の try ステートメントを以下のように変更してください。

try:
	cdrom=cd_vm.cdroms.get(id="_00000000-0000-0000-0000-000000000000_")
	cdrom.set_file(_cd_iso_)
	cdrom.update(current=True)
	print "Attached CD to '%s'." % cd_vm.get_name()
except:
	print "Failed to attach CD to '%s': %s" % (cd_vm.get_name(), ex)
Copy to Clipboard Toggle word wrap

例2.17 Python を使用する、仮想マシンからの CD-ROM の取り出し

仮想マシンの cdrom コレクションから ISO を取り出します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API(url="https://_HOST_",
              username="_USER_@_DOMAIN_",
              password="_PASS_,
              ca_file="_ca.crt_")

    sd = api.storagedomains.get(name="iso1")
    vm = api.vms.get(name="vm1")

    try:
        vm.cdroms.get(id="00000000-0000-0000-0000-000000000000").delete()
        print "Removed CD from '%s'." % vm.get_name()
    except Exception as ex:
        print "Failed to remove CD from '%s': %s" % (vm.get_name(), ex)

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

2.17. 例: Python を使用したディスクのデタッチ

Python ソフトウェア開発キットを使用して、仮想マシンから仮想ディスクをデタッチすることができます。

例2.18 Python を使用したディスクのデタッチ

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API(url="https://_HOST_",
              username="_USER_@_DOMAIN_",
              password="_PASS_",
              ca_file="_ca.crt_")

    vm = api.vms.get(name="VM_NAME")
    disk = vm.disks.get(name="DISK_NAME")

    detach = params.Action(detach=True)
    disk.delete(action=detach)

    print "Detached disk %s successfully!" % disk

    api.disconnect()

except Exception as ex:
    print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

2.18. 例: Python を使用した仮想マシンの起動

仮想マシンを起動します。

例2.19 Python を使用した仮想マシンの起動

以下の例では、start メソッドを使用して仮想マシンを起動します。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    vm = api.vms.get(name="vm1")

    try:
        vm.start()
        print "Started '%s'." % vm.get_name()
    except Exception as ex:
        print "Unable to start '%s': %s" % (vm.get_name(), ex)

    api.disconnect()

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

start 要求が成功した場合は、スクリプトによって以下のような出力が表示されます。

Started 'vm1'.
Copy to Clipboard Toggle word wrap

status には、仮想マシンが起動して up の状態となったことが表示される点に注意してください。

2.19. 例: Python を使用した上書きパラメーターでの仮想マシンの起動

上書きパラメーターで仮想マシンを起動します。

例2.20 Python を使用した上書きパラメーターでの仮想マシンの起動

以下の例では、Windows ISO を使用して仮想マシンをブートして、Windows ドライバーを含む virtio-win_x86.vfd フロッピーディスクをアタッチします。このアクションは、管理ポータルまたはユーザーポータルで 1 回実行ウィンドウを使用して仮想マシンを起動するのと同じです。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")
except Exception as ex:
    print "Failed to connect to API: %s" % ex


try:
    vm = api.vms.get(name="Win_machine")
except Exception as ex:
    print "Failed to retrieve VM: %s" % ex

cdrom = params.CdRom(file=params.File(id="windows_example.iso"))
floppy = params.Floppy(file=params.File(id="virtio-win_x86.vfd"))
try:
    vm.start(
      action=params.Action(
        vm=params.VM(
          os=params.OperatingSystem(
            boot=[params.Boot(dev="cdrom")]
          ),
          cdroms=params.CdRoms(cdrom=[cdrom]),
          floppies=params.Floppies(floppy=[floppy])
        )
      )
    )
except Exception as ex:
    print "Failed to start VM: %s" % ex
Copy to Clipboard Toggle word wrap
注記

CD イメージとフロッピーディスクファイルはすでに ISO ドメインで利用できる状態でなければなりません。まだ用意されていない場合は、ISO アップローダーを使用してこれらのファイルをアップロードしてください。詳しい情報は「ISO アップローダーツール」を参照してください。

2.20. 例: Python を使用した Cloud-Init での仮想マシンの起動

Python を使用して Cloud-Init で仮想マシンを起動します。

例2.21 Python を使用した Cloud-Init での仮想マシンの起動

以下の例では、Cloud-Init ツールを使用して仮想マシンを起動し、etho0 インターフェースの静的 IP ホスト名を設定する方法を示しています。

from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")
except Exception as ex:
    print "Failed to connect to API: %s" % ex


try:
    vm = api.vms.get(name="_MyVM_")
except Exception as ex:
    print "Failed to retrieve VM: %s" % ex

try:
    vm.start(
      action=params.Action(
        vm=params.VM(
          initialization=params.Initialization(
            cloud_init=params.CloudInit(
              host=params.Host(address="_MyHost.example.com_"),
          network_configuration=params.NetworkConfiguration(
            nics=params.Nics(
              nic=[params.NIC(
                name="_eth0_",
                boot_protocol="_static_",
                on_boot=_True_,
                network=params.Network(
                  ip=params.IP(
                    address="_10.10.10.1_",
                    netmask="_255.255.255.0_",
                    gateway="_10.10.10.1_"
                              )
                            )
                          )
                        ]
                       )
                     )
                    )
                  )
                 )
               )
              )
except Exception as ex:
    print "Failed to start VM: %s" % ex
Copy to Clipboard Toggle word wrap

2.21. 例: Python を使用したシステムイベントのチェック

Red Hat Virtualization Manager は、多くのシステムイベントを記録およびログ記録します。これらのイベントログには、ユーザーインターフェース、システムログファイル、および API を使用してアクセスできます。ovirtsdk ライブラリーは、events コレクションを使用してイベントを公開します。

例2.22 Python を使用したシステムイベントのチェック

以下の例では、events コレクションがリストされます。次の点に注意してください。

  • 利用可能なすべての結果ページが返されるようにするために、list メソッドの query パラメーターを使用しています。デフォルトでは、list メソッドは長さが最大 100 のレコードにデフォルト設定される結果の最初のページのみを返します。
  • イベントが発生した順に出力に示されるよう、結果となるリストは逆順にソートされます。
from ovirtsdk.api import API
from ovirtsdk.xml import params

try:
    api = API (url="https://_HOST_",
               username="_USER_@_DOMAIN_",
               password="_PASS_",
               ca_file="_ca.crt_")

    event_list = []
    event_page_index = 1
    event_page_current = api.events.list(query="page %s" % event_page_index)

    while(len(event_page_current) != 0):
        event_list = event_list + event_page_current
        event_page_index = event_page_index + 1
		try:
            event_page_current = api.events.list(query="page %s" % event_page_index)
	    except Exception as ex:
		    print "Error retrieving page %s of list: %s" % (event_page_index, ex)

    event_list.reverse()

    for event in event_list:
        print "%s %s CODE %s - %s" % (event.get_time(),
                                      event.get_severity().upper(),
                                      event.get_code(),
                                      event.get_description())

except Exception as ex:
print "Unexpected error: %s" % ex
Copy to Clipboard Toggle word wrap

このスクリプトの出力は以下のようになります。ただし、環境の状態によってイベントが異なります。

2012-09-25T18:40:10.065-04:00 NORMAL CODE 30 - User admin@internal logged in.
2012-09-25T18:40:10.368-04:00 NORMAL CODE 153 - VM vm1 was started by admin@internal (Host: Atlantic).
2012-09-25T18:40:10.470-04:00 NORMAL CODE 30 - User admin@internal logged in.
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat