2.3.5. 添加
添加
方法添加新的元素到集合。它们接收描述要添加的对象、发送请求以进行添加的请求,并返回描述添加对象的类型的实例。
添加新虚拟机
# Add the virtual machine: vm = vms_service.add( OvirtSDK4::Vm.new( name: 'myvm', cluster: { name: 'mycluster' }, template: { name: 'mytemplate' } ) )
重要
add
方法返回的 Ruby 对象是相关类型的实例。它不是一种服务,只是数据容器。在上例中,返回的对象是 Vm 类的实例。
如果需要对刚刚添加的虚拟机执行操作,您必须找到管理该服务并调用服务 locator 的服务:
启动新虚拟机
# Add the virtual machine: vm = vms_service.add( ... ) # Find the service that manages the virtual machine: vm_service = vms_service.vm_service(vm.id) # Start the virtual machine: vm_service.start
大多数对象的创建是异步任务。例如,如果您创建新虚拟机,则 add
方法将在完全创建虚拟机并准备好使用前返回虚拟机。您应该轮询对象的状态,直到完全创建为止。对于表示检查的虚拟机,直到状态变为 DOWN
。
推荐的方法是创建虚拟机,找到管理新虚拟机的服务,并重复检索状态,直到虚拟机状态为 DOWN
,表示已创建了所有磁盘。
添加虚拟机、查找服务并检索其状态
# Add the virtual machine: vm = vms_service.add( ... ) # Find the service that manages the virtual machine: vm_service = vms_service.vm_service(vm.id) # Wait until the virtual machine is DOWN, indicating that all the # disks have been created: loop do sleep(5) vm = vm_service.get break if vm.status == OvirtSDK4::VmStatus::DOWN end
如果无法创建对象,SDK 将引发一个 错误 异常,其中包含故障的详细信息。它永远不会返回 nil
。