示例#1
0
 def modify(self):
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     for el in self._vars:
         res = db.modifyStaticHostvar(hostname = self._hostname, fact = el["fact"], value = el["value"], priority = el["priority"])
             
     db.disconnect()
     return True
示例#2
0
 def _getUserInfo(self):
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     userinfo = db.getUserInfo(self._username)
     db.disconnect()
     if userinfo is not None:
         self._name = userinfo["name"]
         self._new = False
示例#3
0
    def create(self):
        self._err = list()
        if self._name is None:
            self._err.append('You need to specify a connector name')
    
        if self._connector is None:
            self._err.append('You need to specify a connector')
    
        if self._type is None:
            self._err.append('You need to specify the connector type (%s)' % "|".join(self._typelist))
        elif isinstance(self._type, str) and self._type not in self._typelist:
            self._err.append('Connector type cannot be %s. It has to be one of these: %s.' % (self._type, ",".join(self._typelist)))
    
        if self._schedule is None:
            self._err.append('You need to specify the schedule')
    
        if self._parameters is None:
            self._err.append('You need to specify the connector parameters')
    
        if self._priority is None:
            self._err.append('You need to specify the connector priority')
        
        if len(self._err) > 0:
            return False
        
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        res = db.createConnector(name = self._name, connector = self._connector, connector_type = self._type, parameters = self._parameters, priority = self._priority)
        db.disconnect()

        return res
示例#4
0
 def disable(self, connector_id = -1):
     if connector_id > 0:
         self._id = connector_id
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     res = db.disableConnector(connector_id = self._id)
     db.disconnect()
     return True
示例#5
0
    def _createInventoryCacheFile(self):
        inventoryd.logmessage(severity="info",
                              message="Create Inventory cache file")
        inventoryd.logmessage(severity="info",
                              message="Generating Ansible Inventory")
        db = inventoryd.db(self._cfg["db"])
        res = db.getAnsibleInventory()
        db.disconnect()
        timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")
        filename = "%s/%s.json" % (self._cli.cachefilepath, timestamp)
        inventoryd.logmessage(severity="info",
                              message="Creating cache file %s" % filename)
        with open(filename, "w") as f:
            f.write(
                json.dumps(res,
                           sort_keys=True,
                           indent=4,
                           separators=(',', ': ')))

        inventoryd.logmessage(severity="info",
                              message="Creating link to %s" % filename)
        if os.path.isfile("%s/latest.json" % self._cli.cachefilepath) is True:
            os.unlink("%s/latest.json" % self._cli.cachefilepath)
        os.symlink(filename, "%s/latest.json" % self._cli.cachefilepath)

        inventoryd.logmessage(severity="info",
                              message="Done generating Ansible Inventory")
示例#6
0
 def delete(self):
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     for el in self._vars:
         res = db.deleteStaticHostvar(hostname = self._hostname, fact = el["fact"])
             
     db.disconnect()
     return True
示例#7
0
    def modify(self):
        self._err = list()
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        res = db.modifyConnector(self._id, self._name, self._connector, self._type, json.dumps(self._parameters), self._priority)
        db.disconnect()

        return res
示例#8
0
 def disable(self, connector_id=-1):
     if connector_id > 0:
         self._id = connector_id
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     res = db.disableConnector(connector_id=self._id)
     db.disconnect()
     return True
示例#9
0
 def _getRoles(self):
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     roles = db.getRoles(self._username)
     db.disconnect()
     self._roles = []
     for el in roles:
         self._roles.append(inventoryd.role(el["name"]))
示例#10
0
 def getUserACL(self):
     if self._acl is None:
         db = inventoryd.db(inventoryd.localData.cfg["db"])
         self._acl = inventoryd.acl(db.getUserACL(self._username))
         #self._acl = db.getUserACL(self._username)
     
     #print self._acl
     return self._acl
示例#11
0
    def delete(self):
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        for el in self._vars:
            res = db.deleteStaticHostvar(hostname=self._hostname,
                                         fact=el["fact"])

        db.disconnect()
        return True
示例#12
0
    def read(self, connector_id=-1):
        self._err = list()
        if connector_id > 0:
            self._id = connector_id
        self._data = dict()
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        res = db.readConnector(connector_id=self._id)
        try:
            res["id"]
        except:
            res["id"] = -1

        try:
            res["name"]
        except:
            res["name"] = None

        try:
            res["connector"]
        except:
            res["connector"] = None

        try:
            res["enabled"]
        except:
            res["enabled"] = False

        try:
            res["priority"]
        except:
            res["priority"] = 0

        try:
            res["type"]
        except:
            res["type"] = None

        try:
            res["schedule"]
        except:
            res["schedule"] = None

        try:
            res["parameters"]
        except:
            res["parameters"] = None

        self._id = res["id"]
        self._name = res["name"]
        self._connector = res["connector"]
        self._enabled = res["enabled"]
        self._priority = res["priority"]
        self._type = res["type"]
        self._schedule = res["schedule"]
        self._parameters = res["parameters"]

        db.disconnect()
        return True
示例#13
0
 def read(self, connector_id = -1):
     self._err = list()
     if connector_id > 0:
         self._id = connector_id
     self._data = dict()
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     res = db.readConnector(connector_id = self._id)
     try:
         res["id"]
     except:
         res["id"] = -1
     
     try:
         res["name"]
     except:
         res["name"] = None
     
     try:
         res["connector"]
     except:
         res["connector"] = None
     
     try:
         res["enabled"]
     except:
         res["enabled"] = False
     
     try:
         res["priority"]
     except:
         res["priority"] = 0
     
     try:
         res["type"]
     except:
         res["type"] = None
     
     try:
         res["schedule"]
     except:
         res["schedule"] = None
     
     try:
         res["parameters"]
     except:
         res["parameters"] = None
     
     self._id = res["id"]
     self._name = res["name"]
     self._connector = res["connector"]
     self._enabled = res["enabled"]
     self._priority = res["priority"]
     self._type = res["type"]
     self._schedule = res["schedule"]
     self._parameters = res["parameters"]
     
     db.disconnect()
     return True
示例#14
0
    def read(self, host_id=None):
        if host_id is not None:
            self._id = host_id
        self._data = dict()

        db = inventoryd.db(inventoryd.localData.cfg["db"])
        self._vars = db.readHost(host_id=self._id)
        db.disconnect()
        return True
示例#15
0
 def read(self, host_id = None):
     if host_id is not None:
         self._id = host_id
     self._data = dict()
     
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     self._vars = db.readHost(host_id = self._id)
     db.disconnect()
     return True
示例#16
0
    def modify(self):
        self._err = list()
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        res = db.modifyConnector(self._id, self._name,
                                 self._connector, self._type,
                                 json.dumps(self._parameters), self._priority)
        db.disconnect()

        return res
示例#17
0
    def modify(self):
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        for el in self._vars:
            res = db.modifyStaticHostvar(hostname=self._hostname,
                                         fact=el["fact"],
                                         value=el["value"],
                                         priority=el["priority"])

        db.disconnect()
        return True
示例#18
0
 def _startScheduler(self):
     inventoryd.logmessage(severity="info", message="Starting the task scheduler")
     inventoryd.logmessage(severity="info", message="Housekeeping schedule: %s" % self._cfg["housekeeper"]["schedule"])
     db = inventoryd.db(self._cfg["db"])
     for el in db.getConnectors():
         inventoryd.logmessage(severity="info", message="Sync connector '%s' schedule: %s" % (el["name"], el["schedule"]))
     db.disconnect()
     interval = 61 - datetime.datetime.now().second
     self._scheduleTimer = Timer(interval, self._runScheduler)
     self._scheduleTimer.start()
示例#19
0
def listConnectors(user = None, payload = None, handler = None):
    if user.hasAcces("list","connector") is True:
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        connectors = db.getConnectors(False)
        db.disconnect()
        handler.send_response(200)
        handler.send_header('Content-Type', 'application/json')
        handler.end_headers()
        handler.wfile.write(json.dumps(connectors, sort_keys=True, indent=4, separators=(',',': ')))
        return True
    else:
        handler.send_response(401)
        return True
示例#20
0
 def _startScheduler(self):
     inventoryd.logmessage(severity="info",
                           message="Starting the task scheduler")
     inventoryd.logmessage(severity="info",
                           message="Housekeeping schedule: %s" %
                           self._cfg["housekeeper"]["schedule"])
     db = inventoryd.db(self._cfg["db"])
     for el in db.getConnectors():
         inventoryd.logmessage(severity="info",
                               message="Sync connector '%s' schedule: %s" %
                               (el["name"], el["schedule"]))
     db.disconnect()
     interval = 61 - datetime.datetime.now().second
     self._scheduleTimer = Timer(interval, self._runScheduler)
     self._scheduleTimer.start()
示例#21
0
def listHosts(user=None, payload=None, handler=None):
    if user.hasAcces("list", "host") is True:
        db = inventoryd.db(inventoryd.localData.cfg["db"])
        hosts = db.getHosts()
        db.disconnect()
        handler.send_response(200)
        handler.send_header('Content-Type', 'application/json')
        handler.end_headers()
        handler.wfile.write(
            json.dumps(hosts, sort_keys=True, indent=4,
                       separators=(',', ': ')))
        return True
    else:
        handler.send_response(401)
        return True
示例#22
0
def showInventory(user = None, payload = None, handler = None):
    inventoryd.logmessage(severity="debug", message="Inventory pull request")
    handler.send_response(200)
    handler.send_header('Content-Type', 'application/json')
    handler.end_headers()
    
    if os.path.isfile("%s/latest.json" % inventoryd.localData.cli.cachefilepath) is True:
        with open("%s/latest.json" % inventoryd.localData.cli.cachefilepath,"r") as f:
            res = json.loads(f.read())
    else:
        tdb = inventoryd.db(inventoryd.localData.cfg["db"])
        res = tdb.getAnsibleInventory()
        tdb.disconnect()
        
    handler.wfile.write(json.dumps(res, sort_keys=True, indent=4, separators=(',',': ')))
    return True
示例#23
0
    def _runScheduler(self):
        interval = 61 - datetime.datetime.now().second
        self._scheduleTimer = Timer(interval, self._runScheduler)
        self._scheduleTimer.start()

        if self._scheduler_is_running is True:
            inventoryd.logmessage(severity="info", message="Skipping run, as scheduler is still busy.")
        else:
            datetime_now = datetime.datetime.today()
            inventoryd.logmessage(severity="info", message="Starting scheduled tasks")
            cron = inventoryd.cronpare()
            db = inventoryd.db(self._cfg["db"])
            for el in db.getConnectors():
                inventoryd.logmessage(severity="info", message="Checking schedule for %s:%s" % (el["name"], el["schedule"]))
                if cron.compare(el["schedule"],datetime_now) is True:
                    inventoryd.logmessage(severity="info", message="Starting sync run for %s." % el["name"])
                    self._sync_connector(el["id"])
                    inventoryd.logmessage(severity="info", message="Ending sync run for %s." % el["name"])

            inventoryd.logmessage(severity="info", message="Checking schedule for Housekeeping:%s" % self._cfg["housekeeper"]["schedule"])
            if cron.compare(self._cfg["housekeeper"]["schedule"],datetime_now) is True:
                inventoryd.logmessage(severity="info", message="Starting Housekeeping run")
                if self._cfg["housekeeper"]["history"] > 0:
                    db.deleteHistory(self._cfg["housekeeper"]["history"])

                if self._cfg["housekeeper"]["inventory_history"] > 0:
                    cachefiles = list()
                    for el in os.listdir(self._cli.cachefilepath):
                        if re.match("^[0-9]+.json", el) is not None:
                            cachefiles.append(el)
                    cachefiles.sort()
                    cachefiles = cachefiles[:0-self._cfg["housekeeper"]["inventory_history"]]
                    inventoryd.logmessage(severity="info", message="Removing %d old cache files" % len(cachefiles))
                    for el in cachefiles:
                        inventoryd.logmessage(severity="debug", message="Removing old cache file %s" % el)
                        try:
                            os.unlink("%s/%s" % (self._cli.cachefilepath, el))
                        except OSError as e:
                            inventoryd.logmessage(severity="error", message="An error ocurred removing %s: %s" % (el, e))
                        except:
                            inventoryd.logmessage(severity="error", message="An error ocurred removing %s" % el)
                inventoryd.logmessage(severity="info", message="Ending Housekeeping run")
                
            db.disconnect()
            inventoryd.logmessage(severity="info", message="Endinging scheduled tasks")
示例#24
0
 def _createInventoryCacheFile(self):
     inventoryd.logmessage(severity="info", message="Create Inventory cache file")
     inventoryd.logmessage(severity="info", message="Generating Ansible Inventory")
     db = inventoryd.db(self._cfg["db"])
     res = db.getAnsibleInventory()
     db.disconnect()
     timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")
     filename = "%s/%s.json" % (self._cli.cachefilepath, timestamp)
     inventoryd.logmessage(severity="info", message="Creating cache file %s" % filename)
     with open(filename, "w") as f:
         f.write(json.dumps(res, sort_keys=True, indent=4, separators=(',',': ')))
     
     inventoryd.logmessage(severity="info", message="Creating link to %s" % filename)
     if os.path.isfile("%s/latest.json" % self._cli.cachefilepath) is True:
         os.unlink("%s/latest.json" % self._cli.cachefilepath)
     os.symlink(filename,"%s/latest.json" % self._cli.cachefilepath)
     
     inventoryd.logmessage(severity="info", message="Done generating Ansible Inventory")
示例#25
0
def showInventory(user=None, payload=None, handler=None):
    inventoryd.logmessage(severity="debug", message="Inventory pull request")
    handler.send_response(200)
    handler.send_header('Content-Type', 'application/json')
    handler.end_headers()

    if os.path.isfile(
            "%s/latest.json" % inventoryd.localData.cli.cachefilepath) is True:
        with open("%s/latest.json" % inventoryd.localData.cli.cachefilepath,
                  "r") as f:
            res = json.loads(f.read())
    else:
        tdb = inventoryd.db(inventoryd.localData.cfg["db"])
        res = tdb.getAnsibleInventory()
        tdb.disconnect()

    handler.wfile.write(
        json.dumps(res, sort_keys=True, indent=4, separators=(',', ': ')))
    return True
示例#26
0
 def authenticate(self, passphrase = None, token = None, username = None):
     if username is not None:
         self._username = username
     if token is not None:
         self._token = token
         auth_type='token'
         
     if passphrase is not None:
         auth_type='passphrase'
     
     if auth_type == 'passphrase':
         db = inventoryd.db(inventoryd.localData.cfg["db"])
         db_salt, db_pass = db.getUserPassword(self._username)
         db.disconnect()
         hashpass = hashlib.sha512('%s:%s' % (db_salt,passphrase)).hexdigest()
         if hashpass == db_pass:
             self._authenticated = True
         else:
             self._authenticated = False
     
     return self._authenticated
示例#27
0
    def create(self):
        self._err = list()
        if self._name is None:
            self._err.append('You need to specify a connector name')

        if self._connector is None:
            self._err.append('You need to specify a connector')

        if self._type is None:
            self._err.append('You need to specify the connector type (%s)' %
                             "|".join(self._typelist))
        elif isinstance(self._type, str) and self._type not in self._typelist:
            self._err.append(
                'Connector type cannot be %s. It has to be one of these: %s.' %
                (self._type, ",".join(self._typelist)))

        if self._schedule is None:
            self._err.append('You need to specify the schedule')

        if self._parameters is None:
            self._err.append('You need to specify the connector parameters')

        if self._priority is None:
            self._err.append('You need to specify the connector priority')

        if len(self._err) > 0:
            return False

        db = inventoryd.db(inventoryd.localData.cfg["db"])
        res = db.createConnector(name=self._name,
                                 connector=self._connector,
                                 connector_type=self._type,
                                 parameters=self._parameters,
                                 priority=self._priority)
        db.disconnect()

        return res
示例#28
0
    def _sync_connector(self, connector_id):
        db = inventoryd.db(self._cfg["db"])
        connector = db.getConnector(connector_id)
        if connector is None:
            return False
        hid = db.startHistoryItem(connector["id"])

        try:
            exec "connector_%s" % connector["connector"]
        except:
            libpath = self._cfg["inventoryd"]["connector_path"]
            inventoryd.logmessage(
                severity="debug",
                message="Connector %s hasn't been imported yet. Attempting." %
                connector["connector"])
            execute_connector = False

            if libpath is not None and os.path.isdir(
                    self._cfg["inventoryd"]["connector_path"]):
                inventoryd.logmessage(
                    severity="debug",
                    message=
                    "inventoryd.connector_path is set and connector library exists!"
                )
                try:
                    exec "import connector_%s" % connector["connector"]
                except:
                    inventoryd.logmessage(
                        severity="crit",
                        message="Could not import the connector %s" %
                        connector["connector"])
                else:
                    exec "import connector_%s" % connector["connector"]
                    execute_connector = True

            elif libpath is not None:
                inventoryd.logmessage(
                    severity="err",
                    message=
                    "inventoryd.connector_path is set but connector library doesn't exist!"
                )
            elif libpath is None:
                inventoryd.logmessage(
                    severity="debug",
                    message="inventoryd.connector_path is not set")
        else:
            execute_connector = True

        if execute_connector is True:
            inventoryd.logmessage(severity="info",
                                  message="Syncing %s" % connector["name"])
            exec "cc = connector_%s(connector['parameters'])" % connector[
                "connector"]
            if connector["type"] == "hosts":
                facts = cc.getHosts()
                if cc.rc == 0:
                    inventoryd.logmessage(
                        severity="info",
                        message=
                        "%s - synchronizing %d hostvar facts for %d hosts" %
                        (connector["name"], len(facts), int(
                            cc.getHostCount())))
                    db.commitHostsCache(hid, facts)
                    inventoryd.logmessage(
                        severity="debug",
                        message="%s - %d hostvar facts synchronized" %
                        (connector["name"], len(facts)))
                else:
                    inventoryd.logmessage(
                        severity="error",
                        message=
                        "%s - An error occurred synchronizing hostvars. RC:%d"
                        % (connector["name"], cc.rc))
                    inventoryd.logmessage(severity="error",
                                          message="%s - %s" %
                                          (connector["name"], cc.message))
            else:
                facts, hosts, children = cc.getGroups()
                if cc.rc == 0:
                    inventoryd.logmessage(
                        severity="info",
                        message="%s - synchronizing %d groupvar facts" %
                        (connector["name"], len(facts)))
                    inventoryd.logmessage(
                        severity="info",
                        message="%s - synchronizing %d group host memberships"
                        % (connector["name"], len(hosts)))
                    inventoryd.logmessage(
                        severity="info",
                        message="%s - synchronizing %d group group memberships"
                        % (connector["name"], len(children)))
                    db.commitGroupsCache(hid, facts, hosts, children)
                    inventoryd.logmessage(
                        severity="debug",
                        message="%s - %d groupvar facts synchronized" %
                        (connector["name"], len(facts)))
                    inventoryd.logmessage(
                        severity="debug",
                        message="%s - %d group host memberships synchronized" %
                        (connector["name"], len(hosts)))
                    inventoryd.logmessage(
                        severity="debug",
                        message="%s - %d group group memberships synchronized"
                        % (connector["name"], len(children)))
                else:
                    inventoryd.logmessage(
                        severity="error",
                        message=
                        "%s - An error occurred synchronizing groups. RC:%d" %
                        (connector["name"], cc.rc))
                    inventoryd.logmessage(severity="error",
                                          message="%s - %s" %
                                          (connector["name"], cc.message))

            db.endHistoryItem(hid, cc.rc, cc.message)
            inventoryd.logmessage(severity="info",
                                  message="Syncing %s done" %
                                  connector["name"])
        else:
            inventoryd.logmessage(severity="info",
                                  message="Could not start %s sync" %
                                  connector["name"])

        db.disconnect()

        if execute_connector is True:
            self._createInventoryCacheFile()
示例#29
0
 def delete(self, connector_id=-1):
     self._err = list()
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     res = db.deleteConnector(connector_id=self._id)
     db.disconnect()
     return res
示例#30
0
    def _runScheduler(self):
        interval = 61 - datetime.datetime.now().second
        self._scheduleTimer = Timer(interval, self._runScheduler)
        self._scheduleTimer.start()

        if self._scheduler_is_running is True:
            inventoryd.logmessage(
                severity="info",
                message="Skipping run, as scheduler is still busy.")
        else:
            datetime_now = datetime.datetime.today()
            inventoryd.logmessage(severity="info",
                                  message="Starting scheduled tasks")
            cron = inventoryd.cronpare()
            db = inventoryd.db(self._cfg["db"])
            for el in db.getConnectors():
                inventoryd.logmessage(severity="info",
                                      message="Checking schedule for %s:%s" %
                                      (el["name"], el["schedule"]))
                if cron.compare(el["schedule"], datetime_now) is True:
                    inventoryd.logmessage(severity="info",
                                          message="Starting sync run for %s." %
                                          el["name"])
                    self._sync_connector(el["id"])
                    inventoryd.logmessage(severity="info",
                                          message="Ending sync run for %s." %
                                          el["name"])

            inventoryd.logmessage(
                severity="info",
                message="Checking schedule for Housekeeping:%s" %
                self._cfg["housekeeper"]["schedule"])
            if cron.compare(self._cfg["housekeeper"]["schedule"],
                            datetime_now) is True:
                inventoryd.logmessage(severity="info",
                                      message="Starting Housekeeping run")
                if self._cfg["housekeeper"]["history"] > 0:
                    db.deleteHistory(self._cfg["housekeeper"]["history"])

                if self._cfg["housekeeper"]["inventory_history"] > 0:
                    cachefiles = list()
                    for el in os.listdir(self._cli.cachefilepath):
                        if re.match("^[0-9]+.json", el) is not None:
                            cachefiles.append(el)
                    cachefiles.sort()
                    cachefiles = cachefiles[:0 - self._cfg["housekeeper"]
                                            ["inventory_history"]]
                    inventoryd.logmessage(
                        severity="info",
                        message="Removing %d old cache files" %
                        len(cachefiles))
                    for el in cachefiles:
                        inventoryd.logmessage(
                            severity="debug",
                            message="Removing old cache file %s" % el)
                        try:
                            os.unlink("%s/%s" % (self._cli.cachefilepath, el))
                        except OSError as e:
                            inventoryd.logmessage(
                                severity="error",
                                message="An error ocurred removing %s: %s" %
                                (el, e))
                        except:
                            inventoryd.logmessage(
                                severity="error",
                                message="An error ocurred removing %s" % el)
                inventoryd.logmessage(severity="info",
                                      message="Ending Housekeeping run")

            db.disconnect()
            inventoryd.logmessage(severity="info",
                                  message="Endinging scheduled tasks")
示例#31
0
 def delete(self, connector_id = -1):
     self._err = list()
     db = inventoryd.db(inventoryd.localData.cfg["db"])
     res = db.deleteConnector(connector_id = self._id)
     db.disconnect()
     return res
示例#32
0
 def _sync_connector(self, connector_id):
     db = inventoryd.db(self._cfg["db"])
     connector = db.getConnector(connector_id)
     if connector is None:
         return False
     hid = db.startHistoryItem(connector["id"])
     
     try:
         exec "connector_%s" % connector["connector"]
     except:
         libpath = self._cfg["inventoryd"]["connector_path"]
         inventoryd.logmessage(severity="debug", message="Connector %s hasn't been imported yet. Attempting." % connector["connector"])
         execute_connector = False
         
         if libpath is not None and os.path.isdir(self._cfg["inventoryd"]["connector_path"]):
             inventoryd.logmessage(severity="debug", message="inventoryd.connector_path is set and connector library exists!")
             try:
                 exec "import connector_%s" % connector["connector"]
             except:
                 inventoryd.logmessage(severity="crit", message="Could not import the connector %s" % connector["connector"])
             else:
                 exec "import connector_%s" % connector["connector"]
                 execute_connector = True
                 
         elif libpath is not None:
             inventoryd.logmessage(severity="err", message="inventoryd.connector_path is set but connector library doesn't exist!")
         elif libpath is None:
             inventoryd.logmessage(severity="debug", message="inventoryd.connector_path is not set")
     else:
         execute_connector = True
         
     if execute_connector is True:
         inventoryd.logmessage(severity="info", message="Syncing %s" % connector["name"])
         exec "cc = connector_%s(connector['parameters'])" % connector["connector"]
         if connector["type"] == "hosts":
             facts = cc.getHosts()
             if cc.rc == 0:
                 inventoryd.logmessage(severity="info", message="%s - synchronizing %d hostvar facts for %d hosts" % (connector["name"], len(facts), int(cc.getHostCount())))
                 db.commitHostsCache(hid,facts)
                 inventoryd.logmessage(severity="debug", message="%s - %d hostvar facts synchronized" % (connector["name"], len(facts)))
             else:
                 inventoryd.logmessage(severity="error", message="%s - An error occurred synchronizing hostvars. RC:%d" % (connector["name"],cc.rc))
                 inventoryd.logmessage(severity="error", message="%s - %s" % (connector["name"],cc.message))
         else:
             facts, hosts, children = cc.getGroups()
             if cc.rc == 0:
                 inventoryd.logmessage(severity="info", message="%s - synchronizing %d groupvar facts" % (connector["name"], len(facts)))
                 inventoryd.logmessage(severity="info", message="%s - synchronizing %d group host memberships" % (connector["name"], len(hosts)))
                 inventoryd.logmessage(severity="info", message="%s - synchronizing %d group group memberships" % (connector["name"], len(children)))
                 db.commitGroupsCache(hid,facts, hosts, children)
                 inventoryd.logmessage(severity="debug", message="%s - %d groupvar facts synchronized" % (connector["name"], len(facts)))
                 inventoryd.logmessage(severity="debug", message="%s - %d group host memberships synchronized" % (connector["name"], len(hosts)))
                 inventoryd.logmessage(severity="debug", message="%s - %d group group memberships synchronized" % (connector["name"], len(children)))
             else:
                 inventoryd.logmessage(severity="error", message="%s - An error occurred synchronizing groups. RC:%d" % (connector["name"], cc.rc))
                 inventoryd.logmessage(severity="error", message="%s - %s" % (connector["name"], cc.message))
             
         db.endHistoryItem(hid, cc.rc, cc.message)
         inventoryd.logmessage(severity="info", message="Syncing %s done" % connector["name"])
     else:
         inventoryd.logmessage(severity="info", message="Could not start %s sync" % connector["name"])
     
     db.disconnect()
     
     if execute_connector is True:
         self._createInventoryCacheFile()