corrected terminate / update template / etc.
1.1 --- a/OpenSecurity/bin/opensecurityd.pyw Thu May 22 12:17:57 2014 +0200
1.2 +++ b/OpenSecurity/bin/opensecurityd.pyw Thu May 22 16:01:28 2014 +0100
1.3 @@ -124,7 +124,7 @@
1.4
1.5 machine_folder = Cygwin.cygPath(gvm_mgr.getMachineFolder())
1.6 download_initial_image_script = Cygwin.cygPath(os.path.abspath(os.path.join(os.path.split(__file__)[0], 'download_initial_image.sh')))
1.7 - Cygwin.bashExecute(download_initial_image_script + ' \'' + machine_folder + '\'', wait_return = False, stdout = trace_file, stderr = trace_file)
1.8 + Cygwin.bashExecute('\\"' + download_initial_image_script + '\\" \'' + machine_folder + '\'', wait_return = False, stdout = trace_file, stderr = trace_file)
1.9
1.10 res = '{ "fetch_log": "' + trace_file_name.replace('\\', '\\\\') + '" }'
1.11 return res
1.12 @@ -140,12 +140,22 @@
1.13 log_call(web.ctx.environ)
1.14 global gvm_mgr
1.15
1.16 + gvm_mgr.stop()
1.17 + gvm_mgr.cleanup()
1.18 +
1.19 + if gvm_mgr.vmRootName in gvm_mgr.listVM():
1.20 + gvm_mgr.poweroffVM(gvm_mgr.vmRootName)
1.21 + gvm_mgr.storageDetach(gvm_mgr.vmRootName)
1.22 + gvm_mgr.removeSnapshots(gvm_mgr.vmRootName)
1.23 + #TODO:// unregister vmdk with the vbox
1.24 + gvm_mgr.removeVMFolder(gvm_mgr.vmRootName)
1.25 +
1.26 trace_file_name = os.path.join(Environment('OpenSecurity').log_path, 'OpenSecurity_initial_import.log')
1.27 trace_file = open(trace_file_name, 'w+')
1.28
1.29 vm_image = Cygwin.cygPath(gvm_mgr.getMachineFolder()) + '/OsecVM.ova'
1.30 initial_import_script = Cygwin.cygPath(os.path.abspath(os.path.join(os.path.split(__file__)[0], 'initial_vm.sh')))
1.31 - Cygwin.bashExecute(initial_import_script + ' \'' + vm_image + '\'', wait_return = False, stdout = trace_file, stderr = trace_file)
1.32 + Cygwin.bashExecute('\\"' + initial_import_script + '\\" \'' + vm_image + '\'', wait_return = False, stdout = trace_file, stderr = trace_file)
1.33
1.34 res = '{ "init_log": "' + trace_file_name.replace('\\', '\\\\') + '" }'
1.35 return res
1.36 @@ -348,6 +358,7 @@
1.37 def GET(self):
1.38 log_call(web.ctx.environ)
1.39 global gvm_mgr
1.40 + gvm_mgr.stop()
1.41 gvm_mgr.cleanup()
1.42 global server
1.43 server.stop()
1.44 @@ -427,9 +438,8 @@
1.45 # gracefully
1.46 sys.exit(0)
1.47
1.48 -
1.49 -
1.50 # start
1.51 if __name__ == "__main__":
1.52 main()
1.53 + sys.exit(0)
1.54
2.1 --- a/OpenSecurity/bin/vmmanager.pyw Thu May 22 12:17:57 2014 +0200
2.2 +++ b/OpenSecurity/bin/vmmanager.pyw Thu May 22 16:01:28 2014 +0100
2.3 @@ -78,10 +78,7 @@
2.4 # only proceed if we have a working background environment
2.5 if self.backend_ok():
2.6 self.cleanup()
2.7 - self.browsingManager = BrowsingManager(self)
2.8 - self.browsingManager.start()
2.9 - self.rsdHandler = DeviceHandler(self)
2.10 - self.rsdHandler.start()
2.11 + self.start()
2.12 else:
2.13 logger.critical(self.status_message)
2.14
2.15 @@ -122,18 +119,34 @@
2.16 self.status_message = 'All is ok.'
2.17
2.18 return True
2.19 -
2.20 -
2.21 - def cleanup(self):
2.22 +
2.23 + def stop(self):
2.24 if self.rsdHandler != None:
2.25 self.rsdHandler.stop()
2.26 self.rsdHandler.join()
2.27 + self.rsdHandler = None
2.28 +
2.29 + if self.browsingManager != None:
2.30 + self.browsingManager.stop()
2.31 + self.browsingManager.join()
2.32 + self.browsingManager = None
2.33 +
2.34 + def start(self):
2.35 + self.stop()
2.36 + self.browsingManager = BrowsingManager(self)
2.37 + self.browsingManager.start()
2.38 + self.rsdHandler = DeviceHandler(self)
2.39 + self.rsdHandler.start()
2.40 +
2.41 +
2.42 + def cleanup(self):
2.43 + self.stop()
2.44 drives = self.getNetworkDrives()
2.45 for drive in drives.keys():
2.46 try:
2.47 result = urllib2.urlopen('http://127.0.0.1:8090/netumount?'+'drive_letter='+drive).readline()
2.48 except urllib2.URLError:
2.49 - logger.error("Network drive disconnect failed. OpenSecurity Tray client not running.")
2.50 + logger.info("Network drive disconnect skipped. OpenSecurity Tray client not started yet.")
2.51
2.52 for vm in self.listSDVM():
2.53 self.poweroffVM(vm)
2.54 @@ -291,18 +304,7 @@
2.55 def changeStorageType(self, filename, storage_type):
2.56 Cygwin.checkResult(Cygwin.vboxExecute('modifyhd \"' + filename + '\" --type ' + storage_type))
2.57
2.58 - # list storage snaphots for VM
2.59 - def updateTemplate(self):
2.60 -
2.61 - self.cleanup()
2.62 - self.poweroffVM('SecurityDVM')
2.63 - self.waitShutdown('SecurityDVM')
2.64 -
2.65 - # check for updates
2.66 - self.genCertificateISO('SecurityDVM')
2.67 - self.attachCertificateISO('SecurityDVM')
2.68 -
2.69 - self.storageDetach('SecurityDVM')
2.70 + def removeSnapshots(self, vm_name):
2.71 results = Cygwin.checkResult(Cygwin.vboxExecute('list hdds'))[1]
2.72 results = results.replace('Parent UUID', 'Parent')
2.73 items = list( "UUID:"+result for result in results.split('UUID:') if result != '')
2.74 @@ -316,8 +318,7 @@
2.75 props[k] = v;
2.76 snaps[props['UUID']] = props
2.77
2.78 -
2.79 - template_storage = self.machineFolder + '\SecurityDVM\SecurityDVM.vmdk'
2.80 + template_storage = self.machineFolder + '\\' + vm_name + '\\' + vm_name + '.vmdk'
2.81
2.82 # find template uuid
2.83 template_uuid = ''
2.84 @@ -333,7 +334,23 @@
2.85 logger.debug('removing snapshot ' + hdd['UUID'])
2.86 Cygwin.checkResult(Cygwin.vboxExecute('closemedium disk {' + hdd['UUID'] + '} --delete'))#[1]
2.87 # parse result 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
2.88 +
2.89 + # list storage snaphots for VM
2.90 + def updateTemplate(self):
2.91 + self.stop()
2.92 + self.cleanup()
2.93 + self.poweroffVM('SecurityDVM')
2.94 + self.waitShutdown('SecurityDVM')
2.95
2.96 + # check for updates
2.97 + self.genCertificateISO('SecurityDVM')
2.98 + self.attachCertificateISO('SecurityDVM')
2.99 +
2.100 + self.storageDetach('SecurityDVM')
2.101 + self.removeSnapshots('SecurityDVM')
2.102 +
2.103 + template_storage = self.machineFolder + '\\' + 'SecurityDVM' + '\\' + 'SecurityDVM' + '.vmdk'
2.104 + #TODO:// modify to take vm name as argument
2.105 self.changeStorageType(template_storage,'normal')
2.106 self.storageAttach('SecurityDVM')
2.107 self.startVM('SecurityDVM')
2.108 @@ -346,13 +363,18 @@
2.109 self.storageDetach('SecurityDVM')
2.110 self.changeStorageType(template_storage,'immutable')
2.111 self.storageAttach('SecurityDVM')
2.112 - self.rsdHandler = DeviceHandler(self)
2.113 - self.rsdHandler.start()
2.114 +
2.115 + self.start()
2.116
2.117 #remove VM from the system. should be used on VMs returned by listSDVMs
2.118 def removeVM(self, vm_name):
2.119 logger.info('Removing ' + vm_name)
2.120 Cygwin.checkResult(Cygwin.vboxExecute('unregistervm ' + vm_name + ' --delete'))
2.121 + #TODO:// try to close medium if still existing
2.122 + #Cygwin.checkResult(Cygwin.vboxExecute('closemedium disk {' + hdd['UUID'] + '} --delete'))#[1]
2.123 + self.removeVMFolder(vm_name)
2.124 +
2.125 + def removeVMFolder(self, vm_name):
2.126 machineFolder = Cygwin.cygPath(self.machineFolder)
2.127 Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '\\\"'))
2.128
2.129 @@ -629,7 +651,10 @@
2.130 self.vmm = vmmanager
2.131 self.restart = threading.Event()
2.132 self.started = threading.Event()
2.133 -
2.134 +
2.135 + def stop(self):
2.136 + self.running = False
2.137 + self.restart.set()
2.138
2.139 def run(self):
2.140 while self.running: