[prev in list] [next in list] [prev in thread] [next in thread] 

List:       luci-commits
Subject:    [Luci-commits] [luci] luci: Add support for fence device attributes
From:       rmccabe () fedoraproject ! org (Ryan McCabe)
Date:       2012-12-05 14:16:15
Message-ID: 20121205141615.4DEF8348F () hosted02 ! fedoraproject ! org
[Download RAW message or body]

commit f581a7e89a64a04816b083089aba4d4ce5f00274
Author: Ryan McCabe <rmccabe at redhat.com>
Date:   Wed Dec 5 09:14:22 2012 -0500

    luci: Add support for fence device attributes
    
    Add support for configuring the "delay" "power_timeout"
    "shell_timeout" "login_timeout" and "retry_on" attributes
    for fence devices that support them.
    
    Resolves: rhbz#883008
    
    Signed-off-by: Ryan McCabe <rmccabe at redhat.com>

 luci/controllers/cluster.py         |   29 +-
 luci/templates/fence_devices.html   |  796 ++++++++++++++++++++++++++++++++++-
 luci/templates/fence_instances.html |  180 +++++++-
 luci/validation/validate_fence.py   |  138 ++++++-
 4 files changed, 1109 insertions(+), 34 deletions(-)
---
diff --git a/luci/controllers/cluster.py b/luci/controllers/cluster.py
index 6e09e2f..593d6e1 100644
--- a/luci/controllers/cluster.py
+++ b/luci/controllers/cluster.py
@@ -515,7 +515,7 @@ class IndividualClusterController(BaseController):
             self.get_model()
             self.model.getResourceByName(resourcename)
         except Exception, e:
-            resourcename=None
+            resourcename = None
 
         return dict(page='nodes', name=resourcename, base_url=base_url, \
resources_cmd=resources_cmd)  
@@ -915,7 +915,7 @@ class IndividualClusterController(BaseController):
         redirect(tmpl_context.cluster_url)
 
     @expose("luci.templates.fence")
-    def fences(self, *args):
+    def fences(self, *args, **kwargs):
         fences_cmd = '/cluster/%s/fences_cmd' % self.name
 
         try:
@@ -924,14 +924,14 @@ class IndividualClusterController(BaseController):
             flash(e, status="warning")
             redirect("/")
  
-        if len(args) == 1:
-            if request.response_ext:
-                fencename = '%s%s' % (args[0], request.response_ext)
-            else:
-                fencename = args[0]
+        if len(args) >= 1:
+            fencename = '/'.join([unquote_plus(a) for a in args])
         else:
             fencename = None
 
+        if 'name' in request.params:
+            fencename = request.params['name']
+
         self.get_model()
         if not self.model.getFenceDeviceByName(fencename):
             fencename = None
@@ -941,6 +941,7 @@ class IndividualClusterController(BaseController):
     @expose("luci.templates.fence")
     def fences_cmd(self, command=None, **kw):
         tmpl_context.cluster_url = '/cluster/%s/fences' % self.name
+        redir_fmt = '%s?name=%s'
 
         try:
             permission_config(self.name)
@@ -973,12 +974,18 @@ class IndividualClusterController(BaseController):
             fret = validateNewFenceDevice(self.model, **kw)
             if fret[0] is True:
                 rh.update_cluster_conf(self.model)
-                log.info('User "%s" created fence devices "%s" in cluster "%s"'
+                flash(_('Created fence device "%s"') % cur_list[0])
+                log.info('User "%s" created fence device "%s" in cluster "%s"'
                     % (self.username, ', '.join(cur_list), self.name))
+                redirect(redir_fmt
+                    % (tmpl_context.cluster_url, quote_plus(cur_list[0])))
             else:
                 msgs = fret[1]
                 if msgs and len(msgs) > 0:
                     flash(', '.join(msgs), status="error")
+                else:
+                    flash(_('Creating fence device %s failed') % cur_list[0],
+                            status="error")
         elif command == 'Delete':
             log.info('User "%s" deleted fence devices "%s" in cluster "%s"'
                 % (self.username, ', '.join(cur_list), self.name))
@@ -995,12 +1002,18 @@ class IndividualClusterController(BaseController):
             fret = validateFenceDevice(self.model, **kw)
             if fret[0] is True:
                 rh.update_cluster_conf(self.model)
+                flash(_('Edited fence device "%s"') % cur_list[0])
                 log.info('User "%s" updated fence device "%s" in cluster "%s"'
                     % (self.username, ', '.join(cur_list), self.name))
+                redirect(redir_fmt
+                    % (tmpl_context.cluster_url, quote_plus(cur_list[0])))
             else:
                 msgs = fret[1]
                 if msgs and len(msgs) > 0:
                     flash(', '.join(msgs), status="error")
+                else:
+                    flash(_('Updating fence device %s failed') % cur_list[0],
+                            status="error")
         else:
             log.error('User "%s" submitted unknown command "%s" for fence devices \
                "%s" from cluster "%s"'
                 % (self.username, command, ', '.join(cur_list), self.name))
diff --git a/luci/templates/fence_devices.html b/luci/templates/fence_devices.html
index d0a2b4c..c2d86b3 100644
--- a/luci/templates/fence_devices.html
+++ b/luci/templates/fence_devices.html
@@ -60,6 +60,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -211,6 +239,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -348,6 +404,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -485,6 +569,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -771,6 +883,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -843,6 +983,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1107,6 +1275,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1179,6 +1375,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1258,6 +1482,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1322,17 +1574,38 @@
       </td>
     </tr>
     <tr>
-      <td>Separator</td>
+      <td>Power Wait (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_wait"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
       <td>
-        <input type="text" class="text" name="separator"
-          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('separator')} or {}"/> +        <input type="text" \
class="text" name="power_timeout" +          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/>  </td>
     </tr>
     <tr>
-      <td>Power Wait (seconds)</td>
+      <td>Shell Timeout (seconds)</td>
       <td>
-        <input type="text" class="text" name="power_wait"
-          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/> +        <input type="text" \
class="text" name="shell_timeout" +          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/>  </td>
     </tr>
   </table>
@@ -1423,6 +1696,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1495,6 +1796,41 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1584,6 +1920,13 @@
         </select>
       </td>
     </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1676,6 +2019,41 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1739,6 +2117,55 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('telnet_port')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Force Command Prompt</td>
+      <td>
+        <input type="text" class="text" name="cmd_prompt"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('cmd_prompt')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Wait (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_wait"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1881,6 +2308,27 @@
         </py:with>
       </td>
     </tr>
+    <tr>
+      <td>IPMI Operation Timeout</td>
+      <td>
+        <input name="timeout" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('timeout')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Wait (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_wait"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -1951,6 +2399,41 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2100,6 +2583,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2186,6 +2697,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2318,6 +2857,41 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2381,6 +2955,13 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('hidden_page')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2532,6 +3113,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2626,6 +3235,41 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (seconds)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2775,6 +3419,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -2851,6 +3523,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -3156,6 +3856,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -3307,6 +4035,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
@@ -3393,6 +4149,34 @@
           py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_wait')} or {}"/>  </td>
     </tr>
+    <tr>
+      <td>Power Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="power_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('power_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Shell Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="shell_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('shell_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Login Timeout (seconds)</td>
+      <td>
+        <input type="text" class="text" name="login_timeout"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('login_timeout')} or {}"/> +      </td>
+    </tr>
+    <tr>
+      <td>Times to Retry Power On Operation</td>
+      <td>
+        <input type="text" class="text" name="retry_on"
+          py:attrs="cur_fencedev and {'value': \
cur_fencedev.getAttribute('retry_on')} or {}"/> +      </td>
+    </tr>
   </table>
 
   <py:if test="cur_fencedev">
diff --git a/luci/templates/fence_instances.html \
b/luci/templates/fence_instances.html index 66721c6..8032cd2 100644
--- a/luci/templates/fence_instances.html
+++ b/luci/templates/fence_instances.html
@@ -19,6 +19,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('switch')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -74,6 +81,13 @@
       </td>
     </tr>
     <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
       <td>Unfencing</td>
       <td>
         <input type="checkbox" class="checkbox" name="unfencing"
@@ -114,6 +128,13 @@
       </td>
     </tr>
     <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
       <td>Path to SSH Identity File</td>
       <td>
         <input type="text" class="text" name="identity_file"
@@ -145,6 +166,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -200,6 +228,13 @@
       </td>
     </tr>
     <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
         <td>
             <span title="Enable SSL operation">Use SSL</span>
         </td>
@@ -232,6 +267,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -279,6 +321,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -326,6 +375,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -408,6 +464,13 @@
       </td>
     </tr>
     <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
+    <tr>
       <td>Unfencing</td>
       <td>
         <input type="checkbox" class="checkbox" name="unfencing"
@@ -521,6 +584,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('domain')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -545,6 +615,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('domain')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -569,6 +646,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -640,6 +724,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -687,6 +778,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -711,6 +809,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -735,6 +840,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -759,6 +871,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -783,6 +902,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -807,6 +933,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -831,6 +964,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -915,6 +1055,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -929,16 +1076,6 @@
     py:attrs="cur_fence_dev_id and {'value': cur_fence_dev_id} or {}" />
 </div>
 
-<div py:def="fence_drac_instance(cur_fence_inst, cur_fence_dev_id, fi_id, **kw)" \
                id="fence_drac_instance"
-  py:attrs="fi_id is not None and {'id': fi_id, 'class':'fenceinst'}">
-
-  <div class="emptyfenceinst">No additional parameters</div>
-  <input type="hidden" name="fence_type" value="fence_drac" />
-  <input type="hidden" name="fence_instance" value="1" />
-  <input type="hidden" name="parent_fencedev"
-    py:attrs="cur_fence_dev_id and {'value': cur_fence_dev_id} or {}" />
-</div>
-
 <div py:def="fence_alom_instance(cur_fence_inst, cur_fence_dev_id, fi_id, **kw)" \
id="fence_alom_instance"  py:attrs="fi_id is not None and {'id': fi_id, \
'class':'fenceinst'}">  
@@ -1049,6 +1186,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td colspan="2">
       <div>
         <input type="button" name="remove_fence" value="Remove this instance"
@@ -1073,6 +1217,13 @@
           py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('port')}"/>  </td>
     </tr>
+    <tr>
+      <td>Delay (optional)</td>
+      <td>
+        <input name="delay" type="text" class="text"
+          py:attrs="cur_fence_inst and {'value': \
cur_fence_inst.getAttribute('delay')}"/> +      </td>
+    </tr>
     <tr><td>
       <fieldset>
         <legend>SSH</legend>
@@ -1119,15 +1270,6 @@
     py:attrs="cur_fence_dev_id and {'value': cur_fence_dev_id} or {}" />
 </div>
 
-<div py:def="fence_drac_instance(cur_fence_inst, cur_fence_dev_id, fi_id, **kw)" \
                id="fence_drac_instance"
-  py:attrs="fi_id is not None and {'id': fi_id, 'class':'fenceinst'}">
-
-  <div class="emptyfenceinst">No additional parameters</div>
-  <input type="hidden" name="fence_type" value="fence_drac" />
-  <input type="hidden" name="fence_instance" value="1" />
-  <input type="hidden" name="parent_fencedev"
-    py:attrs="cur_fence_dev_id and {'value': cur_fence_dev_id} or {}" />
-</div>
 <div py:def="fence_instance_container(nodename)"
   id="fence_instance_container" class="hidden">
 ${fence_apc_instance(None, None, None)}
diff --git a/luci/validation/validate_fence.py b/luci/validation/validate_fence.py
index af6c965..64ddc00 100644
--- a/luci/validation/validate_fence.py
+++ b/luci/validation/validate_fence.py
@@ -148,6 +148,10 @@ def val_apc_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
 	return errors
@@ -161,6 +165,10 @@ def val_wti_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -174,6 +182,10 @@ def val_virsh_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -240,6 +252,10 @@ def val_sanbox2_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -253,6 +269,10 @@ def val_bladecenter_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -275,8 +295,11 @@ def val_vmware_soap_fd(fencedev, fence_name, **kw):
 		('login', True),
 		('passwd', False),
 		('passwd_script', False),
-		('separator', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -292,6 +315,10 @@ def val_vmware_fd(fencedev, fence_name, **kw):
 		('vmpasswd', False),
 		('vmpasswd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -315,6 +342,10 @@ def val_lpar_fd(fencedev, fence_name, **kw):
 		('passwd_script', False),
 		('hmc_version', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -347,6 +378,11 @@ def val_rsa_fd(fencedev, fence_name, **kw):
 		('passwd_script', False),
 		('cmd_prompt', False),
 		('power_wait', False),
+		('delay', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -359,6 +395,13 @@ def val_rsb_fd(fencedev, fence_name, **kw):
 		('telnet_port', False),
 		('passwd', False),
 		('passwd_script', False),
+		('cmd_prompt', False),
+		('power_wait', False),
+		('delay', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -371,6 +414,7 @@ def val_eps_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('hidden_page', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -388,6 +432,11 @@ def val_drac5_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('delay', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -402,6 +451,7 @@ def val_drac_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('drac_version', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -426,6 +476,9 @@ def val_ipmilan_fd(fencedev, fence_name, **kw):
 		('lanplus', False),
 		('cipher', False),
 		('privlvl', False),
+		('timeout', False),
+		('power_wait', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -439,6 +492,11 @@ def val_alom_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('delay', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -453,6 +511,10 @@ def val_ldom_fd(fencedev, fence_name, **kw):
 		('passwd_script', False),
 		('cmd_prompt', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -505,6 +567,10 @@ def val_ibmblade_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -520,6 +586,10 @@ def val_hpblade_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -540,6 +610,10 @@ def val_ifmib_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -560,6 +634,10 @@ def val_cisco_mds_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -575,6 +653,10 @@ def val_cisco_ucs_fd(fencedev, fence_name, **kw):
 		('ssl', False),
 		('suborg', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -603,6 +685,10 @@ def val_apc_snmp_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -623,6 +709,10 @@ def val_intelmodular_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -639,6 +729,11 @@ def val_ilo_mp_fd(fencedev, fence_name, **kw):
 		('identity_file', False),
 		('cmd_prompt', False),
 		('power_wait', False),
+		('delay', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -652,6 +747,11 @@ def val_ilo_fd(fencedev, fence_name, **kw):
 		('passwd', False),
 		('passwd_script', False),
 		('power_wait', False),
+		('delay', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -672,6 +772,10 @@ def val_ipdu_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -692,6 +796,10 @@ def val_eaton_snmp_fd(fencedev, fence_name, **kw):
 		('snmp_priv_passwd', False),
 		('snmp_priv_passwd_script', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -706,6 +814,10 @@ def val_rhevm_fd(fencedev, fence_name, **kw):
 		('passwd_script', False),
 		('ssl', False),
 		('power_wait', False),
+		('power_timeout', False),
+		('shell_timeout', False),
+		('login_timeout', False),
+		('retry_on', False),
 	)
 
 	errors = config_fence_attr(params, fencedev, fence_name, **kw)
@@ -818,6 +930,7 @@ def val_apc_fi(fenceinst, parent_name, **kw):
 		('switch', False),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -828,6 +941,7 @@ def val_wti_fi(fenceinst, parent_name, **kw):
 		('port', True),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -838,6 +952,7 @@ def val_virsh_fi(fenceinst, parent_name, **kw):
 		('port', True),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -870,6 +985,7 @@ def val_gnbd_fi(fenceinst, parent_name, **kw):
 def val_sanbox2_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -881,6 +997,7 @@ def val_bladecenter_fi(fenceinst, parent_name, **kw):
 		('switch', False),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -892,6 +1009,7 @@ def val_ipdu_fi(fenceinst, parent_name, **kw):
 		('switch', False),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -909,6 +1027,7 @@ def val_egenera_fi(fenceinst, parent_name, **kw):
 	params = (
 		('lpan', True),
 		('pserver', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -920,6 +1039,7 @@ def val_lpar_fi(fenceinst, parent_name, **kw):
 		('managed', True),
 		('secure', True),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -936,6 +1056,7 @@ def val_bullpap_fi(fenceinst, parent_name, **kw):
 def val_xvm_fi(fenceinst, parent_name, **kw):
 	params = (
 		('domain', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -944,6 +1065,7 @@ def val_xvm_fi(fenceinst, parent_name, **kw):
 def val_virt_fi(fenceinst, parent_name, **kw):
 	params = (
 		('domain', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -954,6 +1076,7 @@ def val_vmware_soap_fi(fenceinst, parent_name, **kw):
 		('ssl', False),
 		('port', False),
 		('uuid', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -966,6 +1089,7 @@ def val_vmware_fi(fenceinst, parent_name, **kw):
 		('port', True),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -984,6 +1108,7 @@ def val_ldom_fi(fenceinst, parent_name, **kw):
 		('port', True),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -992,6 +1117,7 @@ def val_ldom_fi(fenceinst, parent_name, **kw):
 def val_cisco_mds_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1000,6 +1126,7 @@ def val_cisco_mds_fi(fenceinst, parent_name, **kw):
 def val_cisco_ucs_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1008,6 +1135,7 @@ def val_cisco_ucs_fi(fenceinst, parent_name, **kw):
 def val_eps_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1016,6 +1144,7 @@ def val_eps_fi(fenceinst, parent_name, **kw):
 def val_ibmblade_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1026,6 +1155,7 @@ def val_hpblade_fi(fenceinst, parent_name, **kw):
 		('port', True),
 		('secure', False),
 		('identity_file', False),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1034,6 +1164,7 @@ def val_hpblade_fi(fenceinst, parent_name, **kw):
 def val_ifmib_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1042,6 +1173,7 @@ def val_ifmib_fi(fenceinst, parent_name, **kw):
 def val_apc_snmp_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1050,6 +1182,7 @@ def val_apc_snmp_fi(fenceinst, parent_name, **kw):
 def val_intelmodular_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1067,6 +1200,7 @@ def val_scsi_fi(fenceinst, parent_name, **kw):
 def val_rhevm_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
@@ -1075,10 +1209,12 @@ def val_rhevm_fi(fenceinst, parent_name, **kw):
 def val_eaton_snmp_fi(fenceinst, parent_name, **kw):
 	params = (
 		('port', True),
+		('delay', False),
 	)
 
 	errors = config_fence_attr(params, fenceinst, parent_name, **kw)
 	return errors
+
 def val_noop_fi(fenceinst, parent_name, **kw):
 	return []
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic