def post_poweron(self): # XXX: fixme self.start_related_events(on=True) if self.config["mode"] == 'dhcp': if self.needsudo(): os.system(settings.get('sudo') + ' "dhclient ' + self.name + '"') else: os.system('dhclient ' + self.name) elif self.config["mode"] == 'manual': if self.needsudo(): # XXX Ugly, can't we ioctls? os.system(settings.get('sudo') + ' "/sbin/ifconfig ' + self.name + ' ' + self.config["ip"] + ' netmask ' + self.config["nm"] + '"') if (len(self.config["gw"]) > 0): os.system(settings.get('sudo') + ' "/sbin/route add default gw ' + self.config["gw"] + ' dev ' + self.name + '"') else: os.system('/sbin/ifconfig ' + self.name + ' ' + self.config["ip"] + ' netmask ' + self.config["nm"]) if (len(self.config["gw"]) > 0): os.system('/sbin/route add default gw ' + self.config["gw"] + ' dev ' + self.name) else: return
def restore_last(self, factory, settings=settings): """Restore the last project if found or create a new one.""" try: os.makedirs(os.path.join(settings.get("workspace"), "vimages")) except OSError as e: if e.errno != errno.EEXIST: raise name = settings.get("current_project") project = self.get_project(name) try: return project.open(factory, settings) except errors.ProjectNotExistsError: if DEFAULT_PROJECT_RE.match(name): project.create(name) project.open(factory, settings) return project else: logger.error(cannot_find_project, name=name) for i in itertools.count(): name = "{0}_{1}".format(settings.DEFAULT_PROJECT, i) project = self.get_project(name) try: project.create(name) project.open(factory, settings) return project except errors.ProjectExistsError: pass
def start_process(value): prog, args = value logger.info(start_brick, args=lambda: " ".join(args)) # usePTY? if self.needsudo(): prog = settings.get("sudo") args = [settings.get("sudo"), "--"] + args self.proc = self.process_protocol(self) reactor.spawnProcess(self.proc, prog, args, os.environ)
def open(self, factory, settings=settings): if self._manager.current == self: return if not self.exists(): raise errors.ProjectNotExistsError(self.name) self.close(factory, settings) logger.debug(open_project, name=self.name) # save the old setting parameters # Bug #1410679 old_proj = settings.get("current_project") old_vbhome = settings.VIRTUALBRICKS_HOME # save new setting parameters # Bug #1410679 settings.set("current_project", self.name) settings.VIRTUALBRICKS_HOME = self.path settings.store() try: configfile.restore(factory, self._project.path) except EnvironmentError as e: # if an exception is raised then revert settings to the # default values # Bug #1410679 settings.set("current_project", old_proj) settings.VIRTUALBRICKS_HOME = old_vbhome settings.store() if e.errno in (errno.ENOENT, errno.ENOTDIR): raise errors.ProjectNotExistsError(self.name) raise # if an exception is raised, this value is not changed, i.e. it # is the default self._manager.current = self return self
def connected(self): if self._antiloop: if settings.get("erroronloop"): self.logger.error(link_loop) self._antiloop = False return defer.fail(errors.LinkLoopError()) self._antiloop = True if self.sock is None or self.sock.brick is None: self._antiloop = False return defer.fail(errors.NotConnectedError()) # special case where a brick (vm) is plugged to itself: # brick -> plug -> sock <- brick if self.sock.brick is self.brick: self._antiloop = False return defer.succeed(self.brick) def clear_antiloop(passthru): self._antiloop = False return passthru d = self.sock.brick.poweron() d.addBoth(clear_antiloop) return d
def __init__(self, path=None): if path is None: path = settings.get("workspace") self._path = filepath.FilePath(path) try: self._path.makedirs() except OSError as e: if e.errno != errno.EEXIST: raise
def _create_cow(self, cowname): if abspath_qemu('qemu-img', return_relative=False) is None: msg = _("qemu-img not found! I can't create a new image.") return defer.fail(errors.BadConfigError(msg)) logger.info(new_cow, base=self._get_base()) args = ["create", "-b", self._get_base(), "-f", settings.get("cowfmt"), cowname] exit = getQemuOutputAndValue("qemu-img", args, os.environ) exit.addCallback(self._sync) exit.addCallback(lambda _: cowname) return exit
def abspath_qemu(executable, return_relative=True): from virtualbricks import settings return _abspath_exe(settings.get('qemupath'), executable, return_relative)
def check_missing_qemu(path=None): if path is None: from virtualbricks import settings path = settings.get('qemupath') missing = list(_check_missing(path, qemu_bins)) return missing, sorted(set(qemu_bins) - set(missing))
def check_missing_vde(path=None): if path is None: from virtualbricks import settings path = settings.get('vdepath') return list(_check_missing(path, vde_bins))
def do_get(self, name): # if name: if settings.has_option(name): self.sendLine("%s = %s" % (name, settings.get(name))) else: self.sendLine("No such option %s" % name)
def restore(factory, filename=None): if filename is None: workspace = settings.get("workspace") project = settings.get("current_project") filename = os.path.join(workspace, project, ".project") _config.restore(factory, filename)
def open_console(self): term = settings.get("term") args = [term, "-e", abspath_vde(self.term_command), self.console()] get_args = lambda: " ".join(args) logger.info(open_console, name=self.name, args=get_args) reactor.spawnProcess(TermProtocol(), term, args, os.environ)
def patch_settings(suite, **kwds): olds = dict((k, settings.get(k)) for k in kwds.iterkeys()) suite.addCleanup(restore_settings, olds) suite.patch(settings, "store", lambda: None) for k, v in kwds.iteritems(): settings.set(k, v)