support for the no-hangcheck option
[plcapi.git] / PLC / Methods / GetBootMedium.py
index d556525..0db990f 100644 (file)
@@ -3,6 +3,7 @@ import random
 import base64
 import os
 import os.path
+import time
 
 from PLC.Faults import *
 from PLC.Method import Method
@@ -92,6 +93,7 @@ class GetBootMedium(Method):
         - 'partition' - for USB actions only
         - 'cramfs'
         - 'serial' or 'serial:<console_spec>'
+        - 'no-hangcheck'
         console_spec (or 'default') is passed as-is to bootcd/build.sh
         it is expected to be a colon separated string denoting
         tty - baudrate - parity - bits
@@ -174,6 +176,8 @@ class GetBootMedium(Method):
         if renew_key:
             file += 'NODE_ID="%d"\n' % node['node_id']
             file += 'NODE_KEY="%s"\n' % node['key']
+            # not used anywhere, just a note for operations people
+            file += 'KEY_RENEWAL_DATE="%s"\n' % time.strftime('%Y-%m-%d at %H:%M:%S +0000',time.gmtime())
 
         if primary['mac']:
             file += 'NET_DEVICE="%s"\n' % primary['mac'].lower()
@@ -279,19 +283,21 @@ class GetBootMedium(Method):
                 raise PLCInvalidArgument, "Options are not supported for node configs"
         else:
             # create a dict for build.sh 
-            optdict={}
+            build_sh_spec={'-k':[]}
             for option in options:
                 if option == "cramfs":
-                    optdict['cramfs']=True
+                    build_sh_spec['cramfs']=True
                 elif option == 'partition':
                     if type != "usb":
                         raise PLCInvalidArgument, "option 'partition' is for USB images only"
                     else:
                         type="usb_partition"
                 elif option == "serial":
-                    optdict['serial']='default'
+                    build_sh_spec['serial']='default'
                 elif option.find("serial:") == 0:
-                    optdict['serial']=option.replace("serial:","")
+                    build_sh_spec['serial']=option.replace("serial:","")
+                elif option == "no-hangcheck":
+                    build_sh_spec['-k'].append('hangcheck_reboot=0')
                 else:
                     raise PLCInvalidArgument, "unknown option %s"%option
 
@@ -420,9 +426,15 @@ class GetBootMedium(Method):
                 node_image = "%s/%s%s"%(self.WORKDIR,nodename,suffix)
 
                 # make build's arguments
-                serial_arg=""
-                if "cramfs" in optdict: type += "_cramfs"
-                if "serial" in optdict: serial_arg = "-s %s"%optdict['serial']
+                build_sh_options=""
+                if "cramfs" in build_sh_spec: 
+                    type += "_cramfs"
+                if "serial" in build_sh_spec: 
+                    build_sh_options += " -s %s"%build_sh_spec['serial']
+                
+                for k_option in build_sh_options['-k']:
+                    build_sh_options += " -k %s"%k_option
+
                 log_file="%s.log"%node_image
                 # invoke build.sh
                 build_command = '%s -f "%s" -o "%s" -t "%s" %s &> %s' % (self.BOOTCDBUILD,