From 54521c909fe2eb56ad2ef531e0f678041186f039 Mon Sep 17 00:00:00 2001 From: Philippe Kueck Date: Tue, 10 Mar 2020 12:34:41 +0100 Subject: [PATCH] F #-: implement crash detection for qemu vms Signed-off-by: Philippe Kueck --- src/cli/onevm | 2 +- src/oca/go/src/goca/schemas/vm/keys/template.go | 1 + src/oca/ruby/opennebula/virtual_machine.rb | 2 +- .../form-panels/create/wizard-tabs/os/html.hbs | 14 ++++++++++++++ src/vm/VirtualMachine.cc | 2 +- src/vmm/LibVirtDriverKVM.cc | 11 +++++++++++ src/vmm_mad/exec/vmm_exec_kvm.conf | 2 +- 7 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/cli/onevm b/src/cli/onevm index b3bbc3c15a9..82bf7b37026 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -1156,7 +1156,7 @@ CommandParser::CmdParser.new(ARGV) do configuration attributes are: OS = ["ARCH", "MACHINE", "KERNEL", "INITRD", "BOOTLOADER", "BOOT"] - FEATURES = ["ACPI", "PAE", "APIC", "LOCALTIME", "HYPERV", "GUEST_AGENT"] + FEATURES = ["ACPI", "PAE", "APIC", "LOCALTIME", "HYPERV", "GUEST_AGENT", "CRASH_ACTION"] INPUT = ["TYPE", "BUS"] GRAPHICS = ["TYPE", "LISTEN", "PASSWD", "KEYMAP" ] RAW = ["DATA", "DATA_VMX", "TYPE"] diff --git a/src/oca/go/src/goca/schemas/vm/keys/template.go b/src/oca/go/src/goca/schemas/vm/keys/template.go index be4097e2975..269cebe368c 100644 --- a/src/oca/go/src/goca/schemas/vm/keys/template.go +++ b/src/oca/go/src/goca/schemas/vm/keys/template.go @@ -84,6 +84,7 @@ const ( LocalTime Feature = "LOCAL_TIME" GuestAgent Feature = "GUEST_AGENT" VirtIOScsiQueues Feature = "VIRTIO_SCSI_QUEUES" + CrashAction FEATURE = "CRASH_ACTION" ) // IOGraphics define keys for the VM IO graphics diff --git a/src/oca/ruby/opennebula/virtual_machine.rb b/src/oca/ruby/opennebula/virtual_machine.rb index 7b5981176d0..d321ddf7532 100644 --- a/src/oca/ruby/opennebula/virtual_machine.rb +++ b/src/oca/ruby/opennebula/virtual_machine.rb @@ -706,7 +706,7 @@ def delete(recreate=false) # will replace the existing ones or delete it if empty. Attributes that # can be updated are: INPUT/{TYPE, BUS}; RAW/{TYPE, DATA, DATA_VMX}, # OS/{BOOT, BOOTLOADER, ARCH, MACHINE, KERNEL, INITRD}, - # FEATURES/{ACPI, APIC, PAE, LOCALTIME, HYPERV, GUEST_AGENT}, + # FEATURES/{ACPI, APIC, PAE, LOCALTIME, HYPERV, GUEST_AGENT, CRASH_ACTION}, # and GRAPHICS/{TYPE, LISTEN, PASSWD, KEYMAP} # @return [nil, OpenNebula::Error] nil in case of success, Error # otherwise diff --git a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/os/html.hbs b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/os/html.hbs index e05cd81bd2f..2f7bdd5ffe1 100644 --- a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/os/html.hbs +++ b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/os/html.hbs @@ -258,6 +258,20 @@ +
+ +
diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc index 0cd6970c342..e9bdfb5128b 100644 --- a/src/vm/VirtualMachine.cc +++ b/src/vm/VirtualMachine.cc @@ -2746,7 +2746,7 @@ void VirtualMachine::get_public_clouds(const string& pname, set &clouds) static std::map> UPDATECONF_ATTRS = { {"OS", {"ARCH", "MACHINE", "KERNEL", "INITRD", "BOOTLOADER", "BOOT", "KERNEL_CMD", "ROOT", "SD_DISK_BUS"} }, {"FEATURES", {"PAE", "ACPI", "APIC", "LOCALTIME", "HYPERV", "GUEST_AGENT", - "VIRTIO_SCSI_QUEUES"} }, + "VIRTIO_SCSI_QUEUES", "CRASH_ACTION"} }, {"INPUT", {"TYPE", "BUS"} }, {"GRAPHICS", {"TYPE", "LISTEN", "PASSWD", "KEYMAP", "COMMAND"} }, {"RAW", {"TYPE", "DATA", "DATA_VMX"} }, diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc index 6e5dfb0d671..4496d53d170 100644 --- a/src/vmm/LibVirtDriverKVM.cc +++ b/src/vmm/LibVirtDriverKVM.cc @@ -529,6 +529,8 @@ int LibVirtDriver::deployment_description_kvm( int virtio_scsi_queues = 0; int scsi_targets_num = 0; + string crash_action = ""; + string hyperv_options = ""; vector raw; @@ -1574,6 +1576,7 @@ int LibVirtDriver::deployment_description_kvm( get_attribute(vm, host, cluster, "FEATURES", "LOCALTIME", localtime); get_attribute(vm, host, cluster, "FEATURES", "GUEST_AGENT", guest_agent); get_attribute(vm, host, cluster, "FEATURES", "VIRTIO_SCSI_QUEUES", virtio_scsi_queues); + get_attribute(vm, host, cluster, "FEATURES", "CRASH_ACTION", crash_action); if ( acpi || pae || apic || hyperv ) { @@ -1621,6 +1624,14 @@ int LibVirtDriver::deployment_description_kvm( << "\t" << endl; } + if ( !crash_action.empty() ) + { + file << "\t" << crash_action << "" << endl + << "\t" << endl + << "\t\t" << endl + << "\t" << endl; + } + if ( virtio_scsi_queues > 0 || scsi_targets_num > 1) { file << "\t" << endl diff --git a/src/vmm_mad/exec/vmm_exec_kvm.conf b/src/vmm_mad/exec/vmm_exec_kvm.conf index 2798af917b7..95d9c5ca973 100644 --- a/src/vmm_mad/exec/vmm_exec_kvm.conf +++ b/src/vmm_mad/exec/vmm_exec_kvm.conf @@ -34,7 +34,7 @@ OS = [ arch = "x86_64" ] FEATURES = [ PAE = "no", ACPI = "yes", APIC = "no", HYPERV = "no", GUEST_AGENT = "no", - VIRTIO_SCSI_QUEUES = "0" ] + VIRTIO_SCSI_QUEUES = "0", CRASH_ACTION = "" ] #CPU_MODEL = [ MODEL = "host-passthrough"] DISK = [ driver = "raw" , cache = "none"]