Example #1
0
 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
Example #2
0
    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
Example #3
0
 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)
Example #4
0
    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
Example #5
0
    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
Example #6
0
 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
Example #8
0
def abspath_qemu(executable, return_relative=True):
    from virtualbricks import settings

    return _abspath_exe(settings.get('qemupath'), executable, return_relative)
Example #9
0
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))
Example #10
0
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))
Example #11
0
 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)
Example #12
0
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)
Example #13
0
 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)
Example #14
0
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)