Esempio n. 1
0
 def write(self,txt):
     txt = ensure_unicode(txt)
     if txt != '\n':
         logger.info(txt)
         self.output.append(txt)
Esempio n. 2
0
def main():
    jsonresult = {'output':[]}
    if options.json_output:
        # redirect output to json list
        old_stdout = sys.stdout
        old_stderr = sys.stderr
        sys.stderr = sys.stdout = output = JsonOutput(jsonresult['output'],logger)

    try:
        if len(args) == 0:
            print u"ERROR : You must provide one action to perform"
            parser.print_usage()
            sys.exit(2)

        action = args[0]

        # Config file
        if not os.path.isfile(config_file):
            logger.error(u"Error : could not find file : " + config_file + ", please check the path")

        logger.debug(u'Config file: %s' % config_file)

        mywapt = Wapt(config_filename=config_file)
        if options.wapt_url:
            mywapt.config.set('global','repo_url',options.wapt_url)

        global loglevel
        if not loglevel and mywapt.config.has_option('global','loglevel'):
            loglevel = mywapt.config.get('global','loglevel')
            setloglevel(loglevel)

        mywapt.options = options

        if options.private_key:
            mywapt.private_key = options.private_key

        if options.language:
            mywapt.language = options.language

        if options.usergroups:
            mywapt.usergroups = json.loads(options.usergroups.replace("'",'"'))
            logger.info(u'User Groups:%s' % (mywapt.usergroups,))

        if options.user:
            mywapt.user = options.user
            logger.info(u'Interactive user :%s' % (mywapt.user,))

        mywapt.dry_run = options.dry_run

        logger.debug(u'WAPT base directory : %s' % mywapt.wapt_base_dir)
        logger.debug(u'Package cache dir : %s' %  mywapt.package_cache_dir)
        logger.debug(u'WAPT DB Structure version;: %s' % mywapt.waptdb.db_version)

        try:
            params_dict = {}
            try:
                params_dict = json.loads(options.params.replace("'",'"'))
            except:
                raise Exception('Installation Parameters must be in json format')

            # cleanup environement, remove stalled wapt-get, update install_status
            if action in ('install','download','remove','uninstall','update','upgrade'):
                running_install = mywapt.check_install_running(max_ttl=options.max_ttl)
            else:
                running_install = []

            if action=='install' or action=='download':
                if len(args)<2:
                    print u"You must provide at least one package name"
                    sys.exit(1)

                if os.path.isdir(args[1]) or os.path.isfile(args[1]):
                    print u"Installing WAPT file %s" % args[1]
                    if action=='install':
                        # abort if there is already a running install in progress
                        if running_install:
                            raise Exception(u'Running wapt progresses (%s), please wait...' % (running_install,))
                        result= {u'install':[ (args[1],mywapt.install_wapt(args[1],params_dict = params_dict))]}
                else:
                    print u"%sing WAPT packages %s" % (action,','.join(args[1:]))
                    if options.update_packages:
                        print u"Update package list"
                        mywapt.update()

                    if running_install and action=='install':
                        raise Exception(u'Running wapt processes (%s) in progress, please wait...' % (running_install,))
                    result = mywapt.install(args[1:],force = options.force,params_dict = params_dict,
                        download_only= (action=='download'), usecache = not (action == 'download' and options.force)
                        )

                if options.json_output:
                    jsonresult['result'] = result
                else:
                    print u"\nResults :"
                    if action != 'download':
                        for k in ('install','additional','upgrade','skipped','errors'):
                            if result.get(k,[]):
                                print(u"\n === %s packages ===\n%s" % (k,'\n'.join( ["  %-30s | %s (%s)" % (s[0],s[1].package,s[1].version) for s in  result[k]]),))
                    else:
                        for k in ('downloaded','skipped','errors'):
                            if result.get('downloads', {'downloaded':[],'skipped':[],'errors':[]} )[k]:
                                print u"\n=== %s packages ===\n%s" % (k,'\n'.join(["  %s" % (s,) for s in result['downloads'][k]]),)
                    if result['unavailable']:
                        print(u'Critical : ')
                        print(u' === Unavailable packages ===\n%s'% '\n'.join( ["  %-30s" % s for s in  result['unavailable']]) )
                if mywapt.wapt_server:
                    try:
                        mywapt.update_server_status()
                    except Exception,e:
                        logger.critical('Unable to update server with current status : %s' % ensure_unicode(e))

            elif action=='download':
                if len(args)<2:
                    print u"You must provide at least one package name to download"
                    sys.exit(1)
                if options.update_packages:
                    print u"Update package list"
                    mywapt.update()
                print u"Downloading packages %s" % (','.join(args[1:]),)
                result = mywapt.download_packages(args[1:],usecache = not options.force )
                if options.json_output:
                    jsonresult['result'] = result
                else:
                    if result['downloaded']:
                        print u"\nDownloaded packages : \n%s" % u"\n".join([ "  %s" % p for p in result['downloaded'] ])
                    if result['skipped']:
                        print u"Skipped packages : \n%s" % u"\n".join([ u"  %s" % p for p in result['skipped'] ])
                if result['errors']:
                    logger.critical(u'Unable to download some files : %s'% (result['errors'],))
                    sys.exit(1)

            elif action=='show':
                if len(args)<2:
                    print u"You must provide at least one package name to show"
                    sys.exit(1)
                result = []
                if os.path.isdir(args[1]) or os.path.isfile(args[1]):
                    result.append[PackageEntry().load_control_from_wapt(args[1])]
                else:
                    if options.update_packages:
                        print u"Update packages list"
                        mywapt.update()
                    for packagename in args[1:]:
                        result.extend(mywapt.waptdb.packages_matching(packagename))

                if options.json_output:
                    jsonresult['result'] = result
                else:
                    print u"Display package control data for %s\n" % (','.join(args[1:]),)
                    for p in result:
                        print p.ascontrol(with_non_control_attributes=True)
Esempio n. 3
0
                if options.json_output:
                    jsonresult['result'] = {'errors':errors,'removed':removed}
                else:
                    if removed:
                        print u"=== Removed packages ===\n%s" % u"\n".join([ u"  %s" % p for p in removed ])
                    else:
                        print u"No package removed !"

                    if errors:
                        print u"=== Error removing packages ===\n%s" % u"\n".join([ u"  %s" % p for p in errors ])

                if mywapt.wapt_server:
                    try:
                        mywapt.update_server_status()
                    except Exception,e:
                        logger.critical('Unable to update server with current status : %s' % ensure_unicode(e))

            elif action=='session-setup':
                if len(args)<2:
                    print u"You must provide at least one package to be configured in user's session or ALL (in uppercase) for all currently installed packages of this system"
                    sys.exit(1)
                result = []
                if args[1] == 'ALL':
                    packages_list = mywapt.installed().keys()
                else:
                    packages_list =  args[1:]
                for packagename in packages_list:
                    try:
                        print u"Configuring %s ..." % (packagename,),
                        result.append(mywapt.session_setup(packagename,force=options.force))
                        print "Done"