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:
...