示例#1
0
文件: jsonrpc.py 项目: HalasNet/felix
class Dispatcher(object):
  def __init__ (self, key, logger, app):
    self._log = KeyAdapter(key, logger)
    self._app = app

    for k in dir(self):
      try:
        val = getattr(self, k)
        (path, methods) = val.route
      except TypeError:
        continue
      except AttributeError:
        continue

      try:
        app.add_url_rule(path, path.replace("/", "_"), val, methods=methods)
        self._log.debug("Added route for: %s with method <%s>" % (path, k))
      except Exception, e:
        self._log.exception("Adding URL Rule")
        continue
示例#2
0
文件: xmlrpc.py 项目: HalasNet/felix
class Dispatcher(object):
  def __init__ (self, key, log):
    self._key = key
    self._log = KeyAdapter(key, log)

  def _dispatch (self, method, params):
    self._log.info("Called: <%s>" % (method))
    if XMLRPC_LOGPARAMS:
      self._log.debug("Parameters: <%s>" % (str(params)))

    try:
      meth = getattr(self, "pub_%s" % (method))
    except AttributeError, e:
      self._log.warning("Client called unknown method: <%s>" % (method))

    try:
      return meth(*params)
    except Exception, e:
      if not hasattr(e, "_foam_logged"):
        self._log.exception("Call to known method <%s> failed!" % (method))
      raise Exception(str(e))
示例#3
0
class Dispatcher(object):
    def __init__(self, key, log):
        self._key = key
        self._log = KeyAdapter(key, log)

    def _dispatch(self, method, params):
        self._log.info("Called: <%s>" % (method))
        if XMLRPC_LOGPARAMS:
            self._log.debug("Parameters: <%s>" % (str(params)))

        try:
            meth = getattr(self, "pub_%s" % (method))
        except AttributeError, e:
            self._log.warning("Client called unknown method: <%s>" % (method))

        try:
            return meth(*params)
        except Exception, e:
            if not hasattr(e, "_foam_logged"):
                self._log.exception("Call to known method <%s> failed!" %
                                    (method))
            raise Exception(str(e))
示例#4
0
class Dispatcher(object):
    def __init__(self, key, logger, app):
        self._log = KeyAdapter(key, logger)
        self._app = app

        for k in dir(self):
            try:
                val = getattr(self, k)
                (path, methods) = val.route
            except TypeError:
                continue
            except AttributeError:
                continue

            try:
                app.add_url_rule(path,
                                 path.replace("/", "_"),
                                 val,
                                 methods=methods)
                self._log.debug("Added route for: %s with method <%s>" %
                                (path, k))
            except Exception, e:
                self._log.exception("Adding URL Rule")
                continue
示例#5
0
class _DB(object):
    def __init__(self):
        self._session = None
        self.log = KeyAdapter("ConfigDB", logging.getLogger("foam"))

        self._updateFuncs = {None: self._writeThrough}
        self._cfgItemsByKey = {}
        self._cfgItemsByID = {}

        self._attributesByID = {}
        self._attributesByName = {}
        self._usersByID = {}
        self._usersByName = {}
        self._rolesByID = {}
        self._rolesByName = {}
        if not os.path.exists(CONFIGDB_PATH):
            self.__initDBCore()

        self.importing = False

    @property
    def session(self):
        if self._session == None:
            self._session = scoped_session(
                sessionmaker(autocommit=False,
                             autoflush=False,
                             bind=engine,
                             expire_on_commit=False))
        if not self._session.is_active:
            self.log.warn("Rolling back inactive session")
            self._session.rollback()
        return self._session

    @session.deleter
    def session(self):
        self._session.remove()

    def close(self, sender, **extra):
        if self._session is not None:
            self._session.remove()
            self._session = None

    def connection(self):
        return self.session.connection()

    def commit(self):
        self.session.commit()

    def _writeThrough(self, key, newval):
        self.log.debug("Writing item (%s) with value (%s)" %
                       (key, str(newval)))
        return newval

    def __initDBCore(self):
        self.log.info("No database found: initializing schema")
        metadata.drop_all()
        metadata.create_all()
        self.__addDefaultVars()

    def __addDefaultVars(self):
        try:
            import socket
            site_tag = None
            site_tag = socket.getfqdn()
        except Exception:
            pass

        citems = []
        citems.append(ConfigItem().setKey("geni.max-lease").setValue(
            datetime.timedelta(weeks=2)).setDesc("Max sliver lease time").
                      setUpdateFuncName("foam.geni.lib.updateMaxLease"))
        citems.append(
            ConfigItem().setKey("geni.cert-dir").setValue(GENICERTDIR).setDesc(
                "Directory for trusted SLL root certificates."))
        citems.append(ConfigItem().setKey("geni.site-tag").setValue(
            site_tag).setDesc("Site tag for GENI aggregates (used in URNs)").
                      setUpdateFuncName("foam.geni.lib.siteTagChange"))

        citems.append(
            ConfigItem().setKey("geni.approval.approve-on-creation").setValue(
                0).setDesc("Approve slivers on creation.").setUpdateFuncName(
                    "foam.geni.approval.setMode"))
        citems.append(
            ConfigItem().setKey("geni.openflow.analysis-engine").setValue(
                True).setDesc("Run analysis engine for openflow slivers").
            setUpdateFuncName("foam.core.configdb.coerceBool"))

        citems.append(ConfigItem().setKey("geni.openflow.portgroups").setValue(
            None).setDesc("Internal Portgroups Storage").setUpdateFuncName(
                "foam.geni.approval.updatePortGroups"))
        citems.append(ConfigItem().setKey("geni.approval.user-urns").setValue(
            None).setDesc("Internal User URN Storage").setUpdateFuncName(
                "foam.geni.approval.updateUserURNs"))

        citems.append(
            ConfigItem().setKey("email.admin-addr").setValue(None).setDesc(""))
        citems.append(ConfigItem().setKey("email.smtp-server").setValue(
            None).setDesc(""))
        citems.append(
            ConfigItem().setKey("email.reply-to").setValue(None).setDesc(""))
        citems.append(
            ConfigItem().setKey("email.from").setValue(None).setDesc(""))
        citems.append(ConfigItem().setKey(
            "email.event.createsliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.disablesliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.rejectsliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.json-deletesliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.gapi-deletesliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.renewsliver.admin").setValue(True)
            .setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.approvesliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.expiresliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.expiresliverday.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.expiresliverweek.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.shutdownsliver.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.pendingqueue.admin").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.createsliver.exp").setValue(True).
            setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.disablesliver.exp").setValue(True)
            .setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.rejectsliver.exp").setValue(True).
            setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.json-deletesliver.exp").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.gapi-deletesliver.exp").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.renewsliver.exp").setValue(True).
            setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.approvesliver.exp").setValue(True)
            .setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(
            ConfigItem().setKey("email.event.expiresliver.exp").setValue(True).
            setDesc("").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.expiresliverday.exp").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.expiresliverweek.exp").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))
        citems.append(ConfigItem().setKey(
            "email.event.shutdownsliver.exp").setValue(True).setDesc(
                "").setUpdateFuncName("foam.core.configdb.coerceBool"))

        citems.append(
            ConfigItem().setKey("site.admin.name").setValue(None).setDesc(""))
        citems.append(
            ConfigItem().setKey("site.admin.email").setValue(None).setDesc(""))
        citems.append(
            ConfigItem().setKey("site.admin.phone").setValue(None).setDesc(""))
        citems.append(ConfigItem().setKey("site.location.address").setValue(
            None).setDesc(""))
        citems.append(ConfigItem().setKey(
            "site.location.organization").setValue(None).setDesc(""))
        citems.append(
            ConfigItem().setKey("site.description").setValue(None).setDesc(""))

        citems.append(ConfigItem().setKey("site.attachments").setValue(
            {}).setDesc("").setUpdateFuncName(
                "foam.geni.peerdb.updateAttachments"))

        #    citems.append(ConfigItem().setKey().setValue(None)
        #                  .setDesc(""))
        [self.createConfigItem(x) for x in citems]

    def initDB(self):
        self.__initDBCore()
        # Call init_config_db for all plugins

    def getConfigItemByID(self, cid):
        return self._cfgItemsByID.setdefault(cid, self.loadConfigItem(cid=cid))

    def getConfigItemByKey(self, key):
        return self._cfgItemsByKey.setdefault(key,
                                              self.loadConfigItem(key=key))

    def writeValue(self, item, value):
        u = tconfig.update().where(tconfig.c.id == item.id).values(value=value)
        conn = self.connection()
        result = conn.execute(u)
        self.commit()

    def updateDefinition(self, item):
        u = tconfig.update().where(tconfig.c.id == item.id).values(
            key=self.key, desc=item.desc, updatefunc=item.updatefunc)
        conn = self.connection()
        result = conn.execute(u)
        self.commit()

    def installConfigItem(self, item):
        try:
            oitem = self.getConfigItemByKey(item.key)
            if item.hasEquivalentDefinition(oitem):
                return
            else:
                oitem.updateDefinition(item)
                return
        except UnknownConfigKey, e:
            self.createConfigItem(item)