2.2. 类型
2.2.1. 创建和修改类型实例
创建或修改类型的实例对服务器端没有任何影响,除非更改被明确发送到服务器调用服务方法,如下所述。服务器端的更改不会自动反映在内存中已存在的实例。
这些类的构造器具有多个可选参数,各自对应于 type 的各个属性。这简化了对象的创建,使用嵌套的调用来处理多个构造器。
在以下示例中,将创建虚拟机的实例及其属性(cluster、template 和 memory):
使用属性创建虚拟机实例
vm = OvirtSDK4::Vm.new( name: 'myvm', cluster: OvirtSDK4::Cluster.new( name: 'mycluster' ), template: OvirtSDK4::Template.new( name: 'mytemplate' ), memory: 1073741824 )
传递给这些构造器的哈希(例如 :OvirtSDK4::Cluster.new
)将被递归处理。
在以下示例中,使用普通哈希而不是显式为 Cluster 和 Template 类调用构造器。SDK 在内部将哈希值转换为所需的类。
创建机器实例,带有显示为 Plain Hashs 的属性
vm = OvirtSDK4::Vm.new( name: 'myvm', cluster: { name: 'mycluster' }, template: { name: 'mytemplate' }, memory: 1073741824 )
建议以这种方式使用构造器,但不强制要求。
在以下示例中,会创建一个虚拟机实例,它调用中没有参数到构造者。您可以使用 setter 或使用 setter 和 constructors 的组合来逐一添加虚拟机实例的属性。
独立创建虚拟机实例和添加属性
vm = OvirtSDK4::Vm.new vm.name = 'myvm' vm.cluster = OvirtSDK4::Cluster.new(name: 'mycluster') vm.template = OvirtSDK4::Template.new(name: 'mytemplate') vm.memory = 1073741824
在 API 规格中定义为对象列表的属性是 Ruby 数组的实现。例如,Vm
类型的 custom_properties
属性定义为 CustomProperty
类型的对象列表。
添加属性列表作为数组
vm = OvirtSDK4::Vm.new( name: 'myvm', custom_properties: [ OvirtSDK4::CustomProperty.new(...), OvirtSDK4::CustomProperty.new(...), ... ] )
API 中以枚举值定义的属性作为模块中的常数实施,其名称与枚举类型相同。
以下示例演示了如何使用 VmStatus
enumerated 值来定义 Vm
类型的 status 属性。
case vm.status when OvirtSDK4::VmStatus::DOWN ... when OvirtSDK4::VmStatus::IMAGE_LOCKED ... end
在 API 规格中,枚举类型的值为小写,因为这是 XML 和 JSON 的惯例。但是,在 Ruby 中,这些常数是 使用大写的。