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 中,这些常数是 使用大写的。