Example #1
0
    def xmlrpc_dropPackage(self, pid):
        ret = Common().dropPackage(pid, self.mp)
        if not ret: return False

        ret = Common().desassociatePackage2mp(pid, self.mp)
        if not ret: return False

        return pid
Example #2
0
    def initialize(self, config):
        self.logger = logging.getLogger()
        self.config = config
        config_addons(config)
        Common().init(config)
        sync_status = PkgsRsyncStateSerializer().init(Common())

        if self.config.package_detect_activate:
            self.logger.info("Package detection activated")
            if self.config.package_detect_tmp_activate:
                self.logger.info(
                    "Package detection activated for temporary folder")
            if self.config.package_detect_smart:
                self.logger.info(
                    "Package detection mechanism will be '%s' (%s)" %
                    (self.config.packageDetectSmartMethod(),
                     str(self.config.package_detect_smart_time)))

            self.logger.info("Starting package detection thread")
            threadpd = ThreadPackageDetect(config)
            threadpd.setDaemon(True)
            threadpd.start()
            self.logger.info("Package detection thread started")

        if self.config.package_mirror_activate:
            self.logger.info("Starting package mirror thread")
            self.threadpm = ThreadPackageMirror(config, sync_status)
            self.threadpm.setDaemon(True)
            self.logger.info("Package mirror thread started")

            if self.config.package_global_mirror_activate:
                self.logger.info("Starting global package mirror thread")
                self.threadgp = ThreadPackageGlobalMirror(config)
                self.threadgp.setDaemon(True)
                self.logger.info("Global package mirror thread started")

        self.logger.info("Starting TFTPServer thread")

        # TFTPServer disabled (waiting to be stabilized)
        #if 0:
        #    threadtftp = ThreadTFTP(config)
        #    threadtftp.setDaemon(True)
        #    threadtftp.start()
        #    self.logger.info("TFTPServer thread started")

        from pulse2.package_server import thread_webserver
        if not thread_webserver.initialize(self.config):
            self.logger.error(
                "Package server XML-RPC service initialization failed, exiting."
            )
            sys.exit(1)
        # FIXME: Little sleep because sometimes Python exits before the
        # threads have the time to start
        time.sleep(5)
Example #3
0
 def xmlrpc_getAllPendingPackages(self, mirror = None):
     ret = Common().getPendingPackages(self.mp)
     r = []
     for x in ret:
         p = ret[x].toH()
         self.logger.debug(Common().newAssociation)
         self.logger.debug(Common().inEdition)
         if p['id'] in Common().newAssociation or p['id'] in Common().inEdition:
             p['why'] = 'association'
         r.append(p)
     return r
Example #4
0
 def __init__(self, mp, name=''):
     MyXmlrpc.__init__(self)
     self.logger = logging.getLogger()
     self.name = name
     self.mp = mp
     if Common().getPackages(self.mp) == None:
         e = "(%s) %s : can't initialise at %s correctly" % (
             self.type, self.name, self.mp)
         self.logger.error(e)
         raise e
     self.logger.info(
         "(%s) %s : initialised with packages : %s" %
         (self.type, self.name, str(Common().getPackages(self.mp).keys())))
Example #5
0
    def xmlrpc_putPackageDetail(self, package, need_assign=True):
        self.logger.debug("xmlrpc_putPackageDetail")
        pa = Package()
        pa.fromH(package)
        if pa.id in Common().dontgivepkgs and len(
                Common().dontgivepkgs[pa.id]) > 0:
            return (False, "This package is curently locked")

        ret = Common().editPackage(package['id'], pa, need_assign, self.mp)
        if not ret: return False

        # Create conf file in package
        ret = Common().writePackageTo(package['id'], self.mp)
        ret, confdir = ret
        if not ret: return False

        ret = Common().associatePackage2mp(package['id'], self.mp)
        if not ret: return False

        if not P2PServerCP().package_detect_activate:
            del Common().inEdition[package['id']]

# Force packavge detection
        Common().detectNewPackages()
        Common()._createMD5File(pa.root, force_compute=True)
        # Reload all package info
        #desc = Common().desc
        #Common().init(Common().config)
        #Common().desc = desc

        return (True, package['id'], confdir, pa.toH())
Example #6
0
 def mirror_level0(result, args):
     pid, target, is_deletion = args
     out, err, code = result
     if code == 0:
         pkg = Common().packages[pid]
         try:
             self.logger.debug("Removing %s" % (pkg.root))
             os.rmdir(pkg.root)
             exe = self.config.package_mirror_command
             args = []
             args.extend(
                 self.config.package_mirror_level0_command_options)
             if type(self.config.
                     package_mirror_command_options_ssh_options
                     ) == list:
                 args.extend([
                     '--rsh',
                     '/usr/bin/ssh -o %s' % (" -o ".join(
                         self.config.
                         package_mirror_command_options_ssh_options))
                 ])
             args.append(
                 str("%s%s" % (os.path.dirname(pkg.root), os.path.sep)))
             args.append("%s:%s" % (target, os.path.dirname(pkg.root)))
             self.logger.debug(
                 "ThreadPackageMirror execute mirror level0 : %s %s" %
                 (exe, str(args)))
             return createDeferred(exe, args, pid, target, False)
         except Exception, e:
             self.logger.error(
                 "ThreadPackageMirror mirror level0 failed for package %s : %s"
                 % (pid, str(e)))
Example #7
0
 def xmlrpc_getPackageDetail(self, pid):
     try:
         ret = Common().package(pid, self.mp).toH()
     except KeyError:
         # We don't own this package
         ret = {}
     except Exception, e:
         # Another unknown error
         self.logger.exception(e)
         ret = {}
Example #8
0
 def xmlrpc_getLocalPackagePath(self, pid):
     try:
         ret = os.path.dirname(Common().package(pid, self.mp).root)
     except KeyError:
         # We don't own this package
         ret = {}
     except Exception, e:
         # Another unknown error
         self.logger.exception(e)
         ret = {}
Example #9
0
 def onSuccess(self, result, args):
     pid, target, is_deletion = args
     out, err, code = result
     if code == 0:
         self.logger.debug("ThreadPackageMirror succeed %s" % (str(result)))
         Common().removePackagesFromRsyncList(pid, target)
     else:
         self.logger.error(
             "ThreadPackageMirror mirroring command failed %s" %
             (str(result)))
Example #10
0
 def runSub(self):
     try:
         if self.working:
             self.logger.debug(
                 "###############= ThreadPackageDetect already running")
             return
         self.working = True
         logging.getLogger().debug("\n")
         logging.getLogger().debug(
             "###############> ThreadPackageDetect is running")
         if self.config.package_detect_tmp_activate:
             Common().moveCorrectPackages()
         Common().detectNewPackages()
         logging.getLogger().debug(
             "###############< ThreadPackageDetect end\n")
     except Exception, e:
         logging.getLogger().error(
             'an Exception happened when trying to detect packages:' +
             str(e))
Example #11
0
    def xmlrpc_associatePackages(self, pid, fs, level=0):
        files = []
        ret = True

        for f in fs:
            if not os.path.exists(os.path.join(self.tmp_input_dir, f)):
                ret = False
            else:
                files.append(os.path.join(self.tmp_input_dir, f))
        if not ret:
            return [False, 'Some files are missing']

        try:
            ret_assoc = Common().associateFiles(self.mp, pid, files, level)
        except exceptions.OSError, e:
            return [False, str(e)]
Example #12
0
    def _runSub(self):
        def createDeferred(exe, args, target, root):
            d = utils.getProcessOutputAndValue(exe, args)
            d.addCallback(self.onSuccess, (target, root))
            d.addErrback(self.onError, (target, root))
            return d

        def cbEnding(result, self):
            self.logger.debug("ThreadPackageGlobalMirror end mirroring")
            self.working = False

        if self.working:
            return

        self.working = True
        self.logger.debug("ThreadPackageGlobalMirror start global mirroring")
        dlist = []
        all_roots = Common().getAllPackageRoot()
        for root in all_roots:
            exe = self.config.package_mirror_command
            args = []
            args.extend(self.config.package_global_mirror_command_options)
            if type(self.config.package_mirror_command_options_ssh_options
                    ) == list:
                args.extend([
                    '--rsh',
                    '/usr/bin/ssh -o %s' %
                    (" -o ".join(self.config.
                                 package_mirror_command_options_ssh_options))
                ])
            args.append(root)

            for target in self.config.package_mirror_target:
                l_args = args[:]
                l_args.append("%s:%s%s.." % (target, root, os.path.sep))
                self.logger.debug("ThreadPackageGlobalMirror execute : %s %s" %
                                  (exe, str(l_args)))
                dlist.append(createDeferred(exe, l_args, target, root))

        dl = defer.DeferredList(dlist)
        dl.addCallback(cbEnding, (self))
        return dl
Example #13
0
    def xmlrpc_putPackageDetail(self, package, need_assign = True):
        self.logger.debug("xmlrpc_putPackageDetail")
        pa = Package()
        pa.fromH(package)
        if Common().dontgivepkgs.has_key(pa.id) and len(Common().dontgivepkgs[pa.id]) > 0:
            return (False, "This package is curently locked")

        ret = Common().editPackage(package['id'], pa, need_assign)
        if not ret: return False
        
        # Create conf.xml file in package
        ret = Common().writePackageTo(package['id'], self.mp)
        ret, confdir = ret
        if not ret: return False

        ret = Common().associatePackage2mp(package['id'], self.mp)
        if not ret: return False

        if not P2PServerCP().package_detect_activate:
            del Common().inEdition[package['id']]

        return (True, package['id'], confdir, pa.toH())
Example #14
0
 def xmlrpc_getPackageQversion(self, pid):
     return Common().package(pid, self.mp).Qversion
Example #15
0
 def xmlrpc_getPackageQsoftware(self, pid):
     return Common().package(pid, self.mp).Qsoftware
Example #16
0
 def xmlrpc_getPackageBoolcnd(self, pid):
     return Common().package(pid, self.mp).boolcnd
Example #17
0
 def xmlrpc_getPackagesIds(self, label):
     return Common().reverse(self.mp)[label]
Example #18
0
 def xmlrpc_getAllPackages(self, mirror=None):
     return map(lambda x: Common().package(x).toH(),
                Common().getPackages(self.mp))
Example #19
0
 def xmlrpc_getPackageFiles(self, pid):  # TODO remove the internals
     return map(lambda x: x.toH(),
                Common().package(pid, self.mp).files.internals)
Example #20
0
 def xmlrpc_getPackageCommand(self, pid):
     return Common().package(pid, self.mp).cmd.toH()
Example #21
0
 def xmlrpc_getPackageId(self, label, version):
     return Common().reverse(self.mp)[label][version]
Example #22
0
 def xmlrpc_getPackagePostCommandSuccess(self, pid):
     return Common().package(pid, self.mp).postcmd_ok.toH()
Example #23
0
 def xmlrpc_getServerDetails(self):
     return map(lambda x: Common().package(x).toH(),
                Common().getPackages(self.mp))
Example #24
0
 def xmlrpc_getPackagePostCommandFailure(self, pid):
     return Common().package(pid, self.mp).postcmd_ko.toH()
Example #25
0
 def xmlrpc_getPackagesDetail(self, pidlist):
     return map(lambda p: p.toH(), Common().packagelist(pidlist, self.mp))
Example #26
0
 def xmlrpc_getPackageHasToReboot(self, pid):
     return Common().package(pid, self.mp).reboot
Example #27
0
 def xmlrpc_getLocalPackagesPath(self, pidlist):
     return map(lambda p: os.path.dirname(p.root),
                Common().packagelist(pidlist))
Example #28
0
 def xmlrpc_getPackageLicenses(self, pid):
     return Common().package(pid, self.mp).licenses
Example #29
0
            services.append({
                'type': 'imaging',
                'mp': config.imaging_api['mount_point'],
                'server': config.public_ip,
                'port': config.port,
                'proto': config.proto
            })
            logger.info("Package Server initialized with imaging API")
        except Exception, e:
            logger.exception("Imaging error: %s" % e)
            logger.error("Error while initializing the imaging API")
            logger.error("Package Server will run WITHOUT the imaging API")

    desc = Description(services)
    server.register(desc, '/desc')
    Common().setDesc(services)

    try:
        if config.enablessl:
            pulse2.xmlrpc.OpenSSLContext().setup(config.localcert,
                                                 config.cacert,
                                                 config.verifypeer)
            twisted.internet.reactor.listenSSL(
                port,
                P2PSite(server),
                interface=config.bind,
                contextFactory=pulse2.xmlrpc.OpenSSLContext().getContext())
            logger.info('activating SSL mode')
        else:
            twisted.internet.reactor.listenTCP(port,
                                               twisted.web.server.Site(server),
Example #30
0
 def xmlrpc_getPackageAssociateinventory(self, pid):
     return Common().package(pid, self.mp).associateinventory