2.3. タイプの使用
ovirtsdk4.types
モジュールのクラスは、純粋なデータコンテナーです。ロジックや操作は含まれません。タイプのインスタンスは、自由に作成および変更できます。
インスタンスの作成または変更は、以下で説明するサービスメソッドのいずれかを呼び出して変更が明示的に渡されない限り、サーバー側に影響を与えません。サーバー側での変更は、すでにメモリーに存在するインスタンスに自動的に反映されません。
これらのクラスのコンストラクターには、オプションの引数が複数 (タイプの属性ごとに 1 つずつ) あります。これは、複数のコンストラクターへのネストされた呼び出しを使用して、オブジェクトの作成を簡素化することを目的としています。この例では、仮想マシンのインスタンスを作成し、クラスター名、テンプレート、およびメモリーをバイト単位で指定します。
from ovirtsdk4 import types vm = types.Vm( name='vm1', cluster=types.Cluster( name='Default' ), template=types.Template( name='mytemplate' ), memory=1073741824 )
このようにコンストラクターを使用することをお勧めしますが、必須ではありません。コンストラクターの呼び出しでインスタンスを引数を指定せずに作成し、セッターを使用してオブジェクトを段階的に設定することも、両方のアプローチを組み合わせて使用することも可能です。
vm = types.Vm() vm.name = 'vm1' vm.cluster = types.Cluster(name='Default') vm.template = types.Template(name='mytemplate') vm.memory=1073741824
API の仕様でオブジェクトのリストとして定義されている属性は、Python リストとして実装されます。たとえば、Vm
タイプの custom_properties
属性は、CustomProperty
タイプのオブジェクトのリストとして定義されます。SDK で属性が使用されている場合、それらは Python リストです。
vm = types.Vm( name='vm1', custom_properties=[ types.CustomProperty(...), types.CustomProperty(...), ... ] )
API で列挙値として定義されている属性は、Python では enum
として実装され、Python 3 では enums
のネイティブサポート、Python 2.7 では enum34
パッケージのネイティブサポートを使用して実装されます。この例では、Vm
タイプのステータス属性は VmStatus enum
を使用して定義されています。
if vm.status == types.VmStatus.DOWN: ... elif vm.status == types.VmStatus.IMAGE_LOCKED: ....
API 仕様では、XML と JSON に使用されるため、enum
タイプの値は小文字で表示されます。しかし、Python の規則では enum
値は大文字になります。
タイプのインスタンスの属性の読み取りは、対応するプロパティーを使用して行われます。
print("vm.name: %s" % vm.name) print("vm.memory: %s" % vm.memory) for custom_property in vm.custom_properties: ...