def addHostOnlyInterface(): def parseResult(r): match = re.match("^Interface '(.+?)' was successfully created", r) if match: return OK(match.group(1)) else: return Fail(VirtualBoxError("Failed to create a new Host Only Interface")) return vboxManager("hostonlyif", "create").bind(parseResult)
def importOVF(importParams, name, ovfFile): ''' Import the OVF file as a virtual box vm. ''' ovfFile = Shell.normalizePath(ovfFile) importParams.insert(0, '"' + ovfFile + '"') return vboxManager("import", " ".join(importParams)) \ .then(defer(readMachineID, name))
def addPortForwards(ports, uuid): args = [] for port in ports: args.append(port.getCreateArg()) if len(args) > 0: return vboxManager("modifyvm", "\"%s\" %s" % (uuid, " ".join(args))) else: return OK(None)
def configureHostOnlyInterface(name, ip, netmask): net = _netFrom(ip + "/" + netmask) if net.isFail(): return net net = net.getOK() # if net.version == 6: # return vboxManager("hostonlyif", "ipconfig \"%s\" --ipv6 \"%s\" --netmasklengthv6 \"%s\"" % (name, net.ip, net.prefixlen)) return vboxManager("hostonlyif", "ipconfig \"%s\" --ip \"%s\" --netmask \"%s\"" % (name, net.ip, net.netmask))
def readMachineID(name): ''' Retrieve the driver specific machine ID for a machine name. ''' def findMachineID(machs): revmach = dict(zip(machs.values(), machs.keys())) return OK(revmach[name]) if name in revmach else Fail(MachineDoesNotExist("No Machine ID found for \"%s\"" % name)) return vboxManager("list", "vms") \ .bind(parseMachinesList) \ >> findMachineID
def inspectOVF(ovfFile): ''' Inspect an OVF file to extract it's examined output ''' return vboxManager("import", '-n "%s"' % Shell.normalizePath(ovfFile))
def removeSharedFolder(folder, uuid): return vboxManager("sharedfolder", "remove \"%s\" --name \"%s\"" % (uuid, folder.name))
def enableSharedFolderSymlinks(folder, uuid): symlinksKey = "VBoxInternal2/SharedFoldersEnableSymlinksCreate/%s" % folder.name return vboxManager("setextradata", "\"%s\" \"%s\" \"%s\"" % (uuid, symlinksKey, 1))
def readWaitGuestProperty(uuid, pattern, timeout=1000): logger.debug("Read wait(%ss) on pattern %s on %s" % (timeout, pattern, uuid)) return vboxManager("guestproperty", "wait %s %s --timeout %s" % (uuid, pattern, timeout))
def readMachineInfo(uuid): return vboxManager("showvminfo", "--machinereadable \"%s\"" % uuid) \ .bind(parseMachineInfo)
def disableDHCP(hoif_name): arg = "--ifname \"%s\" --disable" % hoif_name return vboxManager("dhcpserver", "modify %s" % arg)
def readMachineExists(uuid): return vboxManager("list", "vms").bind(defer(parseMachinesForID, uuid=uuid))
def pause(uuid): return vboxManager("controlvm", "\"%s\" pause" % uuid) \ .bind(lambda x: OK(uuid))
def suspend(uuid): return vboxManager("controlvm", "\"%s\" savestate" % uuid) \ .bind(lambda x: OK(uuid))
def halt(uuid): return vboxManager("controlvm", "\"%s\" poweroff soft" % uuid) \ .bind(lambda x: OK(uuid))
def start(uuid): return vboxManager("startvm", "--type headless \"%s\"" % (uuid)) \ .bind(lambda x: OK(uuid))
def configureProfile(uuid, cpus, memory): return vboxManager("modifyvm", "\"%s\" --cpus %s --memory %s" % (uuid, cpus, memory))
def configureAdapter(uuid, adapterId, adapterSettings): return vboxManager("modifyvm", "\"%s\" %s" % (uuid, adapterSettings.getAsArg(adapterId)))
def readGuestProperty(uuid, prop): logger.debug("Read guest property %s on %s" % (prop, uuid)) return vboxManager("guestproperty", "get %s %s" % (uuid, prop)) \ .bind(parseGuestProperty)
def readDHCPs(): return vboxManager("list", "dhcpservers") \ .bind(defer(_mapAsBlocks, func=parseDHCPBlock))
def readHostOnlyInterfaces(): return vboxManager("list", "hostonlyifs") \ .bind(defer(_mapAsBlocks, func=parseHostOnlyInterfaceBlock))
def resume(uuid): return vboxManager("controlvm", "\"%s\" resume" % uuid) \ .bind(lambda x: OK(uuid))
def addDHCP(hoif_name, gateway, netmask, lowerIP, upperIP): arg = "--ifname \"%s\" --ip \"%s\" --netmask \"%s\" --lowerip \"%s\" --upperip \"%s\" --enable" % ( hoif_name, gateway, netmask, lowerIP, upperIP) return vboxManager("dhcpserver", "add %s" % arg) \ .then(defer(enableDHCP, hoif_name=hoif_name))
def readPortForwards(uuid): return vboxManager("showvminfo", "--machinereadable \"%s\"" % uuid) >> parsePortForwards
def removeDHCP(hoif_name): return vboxManager("dhcpserver", "remove --ifname \"%s\"" % hoif_name)
def addSharedFolder(folder, uuid): return vboxManager("sharedfolder", "add \"%s\" --name \"%s\" --hostpath \"%s\"" % (uuid, folder.name, folder.hostPath)) \ .then(defer(enableSharedFolderSymlinks, folder=folder, uuid=uuid))
def terminate(uuid): return vboxManager("controlvm", "\"%s\" poweroff" % uuid) \ .bind(lambda x: OK(uuid))
def readMachineState(uuid): return vboxManager("showvminfo", "--machinereadable \"%s\"" % uuid) \ .catch(lambda err: OK("inexistent") if err.code == "VBOX_E_OBJECT_NOT_FOUND" else Fail(err)) \ .bind(parseMachineState)
def readPortForward(uuid, name=None): return vboxManager("showvminfo", "--machinereadable \"%s\"" % uuid) \ >> parsePortForwards \ >> defer(filterPortForwards, name=name)
def delete(uuid): return vboxManager("unregistervm", "--delete \"%s\"" % (uuid)) \ .bind(lambda x: OK(uuid))