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)