第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
$ pydoc ovirtsdk.infrastructure.errors
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 クラスのコンストラクターは、他のパラメーターをサポートしますが、以下の例では、必須パラメーターのみを指定しています。
接続試行が成功した場合には、次の例のような出力が表示されます。
Connected to Red Hat Virtualization Manager successfully!
Connected to Red Hat Virtualization Manager successfully!
2.3. 例: Python を使用したデータセンターコレクションの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
API クラスは、datacenters という名前のデータセンターコレクションへのアクセスを提供します。このコレクションには、環境内の全データセンターが含まれます。
例2.2 Python を使用したデータセンターコレクションの一覧表示
以下の Python の例は、datacenters コレクション内のデータセンターを一覧表示します。また、コレクション内の各データセンターの基本的な情報も出力します。
Default データセンターのみが存在する環境で、そのデータセンターがアクティブ化されていない場合は、次の例のような出力が表示されます。
Default (d8b74b20-c6e1-11e1-87a3-00163e77e2ed)
Default (d8b74b20-c6e1-11e1-87a3-00163e77e2ed)
2.4. 例: Python を使用したクラスターコレクションの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
API クラスは、clusters という名前のクラスターコレクションを提供します。このコレクションには、環境内の全クラスターが含まれます。
例2.3 Python を使用したクラスターコレクションの一覧表示
以下の Python の例は、clusters コレクション内のクラスターを一覧表示します。また、コレクション内の各クラスターの基本的な情報も出力します。
Default クラスターのみが存在する環境の場合は、次の例のような出力が表示されます。
Default (99408929-82cf-4dc7-a532-9d998063fa95)
Default (99408929-82cf-4dc7-a532-9d998063fa95)
2.5. 例: Python を使用した論理ネットワークコレクションの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
API クラスは、networks という名前の論理ネットワークへのアクセスを提供します。このコレクションには、環境内の全論理ネットワークが含まれます。
例2.4 Python を使用した論理ネットワークコレクションの一覧表示
以下の Python の例は、networks コレクション内の論理ネットワークを一覧表示します。また、コレクション内の各ネットワークの基本的な情報も出力します。
デフォルトの管理ネットワークのみが存在する環境の場合は、次の例のような出力が表示されます。
ovirtmgmt (00000000-0000-0000-0000-000000000009)
ovirtmgmt (00000000-0000-0000-0000-000000000009)
2.6. 例: Python を使用したホストコレクションの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
API クラスは、hosts という名前のホストコレクションへのアクセスを提供します。このコレクションには、環境内の全ホストが含まれます。
例2.5 Python を使用したホストコレクションの一覧表示
以下の Python の例は、hosts コレクション内のホストを一覧表示します。
Atlantic という名前のホストが 1 台のみアタッチされた環境では、次のような出力が表示されます。
Atlantic (5b333c18-f224-11e1-9bdd-00163e77e2ed)
Atlantic (5b333c18-f224-11e1-9bdd-00163e77e2ed)
2.7. 例: ISO ストレージドメインの ISO ファイルの表示 リンクのコピーリンクがクリップボードにコピーされました!
API クラスは storagedomains という名前のストレージドメインコレクションへのアクセスを提供します。同様に、このコレクションには、ストレージドメイン内のファイルを記述する files コレクションが含まれています。
例2.6 ISO ストレージドメインの ISO ファイルの表示
この Python の例は、Red Hat Virtualization 環境内の各 ISO ストレージドメイン内にある ISO ファイルを一覧で出力します。
2.8. 例: 仮想マシンのサイズの表示 リンクのコピーリンクがクリップボードにコピーされました!
API クラスは、vms という名前の仮想マシンコレクションへのアクセスを提供します。同様に、このコレクションには仮想マシンにアタッチされた各ディスクの詳細を記述する disks コレクションが含まれています。
例2.7 仮想マシンのサイズの表示
以下の Python の例は、Red Hat Virtualization 環境の仮想マシンとその合計ディスクサイズ (バイト単位) を一覧で出力します。
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 ストレージドメイン追加は以下のような手順で行います。
datacentersコレクションのgetメソッドを使用して、ストレージをアタッチする必要のあるデータセンターを特定します。dc = api.datacenters.get(name="Default")
dc = api.datacenters.get(name="Default")Copy to Clipboard Copied! Toggle word wrap Toggle overflow hostsコレクションのgetメソッドを使用して、ストレージのアタッチに使用する必要のあるホストを特定します。h = api.hosts.get(name="Atlantic")
h = api.hosts.get(name="Atlantic")Copy to Clipboard Copied! Toggle word wrap Toggle overflow NFS ストレージドメインの
Storageパラメーターを定義します。以下の例では、NFS の場所に192.0.43.10/storage/dataを使用しています。s = params.Storage(address="192.0.43.10", path="/storage/data", type_="nfs")
s = params.Storage(address="192.0.43.10", path="/storage/data", type_="nfs")Copy to Clipboard Copied! Toggle word wrap Toggle overflow storagedomainsコレクションのaddメソッドを使用して、ストレージドメイン作成を要求します。Storageパラメーターに加えて、以下の情報をすべて渡す必要があります。- ストレージドメインの名前
-
datacentersコレクションから取得したデータセンターオブジェクト -
hostsコレクションから取得したホストオブジェクト -
追加するストレージドメインのタイプ (
data、iso、またはexport) -
使用するストレージフォーマット (
v1、v2、またはv3)
これらの手順を組み合わせた完全なスクリプトは以下のようになります。
add メソッド呼び出しが成功した場合は、スクリプトによって以下のような出力が表示されます。
Storage Domain 'data1' added (bd954c03-d180-4d16-878c-2aedbdede566).
Storage Domain 'data1' added (bd954c03-d180-4d16-878c-2aedbdede566).
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 ストレージドメイン追加は以下のような手順で行います。
datacentersコレクションのgetメソッドを使用して、ストレージをアタッチする必要のあるデータセンターを特定します。dc = api.datacenters.get( name="Default" )
dc = api.datacenters.get( name="Default" )Copy to Clipboard Copied! Toggle word wrap Toggle overflow hostsコレクションのgetメソッドを使用して、ストレージのアタッチに使用する必要のあるホストを特定します。h = api.hosts.get(name="Atlantic")
h = api.hosts.get(name="Atlantic")Copy to Clipboard Copied! Toggle word wrap Toggle overflow NFS ストレージドメインの
Storageパラメーターを定義します。以下の例では、NFS の場所に192.0.43.10/storage/isoを使用しています。s = params.Storage(address="192.0.43.10", path="/storage/iso", type_="nfs")
s = params.Storage(address="192.0.43.10", path="/storage/iso", type_="nfs")Copy to Clipboard Copied! Toggle word wrap Toggle overflow storagedomainsコレクションのaddメソッドを使用して、ストレージドメイン作成を要求します。Storageパラメーターに加えて、以下の情報をすべて渡す必要があります。- ストレージドメインの名前
-
datacentersコレクションから取得したデータセンターオブジェクト -
hostsコレクションから取得したホストオブジェクト -
追加するストレージドメインのタイプ (
data、iso、またはexport) -
使用するストレージフォーマット (
v1、v2、またはv3)
これらの手順を組み合わせた完全なスクリプトは以下のようになります。
add メソッド呼び出しが成功した場合は、スクリプトによって以下のような出力が表示されます。
Storage Domain 'iso1' added (789814a7-7b90-4a39-a1fd-f6a98cc915d8).
Storage Domain 'iso1' added (789814a7-7b90-4a39-a1fd-f6a98cc915d8).
2.11. 例: Python を使用したデータセンターへのストレージドメインのアタッチ リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Virtualization にストレージドメインを追加した後には、データセンターにアタッチしてアクティブ化し、使用できる状態にする必要があります。
例2.10 Python を使用した、データセンターへのストレージドメインのアタッチ
この Python の例は、data1 という名前のデータストレージドメインと、iso1 という名前の ISO ストレージドメインを default データセンターにアタッチします。アタッチのアクションは、データセンターの storagedomains コレクションの add メソッドを使用して実行されます。
add メソッドの呼び出しが成功した場合は、スクリプトによって以下のような出力が表示されます。
Attached data storage domain 'data1' to data center 'Default' (Status: maintenance). Attached ISO storage domain 'iso1' to data center 'Default' (Status: maintenance).
Attached data storage domain 'data1' to data center 'Default' (Status: maintenance).
Attached ISO storage domain 'iso1' to data center 'Default' (Status: maintenance).
status には、ストレージドメインのアクティブ化がまだ必要であることが表示される点に注意してください。
2.12. 例: Python を使用したストレージドメインのアクティブ化 リンクのコピーリンクがクリップボードにコピーされました!
ストレージドメインを Red Hat Virtualization に追加してデータセンターにアタッチした後には、それらのストレージドメインをアクティブ化して使用できる状態にする必要があります。
例2.11 Python を使用したストレージドメインのアクティブ化
以下の Python の例は、data1 という名前のデータストレージドメインおよび iso1 という名前の ISO ストレージドメインをアクティブ化します。これらのストレージドメインはいずれも Default データセンターにアタッチされています。アクティブ化のアクションは、ストレージドメインの activate メソッドを使用して実行されます。
activate 要求が成功した場合は、スクリプトにより以下のような出力が表示されます。
Activated data storage domain 'data1' in data center 'Default' (Status: active). Activated ISO storage domain 'iso1' in data center 'Default' (Status: active).
Activated data storage domain 'data1' in data center 'Default' (Status: active).
Activated ISO storage domain 'iso1' in data center 'Default' (Status: active).
status には、ストレージドメインがアクティブ化されたことが表示される点に注意してください。
2.13. 例: Python を使用した仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンを作成するには、いくつかの手順を実行する必要があります。第 1 のステップ (以下に説明) は、仮想マシンオブジェクト自体を作成する手順です。
例2.12 Python を使用した仮想マシンの作成
以下の Python の例は、vm1 という名前の仮想マシンを作成します。この仮想マシンの要件は以下のとおりです。
512 MB のメモリーが割り当てられていること (バイト単位で表示)。
vm_memory = 512 * 1024 * 1024
vm_memory = 512 * 1024 * 1024Copy to Clipboard Copied! Toggle word wrap Toggle overflow Defaultクラスターにアタッチされ、その結果Defaultデータセンターにもアタッチされていること。vm_cluster = api.clusters.get(name="Default")
vm_cluster = api.clusters.get(name="Default")Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの
Blankテンプレートをベースとしていること。vm_template = api.templates.get(name="Blank")
vm_template = api.templates.get(name="Blank")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仮想ハードディスクドライブから起動すること。
vm_os = params.OperatingSystem(boot=[params.Boot(dev="hd")])
vm_os = params.OperatingSystem(boot=[params.Boot(dev="hd")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のオプションは、
vmsコレクションのaddメソッドを使用して仮想マシン自体を作成する前に、仮想マシンパラメーターオブジェクトに組み込みます。
add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。
Virtual machine 'vm1' added.
Virtual machine 'vm1' added.
2.14. 例: Python を使用した仮想マシン NIC の作成 リンクのコピーリンクがクリップボードにコピーされました!
新規作成した仮想マシンが確実にネットワークにアクセスできるようにするには、仮想 NIC を作成してアタッチする必要があります。
例2.13 Python を使用した仮想マシン NIC の作成
以下の Python の例は、nic1 という名前の NIC を作成し、vm1 という名前の仮想マシンにアタッチします。この例の NIC は以下の条件を満たしている必要があります。
virtioネットワークデバイスであること。nic_interface = "virtio"
nic_interface = "virtio"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovirtmgmt管理ネットワークにリンクされていること。nic_network = api.networks.get(name="ovirtmgmt")
nic_network = api.networks.get(name="ovirtmgmt")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のオプションは、仮想マシンの
nicsコレクションのaddメソッドを使用して NIC を作成する前に、NIC パラメーターオブジェクトに組み込みます。
add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。
Network interface 'nic1' added to 'vm1'.
Network interface 'nic1' added to 'vm1'.
2.15. 例: Python を使用した仮想マシンのストレージディスクの作成 リンクのコピーリンクがクリップボードにコピーされました!
新規作成した仮想マシンが永続的なストレージに確実にアクセスできるようにするには、ディスクを作成してアタッチする必要があります。
例2.14 Python を使用した仮想マシンストレージの作成
以下の Python の例は、8 GB の virtio ディスクドライブを作成し、vm1 という名前の仮想マシンにアタッチします。この例のディスクは、以下の条件を満たしている必要があります。
data1という名前のストレージドメイン上に格納されること。disk_storage_domain = params.StorageDomains(storage_domain=[api.storagedomains.get(name="data1")])
disk_storage_domain = params.StorageDomains(storage_domain=[api.storagedomains.get(name="data1")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow サイズは 8 GB とすること。
disk_size = 8*1024*1024
disk_size = 8*1024*1024Copy to Clipboard Copied! Toggle word wrap Toggle overflow ディスクタイプは、(
dataではなく)systemタイプであること。disk_type = "system"
disk_type = "system"Copy to Clipboard Copied! Toggle word wrap Toggle overflow virtioストレージデバイスであること。disk_interface = "virtio"
disk_interface = "virtio"Copy to Clipboard Copied! Toggle word wrap Toggle overflow cowフォーマットで格納されること。disk_format = "cow"
disk_format = "cow"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用可能なブートデバイスとしてマークされること。
disk_bootable = True
disk_bootable = TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のオプションは、仮想マシンの
disksコレクションのaddメソッドを使用してディスク自体を作成する前に、ディスクパラメーターオブジェクトに組み込みます。
add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。
Disk 'vm1_Disk1' added to 'vm1'.
Disk 'vm1_Disk1' added to 'vm1'.
2.16. 例: Python を使用した仮想マシンへの ISO イメージのアタッチ リンクのコピーリンクがクリップボードにコピーされました!
新規作成した仮想マシンにゲストオペレーティングシステムのインストールを開始するには、オペレーティングシステムのインストールメディアを格納した ISO ファイルをアタッチする必要があります。
例2.15 ISO イメージの特定
ISO イメージは、ISO ストレージドメインにアタッチされた files コレクション内にあります。以下の例は、ISO ストレージドメイン上の files コレクションのコンテンツを一覧表示します。
成功した場合には、スクリプトにより、files コレクション内のファイルごとに以下の例のようなエントリーが出力されます。
RHEL6.3-Server-x86_64-DVD1.iso
RHEL6.3-Server-x86_64-DVD1.iso
ISO ドメイン上のファイルには必ず一意名が付けられるため、ファイルの id および name 属性が共有される点に注意してください。
例2.16 Python を使用した仮想マシンへの ISO イメージのアタッチ
以下の Python の例では、RHEL6.3-Server-x86_64-DVD1.iso の ISO イメージファイルを vm1 仮想マシンにアタッチします。イメージファイルを特定し、仮想マシンの cdroms コレクションの add メソッドを使用してアタッチします。
add 要求が成功した場合には、スクリプトにより以下のような出力が表示されます。
Attached CD to 'vm1'.
Attached CD to 'vm1'.
上記の例は、ステータスが Down の仮想マシンに ISO をアタッチするための手順です。ステータスが Up の仮想マシンに ISO をアタッチするには、第 2 の try ステートメントを以下のように変更してください。
例2.17 Python を使用する、仮想マシンからの CD-ROM の取り出し
仮想マシンの cdrom コレクションから ISO を取り出します。
2.17. 例: Python を使用したディスクのデタッチ リンクのコピーリンクがクリップボードにコピーされました!
Python ソフトウェア開発キットを使用して、仮想マシンから仮想ディスクをデタッチすることができます。
例2.18 Python を使用したディスクのデタッチ
2.18. 例: Python を使用した仮想マシンの起動 リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンを起動します。
例2.19 Python を使用した仮想マシンの起動
以下の例では、start メソッドを使用して仮想マシンを起動します。
start 要求が成功した場合は、スクリプトによって以下のような出力が表示されます。
Started 'vm1'.
Started 'vm1'.
status には、仮想マシンが起動して up の状態となったことが表示される点に注意してください。
2.19. 例: Python を使用した上書きパラメーターでの仮想マシンの起動 リンクのコピーリンクがクリップボードにコピーされました!
上書きパラメーターで仮想マシンを起動します。
例2.20 Python を使用した上書きパラメーターでの仮想マシンの起動
以下の例では、Windows ISO を使用して仮想マシンをブートして、Windows ドライバーを含む virtio-win_x86.vfd フロッピーディスクをアタッチします。このアクションは、管理ポータルまたはユーザーポータルで 1 回実行ウィンドウを使用して仮想マシンを起動するのと同じです。
CD イメージとフロッピーディスクファイルはすでに ISO ドメインで利用できる状態でなければなりません。まだ用意されていない場合は、ISO アップローダーを使用してこれらのファイルをアップロードしてください。詳しい情報は「ISO アップローダーツール」を参照してください。
2.20. 例: Python を使用した Cloud-Init での仮想マシンの起動 リンクのコピーリンクがクリップボードにコピーされました!
Python を使用して Cloud-Init で仮想マシンを起動します。
例2.21 Python を使用した Cloud-Init での仮想マシンの起動
以下の例では、Cloud-Init ツールを使用して仮想マシンを起動し、etho0 インターフェースの静的 IP ホスト名を設定する方法を示しています。
2.21. 例: Python を使用したシステムイベントのチェック リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Virtualization Manager は、多くのシステムイベントを記録およびログ記録します。これらのイベントログには、ユーザーインターフェース、システムログファイル、および API を使用してアクセスできます。ovirtsdk ライブラリーは、events コレクションを使用してイベントを公開します。
例2.22 Python を使用したシステムイベントのチェック
以下の例では、events コレクションがリストされます。次の点に注意してください。
-
利用可能なすべての結果ページが返されるようにするために、
listメソッドのqueryパラメーターを使用しています。デフォルトでは、listメソッドは長さが最大100のレコードにデフォルト設定される結果の最初のページのみを返します。 - イベントが発生した順に出力に示されるよう、結果となるリストは逆順にソートされます。
このスクリプトの出力は以下のようになります。ただし、環境の状態によってイベントが異なります。
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.
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.