2.3.5. Add
add メソッドは、コレクションに新しい要素を追加します。追加するオブジェクトを記述する関連タイプのインスタンスを受け取り、それを追加する要求を送信し、追加されたオブジェクトを記述したタイプのインスタンスを返します。
新しい仮想マシンの追加
# Add the virtual machine:
vm = vms_service.add(
OvirtSDK4::Vm.new(
name: 'myvm',
cluster: {
name: 'mycluster'
},
template: {
name: 'mytemplate'
}
)
)
add メソッドによって返される Ruby オブジェクトは、関連するタイプのインスタンスです。これはサービスではなく、データの単なるコンテナーです。上記の例では、返されるオブジェクトは Vm クラスのインスタンスです。
追加した仮想マシンでアクションを実行する必要がある場合は、それを管理するサービスを見つけて、サービスロケーターを呼び出す必要があります。
新しい仮想マシンの起動
# 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 を返すことはありません。