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