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