2.3. 使用类型

ovirtsdk4.types 模块中的类是纯数据容器。它们没有任何逻辑或操作。可以在 处创建和修改类型的实例。

创建或修改实例不会影响服务器端,除非通过以下其中一个服务方法明确传递了调用。服务器端的更改不会自动反映在内存中已存在的实例。

这些类的构造器具有多个可选参数,各自对应于 type 的各个属性。这是为了使用嵌套调用多个构造器来简化对象的创建。这个示例创建虚拟机实例,指定其集群名称、模板和内存,以字节为单位:

from ovirtsdk4 import types

vm = types.Vm(
    name='vm1',
    cluster=types.Cluster(
        name='Default'
    ),
    template=types.Template(
        name='mytemplate'
    ),
    memory=1073741824
)

建议以这种方式使用构造者,但不强制要求。您还可以在调用中不使用任何参数创建实例,并逐步填充对象步骤、使用 setter 或同时使用这两种方法的组合来填充对象:

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(...),
        ...
    ]
)

在 Python 中以枚举值的形式定义的属性将作为 enum 实施,使用 Python 3 中的 enum 和 Python 2.7 中的 enum34 软件包的本地支持。在本例中,Vm 类型的 status 属性使用 VmStatus enum 来定义:

if vm.status == types.VmStatus.DOWN:
    ...
elif vm.status == types.VmStatus.IMAGE_LOCKED:
    ....
注意

在 API 规格中,enum 类型的值显示在小写中,因为这是用于 XML 和 JSON 什么。但是,Python 惯例是大写 枚举 值。

读取类型实例的属性是使用对应属性完成的:

print("vm.name: %s" % vm.name)
print("vm.memory: %s" % vm.memory)
for custom_property in vm.custom_properties:
    ...