Laszlo Hornyak has uploaded a new change for review.

Change subject: engine: watchdog support [wip]
......................................................................

engine: watchdog support [wip]

Watchdog device support for the engine:
- Backend logic to handle the new device
- Frontend modifications
- Restapi support

http://www.ovirt.org/Features/Watchdog_engine_support

Change-Id: Ibe5c36995dafcef6b3ad45a9e0ca8b0471324b70
Signed-off-by: Laszlo Hornyak <[email protected]>
---
M backend/manager/dbscripts/create_views.sql
A backend/manager/dbscripts/upgrade/03_02_0470_watchdog.sql
M backend/manager/dbscripts/vms_sp.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
32 files changed, 279 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/12419/1

diff --git a/backend/manager/dbscripts/create_views.sql 
b/backend/manager/dbscripts/create_views.sql
index ec9d080..8d73830 100644
--- a/backend/manager/dbscripts/create_views.sql
+++ b/backend/manager/dbscripts/create_views.sql
@@ -550,7 +550,8 @@
                       vm_statistics.usage_mem_percent as usage_mem_percent, 
vm_statistics.usage_cpu_percent as usage_cpu_percent, vds_static.vds_name as 
run_on_vds_name, vds_groups.cpu_name as vds_group_cpu_name,
                       vm_static.default_display_type as default_display_type, 
vm_static.priority as priority,vm_static.iso_path as iso_path, vm_static.origin 
as origin, vds_groups.compatibility_version as vds_group_compatibility_version,
                       vm_static.initrd_url as initrd_url, vm_static.kernel_url 
as kernel_url, vm_static.kernel_params as kernel_params, 
vm_dynamic.pause_status as pause_status, vm_dynamic.exit_message as 
exit_message, vm_dynamic.exit_status as exit_status,vm_static.migration_support 
as migration_support,vm_static.predefined_properties as 
predefined_properties,vm_static.userdefined_properties as 
userdefined_properties,vm_static.min_allocated_mem as min_allocated_mem,  
vm_dynamic.hash as hash, vm_static.cpu_pinning as cpu_pinning, 
vm_static.db_generation as db_generation, vm_static.host_cpu_flags as 
host_cpu_flags,
-                      vm_static.tunnel_migration as tunnel_migration, 
vm_static.vnc_keyboard_layout as vnc_keyboard_layout
+                      vm_static.tunnel_migration as tunnel_migration, 
vm_static.vnc_keyboard_layout as vnc_keyboard_layout,
+                      vm_static.watchdog_model as watchdog_model, 
vm_static.watchdog_action as watchdog_action
 FROM         vm_static INNER JOIN
 vm_dynamic ON vm_static.vm_guid = vm_dynamic.vm_guid INNER JOIN
 vm_static AS vm_templates ON vm_static.vmt_guid = vm_templates.vm_guid INNER 
JOIN
diff --git a/backend/manager/dbscripts/upgrade/03_02_0470_watchdog.sql 
b/backend/manager/dbscripts/upgrade/03_02_0470_watchdog.sql
new file mode 100644
index 0000000..7c01cb7
--- /dev/null
+++ b/backend/manager/dbscripts/upgrade/03_02_0470_watchdog.sql
@@ -0,0 +1,4 @@
+
+alter table vm_static add watchdog_model varchar(16) default null;
+alter table vm_static add watchdog_action varchar(16) default null;
+
diff --git a/backend/manager/dbscripts/vms_sp.sql 
b/backend/manager/dbscripts/vms_sp.sql
index feb629b..0210165 100644
--- a/backend/manager/dbscripts/vms_sp.sql
+++ b/backend/manager/dbscripts/vms_sp.sql
@@ -430,12 +430,14 @@
     v_cpu_pinning VARCHAR(4000),
     v_host_cpu_flags BOOLEAN,
     v_tunnel_migration BOOLEAN,
-    v_vnc_keyboard_layout VARCHAR(16))
+    v_vnc_keyboard_layout VARCHAR(16),
+    v_watchdog_model varchar(16),
+    v_watchdog_action varchar(16))
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO vm_static(description, mem_size_mb, os, vds_group_id, vm_guid, 
VM_NAME, 
vmt_guid,domain,creation_date,num_of_monitors,allow_console_reconnect,is_initialized,is_auto_suspend,num_of_sockets,cpu_per_socket,usb_policy,
 time_zone,auto_startup,is_stateless,dedicated_vm_for_vds, fail_back, 
default_boot_sequence, vm_type, nice_level, default_display_type, 
priority,iso_path,origin,initrd_url,kernel_url,kernel_params,migration_support,predefined_properties,userdefined_properties,min_allocated_mem,
 entity_type, quota_id, cpu_pinning, 
is_smartcard_enabled,is_delete_protected,host_cpu_flags, tunnel_migration, 
vnc_keyboard_layout)
-       VALUES(v_description,  v_mem_size_mb, v_os, v_vds_group_id, v_vm_guid, 
v_vm_name, v_vmt_guid, v_domain, v_creation_date, v_num_of_monitors, 
v_allow_console_reconnect, v_is_initialized, v_is_auto_suspend, 
v_num_of_sockets, v_cpu_per_socket, v_usb_policy, v_time_zone, 
v_auto_startup,v_is_stateless,v_dedicated_vm_for_vds,v_fail_back, 
v_default_boot_sequence, v_vm_type, v_nice_level, v_default_display_type, 
v_priority,v_iso_path,v_origin,v_initrd_url,v_kernel_url,v_kernel_params,v_migration_support,v_predefined_properties,v_userdefined_properties,v_min_allocated_mem,
 'VM', v_quota_id, v_cpu_pinning, 
v_is_smartcard_enabled,v_is_delete_protected,v_host_cpu_flags, 
v_tunnel_migration, v_vnc_keyboard_layout);
+INSERT INTO vm_static(description, mem_size_mb, os, vds_group_id, vm_guid, 
VM_NAME, 
vmt_guid,domain,creation_date,num_of_monitors,allow_console_reconnect,is_initialized,is_auto_suspend,num_of_sockets,cpu_per_socket,usb_policy,
 time_zone,auto_startup,is_stateless,dedicated_vm_for_vds, fail_back, 
default_boot_sequence, vm_type, nice_level, default_display_type, 
priority,iso_path,origin,initrd_url,kernel_url,kernel_params,migration_support,predefined_properties,userdefined_properties,min_allocated_mem,
 entity_type, quota_id, cpu_pinning, 
is_smartcard_enabled,is_delete_protected,host_cpu_flags, tunnel_migration, 
vnc_keyboard_layout, watchdog_model, watchdog_action)
+       VALUES(v_description,  v_mem_size_mb, v_os, v_vds_group_id, v_vm_guid, 
v_vm_name, v_vmt_guid, v_domain, v_creation_date, v_num_of_monitors, 
v_allow_console_reconnect, v_is_initialized, v_is_auto_suspend, 
v_num_of_sockets, v_cpu_per_socket, v_usb_policy, v_time_zone, 
v_auto_startup,v_is_stateless,v_dedicated_vm_for_vds,v_fail_back, 
v_default_boot_sequence, v_vm_type, v_nice_level, v_default_display_type, 
v_priority,v_iso_path,v_origin,v_initrd_url,v_kernel_url,v_kernel_params,v_migration_support,v_predefined_properties,v_userdefined_properties,v_min_allocated_mem,
 'VM', v_quota_id, v_cpu_pinning, 
v_is_smartcard_enabled,v_is_delete_protected,v_host_cpu_flags, 
v_tunnel_migration, v_vnc_keyboard_layout, v_watchdog_model, v_watchdog_action);
 -- perform deletion from vm_ovf_generations to ensure that no record exists 
when performing insert to avoid PK violation.
 DELETE FROM vm_ovf_generations gen WHERE gen.vm_guid = v_vm_guid;
 INSERT INTO vm_ovf_generations(vm_guid, storage_pool_id) VALUES (v_vm_guid, 
(SELECT storage_pool_id FROM vds_groups vg WHERE vg.vds_group_id = 
v_vds_group_id));
@@ -545,7 +547,9 @@
 v_cpu_pinning VARCHAR(4000),
 v_host_cpu_flags BOOLEAN,
 v_tunnel_migration BOOLEAN,
-v_vnc_keyboard_layout  VARCHAR(16))
+v_vnc_keyboard_layout  VARCHAR(16),
+v_watchdog_model VARCHAR(16),
+v_watchdog_action VARCHAR(16))
 RETURNS VOID
 
        --The [vm_static] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
@@ -569,7 +573,9 @@
       predefined_properties = v_predefined_properties,userdefined_properties = 
v_userdefined_properties,
       min_allocated_mem = v_min_allocated_mem, quota_id = v_quota_id, 
cpu_pinning = v_cpu_pinning, is_smartcard_enabled = v_is_smartcard_enabled,
       is_delete_protected = v_is_delete_protected, host_cpu_flags = 
v_host_cpu_flags, tunnel_migration = v_tunnel_migration,
-      vnc_keyboard_layout = v_vnc_keyboard_layout
+      vnc_keyboard_layout = v_vnc_keyboard_layout,
+      watchdog_model = v_watchdog_model,
+      watchdog_action = v_watchdog_action
       WHERE vm_guid = v_vm_guid
       AND   entity_type = 'VM';
 END; $procedure$
@@ -878,12 +884,14 @@
     v_min_allocated_mem INTEGER,
     v_cpu_pinning varchar(4000),
     v_host_cpu_flags BOOLEAN,
-    v_tunnel_migration BOOLEAN)
+    v_tunnel_migration BOOLEAN,
+    v_watchdog_model VARCHAR(16),
+    v_watchdog_action VARCHAR(16))
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO vm_static(description, mem_size_mb, os, vds_group_id, vm_guid, 
VM_NAME, vmt_guid, num_of_monitors, allow_console_reconnect, is_initialized, 
is_auto_suspend, num_of_sockets, cpu_per_socket, usb_policy, 
time_zone,auto_startup,is_stateless,dedicated_vm_for_vds,fail_back,vm_type,nice_level,default_boot_sequence,default_display_type,priority,iso_path,origin,initrd_url,kernel_url,kernel_params,migration_support,predefined_properties,userdefined_properties,min_allocated_mem,cpu_pinning,is_smartcard_enabled,is_delete_protected,host_cpu_flags,
 tunnel_migration)
-       VALUES(v_description, v_mem_size_mb, v_os, v_vds_group_id, v_vm_guid, 
v_vm_name, v_vmt_guid, v_num_of_monitors, v_num_of_monitors, v_is_initialized, 
v_is_auto_suspend, v_num_of_sockets, v_cpu_per_socket, v_usb_policy, 
v_time_zone,v_auto_startup,v_is_stateless,v_dedicated_vm_for_vds,v_fail_back,v_vm_type,v_nice_level,v_default_boot_sequence,v_default_display_type,v_priority,v_iso_path,v_origin,v_initrd_url,v_kernel_url,v_kernel_params,v_migration_support,v_predefined_properties,v_userdefined_properties,v_min_allocated_mem,v_cpu_pinning,v_is_smartcard_enabled,v_is_delete_protected,v_host_cpu_flags,
 v_tunnel_migration);
+INSERT INTO vm_static(description, mem_size_mb, os, vds_group_id, vm_guid, 
VM_NAME, vmt_guid, num_of_monitors, allow_console_reconnect, is_initialized, 
is_auto_suspend, num_of_sockets, cpu_per_socket, usb_policy, 
time_zone,auto_startup,is_stateless,dedicated_vm_for_vds,fail_back,vm_type,nice_level,default_boot_sequence,default_display_type,priority,iso_path,origin,initrd_url,kernel_url,kernel_params,migration_support,predefined_properties,userdefined_properties,min_allocated_mem,cpu_pinning,is_smartcard_enabled,is_delete_protected,host_cpu_flags,
 tunnel_migration, watchdog_model, watchdog_action)
+       VALUES(v_description, v_mem_size_mb, v_os, v_vds_group_id, v_vm_guid, 
v_vm_name, v_vmt_guid, v_num_of_monitors, v_num_of_monitors, v_is_initialized, 
v_is_auto_suspend, v_num_of_sockets, v_cpu_per_socket, v_usb_policy, 
v_time_zone,v_auto_startup,v_is_stateless,v_dedicated_vm_for_vds,v_fail_back,v_vm_type,v_nice_level,v_default_boot_sequence,v_default_display_type,v_priority,v_iso_path,v_origin,v_initrd_url,v_kernel_url,v_kernel_params,v_migration_support,v_predefined_properties,v_userdefined_properties,v_min_allocated_mem,v_cpu_pinning,v_is_smartcard_enabled,v_is_delete_protected,v_host_cpu_flags,
 v_tunnel_migration, v_watchdog_model, v_watchdg_action);
 
       INSERT INTO vm_dynamic(vm_guid, status) VALUES(v_vm_guid, 0);
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index 8b90c6a..34f8316 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -499,6 +499,11 @@
                 {
                     VmDeviceUtils.updateSmartcardDevice(getVm().getId(), 
getVm().isSmartcardEnabled());
                 }
+                //update watchdog device
+                VmDeviceUtils.updateWatchdogDevice(getVm().getId(),
+                        getParameters().getVm().getWatchdogModel(),
+                        getParameters().getVm().getWatchdogAction());
+
                 setActionReturnValue(getVm().getId());
                 setSucceeded(true);
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index df21ed4..8b6f5b7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -303,6 +303,8 @@
                 getParameters().getMasterVm().getTunnelMigration(),
                 getParameters().getMasterVm().getVncKeyboardLayout()));
         
getVmTemplate().setAutoStartup(getParameters().getMasterVm().isAutoStartup());
+        
getVmTemplate().setWatchdogAction(getParameters().getMasterVm().getWatchdogAction());
+        
getVmTemplate().setWatchdogModel(getParameters().getMasterVm().getWatchdogModel());
         
getVmTemplate().setPriority(getParameters().getMasterVm().getPriority());
         
getVmTemplate().setDefaultDisplayType(getParameters().getMasterVm().getDefaultDisplayType());
         
getVmTemplate().setInitrdUrl(getParameters().getMasterVm().getInitrdUrl());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
index f3a6cd5..facd33a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
@@ -82,6 +82,37 @@
 
             updateAudioDevice(oldVm, entity);
             updateSmartcardDevice(oldVm, entity);
+            updateWatchdogDevice(oldVm, entity);
+        }
+    }
+
+    public static void updateWatchdogDevice(Guid vmId, String watchdogModel, 
String watchdogAction) {
+        // remove watchdogs
+        List<VmDevice> watchdogs =
+                dao.getVmDeviceByVmIdTypeAndDevice(vmId,
+                        VmDeviceType.WATCHDOG.getName(),
+                        VmDeviceType.WATCHDOG.getName());
+        for (VmDevice watchDog : watchdogs) {
+            dao.remove(watchDog.getId());
+        }
+        if (watchdogModel != null && watchdogAction != null) {
+            // add watchdog
+            HashMap<String, Object> params = new HashMap<String, Object>();
+            params.put("model", watchdogModel);
+            params.put("action", watchdogAction);
+            addManagedDevice(new VmDeviceId(Guid.NewGuid(), vmId),
+                    VmDeviceType.WATCHDOG,
+                    VmDeviceType.WATCHDOG,
+                    params,
+                    true,
+                    false);
+        }
+    }
+
+    static void updateWatchdogDevice(VM oldVm, VmBase newVm) {
+        if (!StringUtils.equals(oldVm.getWatchdogAction(), 
newVm.getWatchdogAction())
+                || !StringUtils.equals(oldVm.getWatchdogModel(), 
newVm.getWatchdogModel())) {
+            updateWatchdogDevice(newVm.getId(), newVm.getWatchdogModel(), 
newVm.getWatchdogAction());
         }
     }
 
@@ -233,6 +264,8 @@
                 specParams.put(VdsProperties.Model, VdsProperties.Virtio);
             } else if 
(VmDeviceType.SMARTCARD.getName().equals(device.getType())) {
                 specParams = new SmartcardSpecParams();
+            } else if 
(VmDeviceType.WATCHDOG.getName().equals(device.getType())) {
+                specParams.putAll(device.getSpecParams());
             }
             device.setId(new VmDeviceId(id, dstId));
             device.setSpecParams(specParams);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
index e769c5b..632629f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
@@ -21,6 +21,22 @@
     @Valid
     private VmStatic vmStatic;
 
+    public String getWatchdogAction() {
+        return vmStatic.getWatchdogAction();
+    }
+
+    public void setWatchdogAction(String watchdogAction) {
+        vmStatic.setWatchdogAction(watchdogAction);
+    }
+
+    public String getWatchdogModel() {
+        return vmStatic.getWatchdogModel();
+    }
+
+    public void setWatchdogModel(String watchdogModel) {
+        vmStatic.setWatchdogModel(watchdogModel);
+    }
+
     private VmDynamic vmDynamic;
     private VmStatistics vmStatistics;
     @EditableField
@@ -1434,4 +1450,5 @@
     public void setTunnelMigration(Boolean value) {
         vmStatic.setTunnelMigration(value);
     }
+
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
index fdb9d33..0c6a73f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
@@ -836,4 +836,25 @@
         this.name = value;
     }
 
+    @EditableField
+    String watchdogAction = null;
+    @EditableField
+    String watchdogModel = null;
+
+    public String getWatchdogAction() {
+        return watchdogAction;
+    }
+
+    public void setWatchdogAction(String watchdogAction) {
+        this.watchdogAction = watchdogAction;
+    }
+
+    public String getWatchdogModel() {
+        return watchdogModel;
+    }
+
+    public void setWatchdogModel(String watchdogModel) {
+        this.watchdogModel = watchdogModel;
+    }
+
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
index 324a727..2350f95 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
@@ -285,7 +285,9 @@
         return (VmDeviceType.SOUND.getName().equals(type) ||
                 VmDeviceType.USB.getName().equals(device) ||
                 (VmDeviceType.SMARTCARD.getName().equals(device) && 
VmDeviceType.SMARTCARD.getName().equals(type)) ||
-                (VmDeviceType.SPICEVMC.getName().equals(device) && 
VmDeviceType.REDIR.getName().equals(type)) || (VmDeviceType.MEMBALLOON.getName()
-                        .equals(device) && 
VmDeviceType.BALLOON.getName().equals(type)));
+                (VmDeviceType.SPICEVMC.getName().equals(device) && 
VmDeviceType.REDIR.getName().equals(type))
+                || (VmDeviceType.MEMBALLOON.getName()
+                        .equals(device) && 
VmDeviceType.BALLOON.getName().equals(type)) || (VmDeviceType.WATCHDOG.getName()
+                .equals(device) && 
VmDeviceType.WATCHDOG.getName().equals(type)));
     }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
index a466960..83e4239 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
@@ -19,6 +19,7 @@
     MEMBALLOON("memballoon"),
     SMARTCARD("smartcard"),
     BALLOON("balloon"),
+    WATCHDOG("watchdog"),
     OTHER("other", "0"),
     UNKNOWN("unknown", "-1");
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
index 009a50e..41bcdc4 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
@@ -389,6 +389,8 @@
             entity.setGuestAgentNicsHash(rs.getInt("guest_agent_nics_hash"));
             entity.setTunnelMigration((Boolean) 
rs.getObject("tunnel_migration"));
             entity.setVncKeyboardLayout(rs.getString("vnc_keyboard_layout"));
+            entity.setWatchdogModel(rs.getString("watchdog_model"));
+            entity.setWatchdogAction(rs.getString("watchdog_action"));
             return entity;
         }
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
index de3c511..46c90c4 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
@@ -85,7 +85,9 @@
                 .addValue("cpu_pinning", vm.getCpuPinning())
                 .addValue("host_cpu_flags", vm.isUseHostCpuFlags())
                 .addValue("tunnel_migration", vm.getTunnelMigration())
-                .addValue("vnc_keyboard_layout", vm.getVncKeyboardLayout());
+                .addValue("vnc_keyboard_layout", vm.getVncKeyboardLayout())
+                .addValue("watchdog_model", vm.getWatchdogModel())
+                .addValue("watchdog_action", vm.getWatchdogAction());
     }
 
     @Override
@@ -203,6 +205,8 @@
             entity.setUseHostCpuFlags(rs.getBoolean("host_cpu_flags"));
             entity.setTunnelMigration((Boolean) 
rs.getObject("tunnel_migration"));
             entity.setVncKeyboardLayout(rs.getString("vnc_keyboard_layout"));
+            entity.setWatchdogModel(rs.getString("watchdog_model"));
+            entity.setWatchdogAction(rs.getString("watchdog_action"));
 
             return entity;
         }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
index cd157a5..7924400 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
@@ -166,7 +166,9 @@
                 .addValue("migration_support", 
template.getMigrationSupport().getValue())
                 .addValue("dedicated_vm_for_vds", 
template.getDedicatedVmForVds())
                 .addValue("tunnel_migration", template.getTunnelMigration())
-                .addValue("vnc_keyboard_layout", 
template.getVncKeyboardLayout());
+                .addValue("vnc_keyboard_layout", 
template.getVncKeyboardLayout())
+                .addValue("watchdog_action", template.getWatchdogAction())
+                .addValue("watchdog_model", template.getWatchdogModel());
     }
 
     @Override
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index 05237c0..cf3e314 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -1012,6 +1012,13 @@
     </xs:attribute>
   </xs:complexType>
 
+  <xs:complexType name="WatchDogType">
+       <xs:sequence>
+         <xs:element name="model" type="xs:string" minOccurs="1" 
maxOccurs="1"/>
+         <xs:element name="action" type="xs:string" minOccurs="1" 
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+
   <xs:complexType name="MemoryPolicy">
     <xs:sequence>
       <xs:element name="guaranteed" type="xs:long" minOccurs="0" 
maxOccurs="1"/>
@@ -1907,6 +1914,7 @@
           <xs:element ref="domain" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="usb" minOccurs="0" maxOccurs="1"/>
           <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
+          <xs:element name="watchdog" type="WatchDogType" minOccurs="0" 
maxOccurs="1"/>
           <!-- also rel="cdroms/disks/nics" links, see Devices below -->
         </xs:sequence>
       </xs:extension>
@@ -2129,6 +2137,7 @@
           <!-- also rel="users" links, see Users above -->
 
           <xs:element ref="reported_devices" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="watchdog" type="WatchDogType" minOccurs="0" 
maxOccurs="1"></xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index 859609e..4c7b306 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -42,6 +42,7 @@
 import org.ovirt.engine.api.model.VmPool;
 import org.ovirt.engine.api.model.VmStatus;
 import org.ovirt.engine.api.model.VmType;
+import org.ovirt.engine.api.model.WatchDogType;
 import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
@@ -429,6 +430,14 @@
             model.setQuota(quota);
         }
         model.setTunnelMigration(entity.getTunnelMigration());
+
+        if(entity.getWatchdogModel() != null) {
+            WatchDogType watchdog = new WatchDogType();
+            watchdog.setAction(entity.getWatchdogAction());
+            watchdog.setModel(entity.getWatchdogModel());
+            model.setWatchdog(watchdog);
+        }
+
         return model;
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
index 2003006..483315c 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
@@ -70,6 +70,7 @@
         builder.buildVmTimeZone();
         builder.buildVmUsbDevices();
         builder.buildVmMemoryBalloon();
+        builder.buildVmWatchdog();
         builder.buildUnmanagedDevices();
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
index 6ba2926..86ae326 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
@@ -685,4 +685,23 @@
         return model.equalsIgnoreCase(FIRST_MASTER_MODEL);
     }
 
+    protected void buildVmWatchdog() {
+        List<VmDevice> watchdogs =
+                DbFacade.getInstance()
+                        .getVmDeviceDao()
+                        .getVmDeviceByVmIdAndType(vm.getId(),
+                                VmDeviceType.WATCHDOG.getName());
+        for(VmDevice watchdog : watchdogs) {
+            XmlRpcStruct struct = new XmlRpcStruct();
+            struct.add(VdsProperties.Type, watchdog.getType());
+            struct.add(VdsProperties.Device, watchdog.getDevice());
+            Map<String, Object> specParams = watchdog.getSpecParams();
+            if (specParams == null) {
+                specParams = new HashMap<String, Object>();
+            }
+            struct.add(VdsProperties.SpecParams, specParams);
+            addDevice(struct, watchdog, null);
+        }
+    }
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
index aa46f3e..71d18b4 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
@@ -262,4 +262,6 @@
 
     protected abstract void buildVmMemoryBalloon();
 
+    protected abstract void buildVmWatchdog();
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
index 1c966bf..ffbfd44 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
@@ -8,6 +8,7 @@
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.Predicate;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -213,4 +214,9 @@
     protected void buildVmMemoryBalloon() {
         // Not supported in old code
     }
+
+    protected void buildVmWatchdog() {
+        throw new NotImplementedException("not implemented");
+        // Not supported in old code
+    }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
index baac7ef..c92c28d 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
@@ -394,6 +394,12 @@
     @DefaultStringValue("Highly Available")
     String highlyAvailableVmPopup();
 
+    @DefaultStringValue("Watchdog Action")
+    String watchdogAction();
+
+    @DefaultStringValue("Watchdog Model")
+    String watchdogModel();
+
     @DefaultStringValue("Template Provisioning")
     String templateProvisVmPopup();
 
@@ -433,6 +439,9 @@
     @DefaultStringValue("Priority for Run/Migration queue:")
     String priorForRunMigrationQueueVmPopup();
 
+    @DefaultStringValue("Watchdog")
+    String watchdog();
+
     @DefaultStringValue("Memory Allocation:")
     String memAllocVmPopup();
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
index 6c89a0f..9f1ccf9 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
@@ -345,6 +345,17 @@
     @WithElementId("priority")
     public EntityModelCellTable<ListModel> priorityEditor;
 
+    @UiField(provided = true)
+    @Path(value = "watchdogModel.entity")
+    @WithElementId("watchdogModel")
+    public ListModelListBoxEditor<Object> watchdogModelEditor;
+
+    @UiField(provided = true)
+    @Path(value = "watchdogAction.entity")
+    @WithElementId("watchdogAction")
+    public ListModelListBoxEditor<Object> watchdogActionEditor;
+
+
     // ==Resource Allocation Tab==
     @UiField
     protected DialogTab resourceAllocationTab;
@@ -484,6 +495,8 @@
         hostCpuEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         dontMigrateVMEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         isHighlyAvailableEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
+        watchdogModelEditor = new ListModelListBoxEditor<Object>();
+        watchdogActionEditor = new ListModelListBoxEditor<Object>();
         isStatelessEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         isDeleteProtectedEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         isSmartcardEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
@@ -736,6 +749,10 @@
 
         // High Availability Tab
         isHighlyAvailableEditor.setLabel(constants.highlyAvailableVmPopup());
+
+        // watchdog
+        watchdogActionEditor.setLabel(constants.watchdogAction());
+        watchdogModelEditor.setLabel(constants.watchdogModel());
 
         // Resource Allocation Tab
         provisioningEditor.setLabel(constants.templateProvisVmPopup());
@@ -1112,6 +1129,9 @@
         isHighlyAvailableEditor.setTabIndex(nextTabIndex++);
         priorityEditor.setTabIndex(nextTabIndex++);
 
+        watchdogModelEditor.setTabIndex(nextTabIndex++);
+        watchdogActionEditor.setTabIndex(nextTabIndex++);
+
         // ==Resource Allocation Tab==
         nextTabIndex = resourceAllocationTab.setTabIndexes(nextTabIndex);
         minAllocatedMemoryEditor.setTabIndex(nextTabIndex++);
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
index 6aef823..9a5a89d 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
@@ -353,6 +353,11 @@
                                                        <g:Label 
addStyleNames="{style.sectionLabel}" 
text="{constants.priorForRunMigrationQueueVmPopup}" />
                                                        <e:EntityModelCellTable 
ui:field="priorityEditor" />
                                                </g:FlowPanel>
+                                               <g:FlowPanel 
addStyleNames="{style.sectionPanel}">
+                                                       <g:Label 
addStyleNames="{style.sectionLabel}" text="{constants.watchdog}" />
+                                                       
<e:ListModelListBoxEditor ui:field="watchdogModelEditor" />
+                                                       
<e:ListModelListBoxEditor ui:field="watchdogActionEditor" />
+                                               </g:FlowPanel>
                                        </g:FlowPanel>
                                </t:content>
                        </t:DialogTab>
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
index 6db6e58..23e15dd 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
@@ -94,6 +94,8 @@
         // vm.ActualDiskWithSnapshotsSize = 
instance.ActualDiskWithSnapshotsSize;
         vm.setAppList(instance.getAppList());
         vm.setAutoStartup(instance.isAutoStartup());
+        vm.setWatchdogAction(instance.getWatchdogAction());
+        vm.setWatchdogModel(instance.getWatchdogModel());
         vm.setBootSequence(instance.getBootSequence());
         vm.setClientIp(instance.getClientIp());
         vm.setCpuPerSocket(instance.getCpuPerSocket());
@@ -360,6 +362,8 @@
         obj.setDiskImageMap(instance.getDiskImageMap());
         obj.setInterfaces(instance.getInterfaces());
         obj.setAutoStartup(instance.isAutoStartup());
+        obj.setWatchdogAction(instance.getWatchdogAction());
+        obj.setWatchdogModel(instance.getWatchdogModel());
         obj.setchild_count(instance.getchild_count());
         obj.setCpuPerSocket(instance.getCpuPerSocket());
         obj.setCreationDate(instance.getCreationDate());
@@ -399,6 +403,8 @@
         obj.setIsoPath(instance.getIsoPath());
         obj.setOrigin(instance.getOrigin());
         obj.setAutoStartup(instance.isAutoStartup());
+        obj.setWatchdogAction(instance.getWatchdogAction());
+        obj.setWatchdogModel(instance.getWatchdogModel());
         obj.setCpuPerSocket(instance.getCpuPerSocket());
         obj.setCreationDate(instance.getCreationDate());
         obj.setDedicatedVmForVds(instance.getDedicatedVmForVds());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
index e6053ab..8b86ee6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
@@ -523,6 +523,8 @@
         template.setDefaultBootSequence(model.getBootSequence());
         template.setIsoPath(model.getCdImage().getIsChangable() ? (String) 
model.getCdImage().getSelectedItem() : ""); //$NON-NLS-1$
         template.setAutoStartup((Boolean) 
model.getIsHighlyAvailable().getEntity());
+        template.setWatchdogAction((String) 
model.getWatchdogAction().getEntity());
+        template.setWatchdogModel((String) 
model.getWatchdogModel().getEntity());
         template.setKernelUrl((String) model.getKernel_path().getEntity());
         template.setKernelParams((String) 
model.getKernel_parameters().getEntity());
         template.setInitrdUrl((String) model.getInitrd_path().getEntity());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
index 0f68e33..1c897d8 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
@@ -654,6 +654,8 @@
         tempVar.setSmartcardEnabled((Boolean) 
model.getIsSmartcardEnabled().getEntity());
         tempVar.setDefaultBootSequence(model.getBootSequence());
         tempVar.setAutoStartup((Boolean) 
model.getIsHighlyAvailable().getEntity());
+        
tempVar.setWatchdogAction((String)model.getWatchdogAction().getEntity());
+        tempVar.setWatchdogModel((String)model.getWatchdogModel().getEntity());
         tempVar.setIsoPath(model.getCdImage().getIsChangable() ? (String) 
model.getCdImage().getSelectedItem() : ""); //$NON-NLS-1$
         tempVar.setInitrdUrl(vm.getInitrdUrl());
         tempVar.setKernelUrl(vm.getKernelUrl());
@@ -1348,6 +1350,8 @@
         gettempVm().setIsoPath(model.getCdImage().getIsChangable() ? (String) 
model.getCdImage()
                 .getSelectedItem() : ""); //$NON-NLS-1$
         gettempVm().setAutoStartup((Boolean) 
model.getIsHighlyAvailable().getEntity());
+        gettempVm().setWatchdogAction((String) 
model.getWatchdogAction().getEntity());
+        gettempVm().setWatchdogModel((String) 
model.getWatchdogModel().getEntity());
 
         gettempVm().setInitrdUrl((String) model.getInitrd_path().getEntity());
         gettempVm().setKernelUrl((String) model.getKernel_path().getEntity());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
index 376f1a1..88a4ee61a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
@@ -123,6 +123,8 @@
         
getModel().getAllowConsoleReconnect().setEntity(vm.getAllowConsoleReconnect());
         getModel().setBootSequence(vm.getDefaultBootSequence());
         getModel().getIsHighlyAvailable().setEntity(vm.isAutoStartup());
+        getModel().getWatchdogModel().setEntity(vm.getWatchdogModel());
+        getModel().getWatchdogAction().setEntity(vm.getWatchdogAction());
 
         
getModel().getTotalCPUCores().setEntity(Integer.toString(vm.getNumOfCpus()));
         getModel().getTotalCPUCores().setIsChangable(!vm.isRunning());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
index e2ac6d6..eee21e9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
@@ -94,6 +94,8 @@
             getModel().getUsbPolicy().setSelectedItem(template.getUsbPolicy());
             getModel().setBootSequence(template.getDefaultBootSequence());
             
getModel().getIsHighlyAvailable().setEntity(template.isAutoStartup());
+            
getModel().getWatchdogModel().setEntity(template.getWatchdogModel());
+            
getModel().getWatchdogAction().setEntity(template.getWatchdogAction());
 
             updateHostPinning(template.getMigrationSupport());
             doChangeDefautlHost(template.getDedicatedVmForVds());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
index f86d751..83322af 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
@@ -118,6 +118,8 @@
             getModel().getUsbPolicy().setSelectedItem(vmBase.getUsbPolicy());
             getModel().setBootSequence(vmBase.getDefaultBootSequence());
             
getModel().getIsHighlyAvailable().setEntity(vmBase.isAutoStartup());
+            getModel().getWatchdogModel().setEntity(vmBase.getWatchdogModel());
+            
getModel().getWatchdogAction().setEntity(vmBase.getWatchdogAction());
             
getModel().getIsDeleteProtected().setEntity(vmBase.isDeleteProtected());
             
getModel().getIsSmartcardEnabled().setEntity(vmBase.isSmartcardEnabled());
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
index d61767c..84094d2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
@@ -144,6 +144,8 @@
         
getModel().getAllowConsoleReconnect().setEntity(this.template.isAllowConsoleReconnect());
         getModel().setBootSequence(this.template.getDefaultBootSequence());
         
getModel().getIsHighlyAvailable().setEntity(this.template.isAutoStartup());
+        
getModel().getWatchdogAction().setEntity(this.template.getWatchdogAction());
+        
getModel().getWatchdogModel().setEntity(this.template.getWatchdogModel());
         
getModel().getTotalCPUCores().setEntity(Integer.toString(this.template.getNumOfCpus()));
         
getModel().getNumOfSockets().setSelectedItem(this.template.getNumOfSockets());
         getModel().getIsStateless().setEntity(this.template.isStateless());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
index f54d00e..7b66cec 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
@@ -1080,6 +1080,7 @@
         getCdAttached().setEntity(false);
 
         setIsHighlyAvailable(new NotChangableForVmInPoolEntityModel());
+        getIsHighlyAvailable().getEntityChangedEvent().addListener(this);
         setDontMigrateVM(new NotChangableForVmInPoolEntityModel());
         setIsTemplatePublic(new NotChangableForVmInPoolEntityModel());
         setKernel_parameters(new NotChangableForVmInPoolEntityModel());
@@ -1135,6 +1136,24 @@
 
         setHostCpu(new NotChangableForVmInPoolEntityModel());
         getHostCpu().getEntityChangedEvent().addListener(this);
+
+        setWatchdogAction(new NotChangableForVmInPoolListModel());
+        getWatchdogAction().getEntityChangedEvent().addListener(this);
+        ArrayList<String> watchDogActions = new ArrayList<String>();
+        watchDogActions.add("none"); //$NON-NLS-1$
+        watchDogActions.add("reset"); //$NON-NLS-1$
+        watchDogActions.add("shutdown"); //$NON-NLS-1$
+        watchDogActions.add("dump"); //$NON-NLS-1$
+        watchDogActions.add("pause"); //$NON-NLS-1$
+        getWatchdogAction().setItems(watchDogActions);
+
+        setWatchdogModel(new NotChangableForVmInPoolListModel());
+        getWatchdogModel().getEntityChangedEvent().addListener(this);
+        ArrayList<String> watchDogModels = new ArrayList<String>();
+        watchDogModels.add(""); //$NON-NLS-1$
+        watchDogModels.add("i6300esb"); //$NON-NLS-1$
+        watchDogModels.add("ib700"); //$NON-NLS-1$
+        getWatchdogModel().setItems(watchDogModels);
 
         setDontMigrateVM(new NotChangableForVmInPoolEntityModel());
         getDontMigrateVM().getEntityChangedEvent().addListener(this);
@@ -1228,6 +1247,7 @@
         InitAllowConsoleReconnect();
         InitMinimalVmMemSize();
         InitMaximalVmMemSize32OS();
+        InitWatchdog();
 
         behavior.Initialize(SystemTreeSelectedItem);
     }
@@ -1331,7 +1351,18 @@
                 if ((Boolean) getProvisioningClone_IsSelected().getEntity()) {
                     getProvisioning().setEntity(true);
                 }
+            } else if (sender == getWatchdogModel()) {
+                WatchdogModel_EntityChanged(sender, args);
             }
+        }
+    }
+
+    private void WatchdogModel_EntityChanged(Object sender, EventArgs args) {
+        if("".equals(getWatchdogModel().getEntity())) {
+            getWatchdogAction().setIsChangable(false);
+            getWatchdogAction().setEntity(""); //$NON-NLS-1$
+        } else {
+            getWatchdogAction().setIsChangable(true);
         }
     }
 
@@ -2244,4 +2275,28 @@
                 super.setIsChangable(value);
         }
     }
+
+    private ListModel watchdogModel;
+    public ListModel getWatchdogModel() {
+        return watchdogModel;
+    }
+
+    public void setWatchdogModel(ListModel watchdogModel) {
+        this.watchdogModel = watchdogModel;
+    }
+
+    private ListModel watchdogAction;
+
+    public ListModel getWatchdogAction() {
+        return watchdogAction;
+    }
+
+    public void setWatchdogAction(ListModel watchdogAction) {
+        this.watchdogAction = watchdogAction;
+    }
+
+    private void InitWatchdog() {
+//lofasz
+        }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
index 1191e56..078eba2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
@@ -1760,6 +1760,8 @@
         model.getCommands().add(tempVar2);
 
         
model.getIsHighlyAvailable().setEntity(vm.getStaticData().isAutoStartup());
+        model.getWatchdogAction().setEntity(vm.getWatchdogAction());
+        model.getWatchdogModel().setEntity(vm.getWatchdogModel());
     }
 
     private void OnNewTemplate()
@@ -1846,6 +1848,8 @@
         tempVar.setDeleteProtected((Boolean) 
model.getIsDeleteProtected().getEntity());
         tempVar.setDefaultBootSequence(model.getBootSequence());
         tempVar.setAutoStartup((Boolean) 
model.getIsHighlyAvailable().getEntity());
+        
tempVar.setWatchdogAction((String)model.getWatchdogAction().getEntity());
+        tempVar.setWatchdogModel((String)model.getWatchdogModel().getEntity());
         tempVar.setIsoPath(model.getCdImage().getIsChangable() ? (String) 
model.getCdImage().getSelectedItem() : ""); //$NON-NLS-1$
         tempVar.setUsbPolicy(vm.getUsbPolicy());
         tempVar.setInitrdUrl(vm.getInitrdUrl());
@@ -2424,6 +2428,9 @@
                 : ""); //$NON-NLS-1$
         getcurrentVm().setAutoStartup((Boolean) 
model.getIsHighlyAvailable().getEntity());
 
+        getcurrentVm().setWatchdogAction((String) 
model.getWatchdogAction().getEntity());
+        getcurrentVm().setWatchdogModel((String) 
model.getWatchdogModel().getEntity());
+
         getcurrentVm().setInitrdUrl((String) 
model.getInitrd_path().getEntity());
         getcurrentVm().setKernelUrl((String) 
model.getKernel_path().getEntity());
         getcurrentVm().setKernelParams((String) 
model.getKernel_parameters().getEntity());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
index 36d10a8..6153c77 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
@@ -579,6 +579,8 @@
         getcurrentVm().setIsoPath(model.getCdImage().getIsChangable() ?
                 (String) model.getCdImage().getSelectedItem() : ""); 
//$NON-NLS-1$
         getcurrentVm().setAutoStartup((Boolean) 
model.getIsHighlyAvailable().getEntity());
+        
getcurrentVm().setWatchdogAction((String)model.getWatchdogAction().getEntity());
+        
getcurrentVm().setWatchdogModel((String)model.getWatchdogModel().getEntity());
         getcurrentVm().setInitrdUrl((String) 
model.getInitrd_path().getEntity());
         getcurrentVm().setKernelUrl((String) 
model.getKernel_path().getEntity());
         getcurrentVm().setKernelParams((String) 
model.getKernel_parameters().getEntity());


--
To view, visit http://gerrit.ovirt.org/12419
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibe5c36995dafcef6b3ad45a9e0ca8b0471324b70
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Laszlo Hornyak <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to