Changeset 7089


Ignore:
Timestamp:
Mar 21, 2018, 5:28:21 PM (19 months ago)
Author:
mabarracus
Message:

Added option to allow update without changing config files
Updated help menu from cli
Improved error checking from cli
Allow cancel update operation from cli

Location:
lliurex-mirror/trunk/fuentes
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • lliurex-mirror/trunk/fuentes/debian/changelog

    r6160 r7089  
     1lliurex-mirror (28.8.6) xenial; urgency=medium
     2
     3  * Added option to allow update without changing config files
     4  * Updated help menu from cli
     5  * Improved error checking from cli
     6  * Allow cancel update operation from cli
     7
     8 -- M.Angel Juan <m.angel.juan@gmail.com>  Wed, 21 Mar 2018 17:26:45 +0100
     9
    110lliurex-mirror (28.8.5) xenial; urgency=high
    211
  • lliurex-mirror/trunk/fuentes/lliurex-mirror-cli/etc/bash_completion.d/lliurex-mirror

    r2838 r7089  
    1010            #  The basic options we'll complete.
    1111            #
    12             opts="setcname update rundebmirror isalive getmirrorarchitecture setmirrorarchitecture getmirrororig setmirrororig getchecksumvalidation setchecksumvalidation getpercentage enablewebserverforpath stopwebserver getavailabledistros -H --host -k --key -u --user -p --password stopupdate"
     12            opts="setcname update rundebmirror volatileupdate isalive getmirrorarchitecture setmirrorarchitecture getmirrororig setmirrororig getchecksumvalidation setchecksumvalidation getpercentage enablewebserverforpath stopwebserver getavailabledistros -H --host -k --key -u --user -p --password stopupdate"
    1313       
    1414           #
  • lliurex-mirror/trunk/fuentes/lliurex-mirror-cli/usr/sbin/lliurex-mirror

    r3346 r7089  
    99import os
    1010import time
     11import signal
    1112
    1213class LliurexMirror(object):
     
    1415        def __init__(self,credentials,host):
    1516                super(LliurexMirror, self).__init__()
     17                self.exitting = False
    1618                self.ip = host if host != None else "localhost"
    1719                if credentials != None:
     
    2628                self.localclient = x.ServerProxy("https://localhost:9779",allow_none=True)
    2729                self.localcredentials = self.get_local_credentials()
     30                self.volatilebkp={}
    2831
    2932        def get_local_credentials(self):
     
    3740        def setCname(self):
    3841                result = self.client.set_cname(self.credentials,"MirrorManager")
    39                 print result['msg']
    40                 return  0 if result['status'] else 1
    41 
    42         def noninteractiveUpdate(self,mirror,pathtoupdate):
    43                 self.runDebmirror(mirror,pathtoupdate)
     42                if 'msg' in result:
     43                    print result['msg']
     44                    return  0 if result['status'] else 1
     45                else:
     46                    print result
     47                    return 1
     48
     49        def noninteractiveUpdate(self,mirror,pathtoupdate,volatile=False):
     50                self.runDebmirror(mirror,pathtoupdate,volatile)
    4451                counter = 0
    4552                percentage = 0
    4653                clockpercentage = 0
    4754                clock = ['—','/','|','\\']
    48                 while True:
     55                while True and not self.exitting:
    4956                        if  counter ==  0:
    5057                                result = self.client.get_percentage(self.credentials,"MirrorManager",mirror)
     
    6774                sys.stdout.write("\n")
    6875
    69         def runDebmirror(self,mirror,pathtoupdate):
    70 
     76        def runDebmirror(self,mirror,pathtoupdate,volatile=False):
     77                mirrororig=""
     78                optionorig=""
     79                optionused=""
    7180                if len(pathtoupdate) != 0:
    7281                        if pathtoupdate.lower().startswith("http"):
    73                                 self.setMirrorOrig(mirror,pathtoupdate,3)
    74                                 self.setOptionUpdate(mirror,3)
     82                                if volatile:
     83                                    try:
     84                                        ret=self.client.get_mirror_orig(self.credentials,"MirrorManager", mirror, '3')
     85                                        if not ret['status']:
     86                                            raise Exception(ret['msg'])
     87                                        else:
     88                                            mirrororig=ret['msg']
     89                                    except Exception as e:
     90                                        print e
     91                                        return 1
     92                                    try:
     93                                        ret=self.client.get_option_update(self.credentials,"MirrorManager", mirror)
     94                                        if not ret['status']:
     95                                            raise Exception(ret['msg'])
     96                                        else:
     97                                            optionorig=ret['msg']
     98                                        optionused='3'
     99                                    except Exception as e:
     100                                        print e
     101                                        return 1
     102                                res = self.setMirrorOrig(mirror,pathtoupdate,3)
     103                                if res == 0:
     104                                    res = self.setOptionUpdate(mirror,3)
     105                                    if res != 0:
     106                                        print 'Error setting update option'
     107                                        return 1
     108                                else:
     109                                    print 'Error setting mirror orig'
     110                                    return 1
    75111                        elif os.path.exists(pathtoupdate):
    76112                                result = self.client.get_client_ip('','MirrorManager','')
     
    78114                                result = self.localclient.enable_webserver_into_folder(self.localcredentials,'MirrorManager',pathtoupdate)
    79115                                tempserver = tempserver + ":" + str(result['msg'])
     116                                if volatile:
     117                                    try:
     118                                        ret=self.client.get_mirror_orig(self.credentials,"MirrorManager", mirror, '2')
     119                                        if not ret['status']:
     120                                            raise Exception(ret['msg'])
     121                                        else:
     122                                            mirrororig=ret['msg']
     123                                    except Exception as e:
     124                                        print e
     125                                        return 1
     126                                    try:
     127                                        ret=self.client.get_option_update(self.credentials,"MirrorManager", mirror)
     128                                        if not ret['status']:
     129                                            raise Exception(ret['msg'])
     130                                        else:
     131                                            optionorig=ret['msg']
     132                                        optionused='2'
     133                                    except Exception as e:
     134                                        print e
     135                                        return 1
    80136                                self.setMirrorOrig(mirror,tempserver,2)
    81137                                self.setOptionUpdate(mirror,2)
     
    83139                                print("Error on orig")
    84140                                return 2
    85                 result = self.client.update(self.credentials,"MirrorManager",'',mirror,None)
    86                 print result['msg']
    87                 return  0 if result['status'] else 1
     141                if volatile:
     142                    self.volatilebkp={'distro':mirror,'mirrororig':mirrororig,'optionorig':optionorig,'optionused':optionused}
     143                else:
     144                    self.volatilebkp={}
     145                result = self.client.update(self.credentials,"MirrorManager",'',mirror,None,self.volatilebkp)
     146                if 'msg' in result:
     147                    print result['msg']
     148                    return  0 if result['status'] else 1
     149                else:
     150                    print result
     151                    return 1
    88152
    89153        def exportMirror(self,mirror,dest):
     
    137201        def setOptionUpdate(self,mirror,option):
    138202                result = self.client.set_option_update(self.credentials,"MirrorManager",mirror,option)
    139                 print str(result['msg'])
    140                 return  0 if result['status'] else 1
     203                if 'msg' in result:
     204                    print str(result['msg'])
     205                    return  0 if result['status'] else 1
     206                else:
     207                    print result
     208                    return 1
    141209
    142210        def isAlive(self):
     
    147215        def getMirrorArchitecture(self,distro):
    148216                result = self.client.get_mirror_architecture(self.credentials,"MirrorManager",distro)
    149                 print str(result['msg'])
    150                 return  0 if result['status'] else 1
     217                if 'msg' in result:
     218                    print str(result['msg'])
     219                    return  0 if result['status'] else 1
     220                else:
     221                    print result
     222                    return 1
    151223
    152224        def setMirrorArchitecture(self,distro,archs):
    153225                result = self.client.set_mirror_architecture(self.credentials,"MirrorManager",distro,archs)
    154                 print str(result['msg'])
    155                 return  0 if result['status'] else 1
    156 
    157         def getMirrorOrig(self,distro):
    158                 result = self.client.get_mirror_orig(self.credentials,"MirrorManager",distro)
    159                 print str(result['msg'])
    160                 return  0 if result['status'] else 1
     226                if 'msg' in result:
     227                    print str(result['msg'])
     228                    return  0 if result['status'] else 1
     229                else:
     230                    print result
     231                    return 1
     232
     233        def getMirrorOrig(self,distro, option):
     234                result = self.client.get_mirror_orig(self.credentials,"MirrorManager", distro, option)
     235                if 'msg' in result:
     236                    print str(result['msg'])
     237                    return  0 if result['status'] else 1
     238                else:
     239                    print result
     240                    return 1
    161241
    162242        def setMirrorOrig(self,distro,url,option):
    163243                result = self.client.set_mirror_orig(self.credentials,"MirrorManager",distro,url,option)
    164                 print str(result['msg'])
    165                 return  0 if result['status'] else 1
     244                if 'msg' in result:
     245                    print str(result['msg'])
     246                    return  0 if result['status'] else 1
     247                else:
     248                    print result
     249                    return 1
    166250
    167251        def getChecksumValidation(self,distro):
    168252                result = self.client.get_checksum_validation(self.credentials,"MirrorManager",distro)
    169                 print str(result['msg'])
    170                 return  0 if result['status'] else 1
     253                if 'msg' in result:
     254                    print str(result['msg'])
     255                    return  0 if result['status'] else 1
     256                else:
     257                    print result
     258                    return 1
    171259
    172260        def setChecksumValidation(self,distro,value):
    173261                check = 0 if not value else 1
    174262                result = self.client.set_checksum_validation(self.credentials,"MirrorManager",distro,check)
    175                 print str(result['msg'])
    176                 return  0 if result['status'] else 1
     263                if 'msg' in result:
     264                    print str(result['msg'])
     265                    return  0 if result['status'] else 1
     266                else:
     267                    print result
     268                    return 1
    177269
    178270        def getPercentage(self,distro):
    179271                result = self.client.get_percentage(self.credentials,"MirrorManager",distro)
    180                 print str(result['msg'])
    181                 return  0 if result['status'] else 1
     272                if 'msg' in result:
     273                    print str(result['msg'])
     274                    return  0 if result['status'] else 1
     275                else:
     276                    print result
     277                    return 1
    182278
    183279        def enableWebserverForPath(self,path):
    184280                result = self.client.enable_webserver_into_folder(self.credentials,"MirrorManager",path)
    185                 print str(result['msg'])
    186                 return  0 if result['status'] else 1
     281                if 'msg' in result:
     282                    print str(result['msg'])
     283                    return  0 if result['status'] else 1
     284                else:
     285                    print result
     286                    return 1
    187287
    188288        def stopWebserver(self,port):
    189289                result = self.client.stop_webserver(self.credentials,"MirrorManager",port)
    190                 print str(result['msg'])
    191                 return  0 if result['status'] else 1
     290                if 'msg' in result:
     291                    print str(result['msg'])
     292                    return  0 if result['status'] else 1
     293                else:
     294                    print result
     295                    return 1
    192296
    193297        def stopUpdate(self):
    194298                result = self.client.stopupdate(self.credentials,"MirrorManager")
    195                 print str(result['msg'])
    196                 return  0 if result['status'] else 1
     299                if 'msg' in result:
     300                    print str(result['msg'])
     301                    return  0 if result['status'] else 1
     302                else:
     303                    print result
     304                    return 1
    197305
    198306        def getAvailableDistros(self):
    199307                result = self.client.get_available_mirrors(self.credentials,"MirrorManager")
    200                 print str(result['msg'])
    201                 return  0 if result['status'] else 1
     308                if 'msg' in result:
     309                    print str(result['msg'])
     310                    return  0 if result['status'] else 1
     311                else:
     312                    print result
     313                    return 1
    202314
    203315        def isMirrorUpdate(self,distro):
    204316                result = self.client.is_update_available(self.credentials,"MirrorManager",distro)
    205                 print str(result['msg'])
    206                 return  0 if result['status'] else 1
     317                if 'msg' in result:
     318                    print str(result['msg'])
     319                    return  0 if result['status'] else 1
     320                else:
     321                    print result
     322                    return 1
     323       
     324        def exit_now(self,*args,**kwargs):
     325                self.exitting = True
     326                print "\nCancelling, please wait...\n"
     327                try:
     328                    result = self.client.cancel_actions(self.credentials,"MirrorManager")
     329                    if 'msg' in result:
     330                        print str(result['msg'])
     331                        sys.exit(0) if result['status'] else sys.exit(1)
     332                    else:
     333                        print result
     334                        sys.exit(1)
     335                except:
     336                    sys.exit(1)
     337       
     338        def distrolistoptions(self,distro):
     339                if distro:
     340                    result = self.client.get_distro_options(self.credentials,"MirrorManager",distro)
     341                else:
     342                    return 1
     343                if 'msg' in result:
     344                    print str(result['msg'])
     345                    return 0 if result['status'] else 1
     346                else:
     347                    print result
     348                    return 1
     349       
     350        def resetConfig(self,distro):
     351                if distro:
     352                    result = self.client.reset_debmirror_config(self.credentials,"MirrorManager",distro)
     353                else:
     354                    return 1
     355                if 'msg' in result:
     356                    print str(result['msg'])
     357                    return 0 if result['status'] else 1
     358                else:
     359                    print result
     360                    return 1
    207361
    208362def usage():
     
    212366                puts("Actions")
    213367                with indent(4):
    214                         puts("setcname")
    215                         puts("update DISTRO [URL|FILEPATH]")
    216                         puts("unattendedupdate DISTRO [URL|FILEPATH]")
    217                         puts("rundebmirror DISTRO [URL|FILEPATH]")
    218                         puts("exportmirror DISTRO DESTMIRROR")
    219                         puts("isalive")
    220                         puts("isaliveexport")
    221                         puts("getmirrorarchitecture")
    222                         puts("setmirrorarchitecture [ARCH ARCH ...]")
    223                         puts("getmirrororig")
    224                         puts("setmirrororig MIRROR URL OPTION")
    225                         puts("getchecksumvalidation")
    226                         puts("setchecksumvalidation [0|1]")
    227                         puts("getpercentage")
    228                         puts("getpercentageexport")
    229                         puts("enablewebserverforpath PATH")
    230                         puts("stopwebserver PORT")
    231                         puts("stopupdate")
    232                         puts("getavailabledistros")
    233                         puts("ismirrorupdate")
     368                        puts("Options tagged with '*' need admin privileges, '[]' indicates optional parameter")
     369                        puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
     370                        puts("* setcname                                   (Set DNS Name)")
     371                        puts("* update DISTRO [URL|FILEPATH]               (Update DISTRO mirror from URL or FILEPATH)")
     372                        puts("* rundebmirror DISTRO [URL|FILEPATH]         (Same option as update)")
     373                        puts("* volatileupdate DISTRO [URL|FILEPATH]       (Update without writing changes to config)")
     374                        puts("* unattendedupdate DISTRO [URL|FILEPATH]     (Automated update)")
     375                        puts("* exportmirror DISTRO DESTMIRROR             (Export current DISTRO mirror to DESTMIRROR)")
     376                        puts("  isalive                                    (Check if update thread is running)")
     377                        puts("  isaliveexport                              (Check if exportation thread is running)")
     378                        puts("  getmirrorarchitecture                      (Get current mirror architecture/s)")
     379                        puts("* setmirrorarchitecture [ARCH ARCH ...]      (Set ARCH... as current mirror architecture)")
     380                        puts("  getmirrororig DISTRO [OPTION]              (Get origin/s from DISTRO)")
     381                        puts("* setmirrororig MIRROR URL OPTION            (Set mirror origin into optional update slot)")
     382                        puts("  getchecksumvalidation                      (Get mirror checksum)")
     383                        puts("* setchecksumvalidation [0|1]                (Set checksum validation when download deb's)")
     384                        puts("  getpercentage                              (Get current update percentage)")
     385                        puts("  getpercentageexport                        (Get current exportation percentage)")
     386                        puts("* enablewebserverforpath PATH                (Setup webserver to export mirror from path)")
     387                        puts("  stopwebserver PORT                         (Stop current local webserver)")
     388                        puts("* stopupdate                                 (Cancel current update process)")
     389                        puts("  getavailabledistros                        (Get all distro available)")
     390                        puts("  distrolistoptions DISTRO                   (Get options for DISTRO)")
     391                        puts("  ismirrorupdate                             (Check if it's updating the mirror)")
     392                        puts("* resetconfig DISTRO                         (Reset all config files for DISTRO)")
    234393                puts("Flags")
    235394                with indent(4):
     
    243402        sys.exit(1)
    244403
     404
    245405if __name__ == '__main__':
     406
    246407        args = arguments.Args().copy
    247408        host = "localhost"
     
    257418                if host == None:
    258419                        usage()
    259 
     420                index = args.first(['-H',"--host"])
     421                args.pop(index)
     422                args.pop(index)
    260423
    261424        if not args.contains(["-k","--key","-u","--user","-p","--password","-P","--intpassword"]):
     
    299462                args.pop(index)
    300463                args.pop(index)
    301 
    302464        action = args.pop(0)
    303465        lliurexmirror = LliurexMirror(credentials,host)
    304         if action == "setcname":
     466        signal.signal(signal.SIGTERM, lliurexmirror.exit_now)
     467        signal.signal(signal.SIGQUIT, lliurexmirror.exit_now)
     468        signal.signal(signal.SIGINT, lliurexmirror.exit_now)
     469        if action == "distrolistoptions":
     470                sys.exit(lliurexmirror.distrolistoptions(args.get(0)))
     471        elif action == "setcname":
    305472                sys.exit(lliurexmirror.setCname())
     473        elif action == "volatileupdate":
     474                mirror = args.get(0)
     475                pathtoupdate = " ".join(args[1:])
     476                lliurexmirror.noninteractiveUpdate(mirror,pathtoupdate,volatile=True)
    306477        elif action == "rundebmirror" or action =="update":
    307478                mirror = args.get(0)
     
    321492                sys.exit(lliurexmirror.setMirrorArchitecture(args.pop(0),args.all))
    322493        elif action == "getmirrororig":
    323                 sys.exit(lliurexmirror.getMirrorOrig(args.get(0)))
     494                sys.exit(lliurexmirror.getMirrorOrig(args.get(0),args.get(1)))
    324495        elif action == "setmirrororig":
    325                 sys.exit(lliurexmirror.setMirrorOrig(args.get(0),args.get(1)))
     496                sys.exit(lliurexmirror.setMirrorOrig(args.get(0),args.get(1),args.get(2)))
    326497        elif action == "getchecksumvalidation":
    327498                sys.exit(lliurexmirror.getChecksumValidation(args.get(0)))
     
    347518                destmirror = " ".join(args[1:])
    348519                sys.exit(lliurexmirror.exportMirror(mirror,destmirror))
     520        elif action == "resetconfig":
     521                distro = args.get(0)
     522                sys.exit(lliurexmirror.resetConfig(distro))
    349523               
  • lliurex-mirror/trunk/fuentes/n4d-lliurex-mirror.install/etc/n4d/conf.d/MirrorManager

    r3685 r7089  
    3636update_size_info=anonymous,*
    3737is_mirror_available=anonymous,*
     38get_distro_options=anonymous,*
     39cancel_actions=adm,admins
     40reset_debmirror_config=adm,admins
  • lliurex-mirror/trunk/fuentes/n4d-lliurex-mirror.install/usr/share/n4d/python-plugins/MirrorManager.py

    r3685 r7089  
    99import datetime
    1010import pexpect
     11import signal
    1112import re
    1213import json
     
    2021import subprocess
    2122
     23DEBUG = True
     24
    2225class MirrorManager:
    23 
    2426
    2527        def __init__(self):
     
    4143                self.defaultmirrorinfo = {"status_mirror":"New","last_mirror_date":None,"mirror_size":0,"progress":0}
    4244                self.valid_chars = "-_.%s%s" % (string.ascii_letters, string.digits)
     45                self.exitting = False
     46                self.default_path_configs = {   'llx16':        '/usr/share/lliurex-mirror/conf/llx16.json',
     47                                                'llx15':        '/usr/share/lliurex-mirror/templates/llx15.json',
     48                                                'llx14':        '/usr/share/lliurex-mirror/templates/llx14.json',
     49                                                'llx13':        '/usr/share/lliurex-mirror/templates/llx13.json',
     50                                            }
    4351                self.default_mirror_config = '''
    4452{
    4553        "NAME": "",
    4654        "BANNER": "",
    47         "ORIGS" : {"1":"lliruex.net/xenial","2":"","3":""}, # 1 ORIGINAL ; 2 LOCALFILESYSTEM; 3 REMOTEURL
     55        "ORIGS" : {"1":"lliurex.net/xenial","2":"","3":""}, # 1 ORIGINAL ; 2 LOCALFILESYSTEM; 3 REMOTEURL
    4856        "ARCHITECTURES": [ "amd64", "i386"],
    4957        "SECTIONS": ["main", "main/debian-installer", "universe", "restricted", "multiverse", "preschool"],
     
    5765               
    5866        #def init
     67       
     68        def debug(self,*args,**kwargs):
     69            if not DEBUG:
     70                return None
     71            try:
     72                caller = sys._getframe().f_back.f_code.co_name
     73            except:
     74                caller = ""
     75            with open('/var/log/lliurex-mirror.log','a') as fp:
     76                for a in args:
     77                    fp.write("{}:> {}\n".format(caller,a))
     78                for kw in kwargs:
     79                    fp.write("{}:> {}={}\n".format(caller,kw,kwargs.get(kw)))
    5980       
    6081        def startup(self,options):
     
    108129                pass
    109130        #def restore
    110 
     131       
     132        def cancel_actions(self):
     133            try:
     134                self.exitting = True
     135                time.sleep(3)
     136                self.debmirrorprocess.kill(signal.SIGKILL)
     137                self.debmirrorprocess.close(force=True)
     138                return {'status':True,'msg':'Killed'}
     139            except Exception as e:
     140                return {'status':False,'msg':e}
     141        #def cancel_actions(self)
     142       
    111143        def set_cname(self):
    112144                #Get template
     
    133165        #def set_cname
    134166       
    135         def update(self,ip,distro=None,callback_args=None):
     167        def update(self,ip,distro=None,callback_args=None,restore_info={}):
    136168
    137169                if distro==None:
     
    142174               
    143175                self.percentage=(0,None)
    144                 self.update_thread=threading.Thread(target=self._update,args=(ip,distro,callback_args,))
     176                self.update_thread=threading.Thread(target=self._update,args=(ip,distro,callback_args,restore_info,))
    145177                self.update_thread.daemon=True
    146178                self.update_thread.start()
     
    150182        #def update
    151183       
    152         def _update(self,ip,distro,callback_args):
     184        def _update(self,ip,distro,callback_args,restore_info):
    153185                if not self.variable.has_key(distro):
    154186                        self.variable[distro]=self.defaultmirrorinfo
     
    167199                fd.write("MIRROR START AT " + str(datetime.datetime.now())+ " \n")
    168200                fd.flush()
    169                 errors_found = False   
     201                errors_found = False
    170202                self.debmirrorprocess=pexpect.spawn("/usr/bin/debmirror")
    171203                download_packages = False
     
    175207                except:
    176208                        pass
    177                 while True:
     209                fd.write('Starting Loop, reading debmirror process {}\n'.format(self.debmirrorprocess.pid))
     210                fd.flush()
     211                while True and not self.exitting:
    178212                        try:
    179213                                emergency_counter += 1
     
    183217                                line =self.debmirrorprocess.before
    184218
    185                                 fd.write(line + "\n")
    186                                 fd.flush()
    187219                                if line.find("Files to download") >= 0 :
    188220                                        download_packages = True
    189                                 line1=line.strip("\n")
     221                                line1=line.strip()
    190222                                if download_packages:
    191223                                        if line1.startswith("[") and line1[5] == "]":
     
    201233                                        e=Exception(line1)
    202234                                        raise e
     235
    203236                                if line1.startswith("Errors"):
    204237                                        errors_found = True
    205        
     238                                        # error is printed on next line iteration
    206239
    207240                        except pexpect.EOF:
     241                                        fd.write("Exception EOF line:'{}'\n".format(line1))
     242                                        fd.flush()
    208243                                        line1 = self.debmirrorprocess.before
    209244                                        if line1 != "" and line1.startswith("[") and line1[5] == "]":
     
    217252                                        break
    218253                        except Exception as e:
     254                                fd.write("Errors detected: '{}'\n".format(line1))
     255                                fd.flush()
     256                                self.debmirrorprocess.kill(signal.SIGKILL)
     257                                self.debmirrorprocess.close(force=True)
    219258                                print e
    220259                                self.variable[distro]['status_mirror'] = "Error"
     
    224263                                self.n4d_vars.set_variable("LLIUREXMIRROR",self.variable)
    225264                                break
    226                 fd.close()
    227                 if type(callback_args) == type({}):
     265
     266
     267                fd.write("EXITTING LOOP errors_found={}\n".format(errors_found))
     268                fd.flush()
     269               
     270                if restore_info and isinstance(restore_info,dict):
     271                    if 'distro' in restore_info:
     272                        self.debug(restore=restore_info)
     273                        if 'mirrororig' in restore_info and 'optionorig' in restore_info:
     274                            self.debug(msg='setting mirror orig')
     275                            self.set_mirror_orig(restore_info['distro'],restore_info['mirrororig'],restore_info['optionused'])
     276                        if 'optionorig' in restore_info:
     277                            self.debug(msg='setting option orig')
     278                            self.set_option_update(restore_info['distro'],restore_info['optionorig'])
     279
     280                if self.exitting:
     281                        fd.write("Forced exit from update process!!!\n")
     282                        fd.flush()
     283                        self.percentage=(self.percentage[0],1)
     284                        self.variable[distro]['progress'] = self.percentage[0]
     285                        self.variable[distro]['status_mirror'] = "Cancelled"
     286                        self.n4d_vars.set_variable("LLIUREXMIRROR",self.variable)
     287                        fd.close()
     288                        self.exitting = False
     289                        return 0
     290                else:
     291                    fd.close()
     292
     293                if not errors_found and type(callback_args) == type({}):
    228294                        if callback_args.has_key('port'):
    229295                                import xmlrpclib as x
     
    279345
    280346        #def set_mirror_info(self):
    281 
     347           
     348        def get_distro_options(self,distro):
     349                configpath = os.path.join(self.configpath, distro + ".json")
     350                try:
     351                    config = json.load(open(configpath,'r'))
     352                except Exception as e:
     353                        return {'status':False,'msg': e }
     354
     355                if "ORIGS" in config.keys():
     356                        return {'status':True,'msg':config["ORIGS"].keys() }
     357
     358                return {'status':False,'msg':' No options into configfile {}'.format(configpath)}
     359
     360        #def get_distro_options(self,distro)
     361       
    282362        def update_size_info(self,distro):
    283363                if distro!=None:
     
    340420        def set_mirror_architecture(self,distro,archs):
    341421                configpath = os.path.join(self.configpath,distro + ".json")
    342                
    343                 config = json.load(open(configpath,'r'))
    344                
     422                config = json.load(open(configpath,'r'))
    345423                config['ARCHITECTURES'] = archs
    346 
    347 
    348424                f=open(configpath,"w")
    349 
    350425                data=unicode(json.dumps(config,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
    351426                f.write(data)
    352427                f.close()
    353 
    354428                self.build_debmirror_config(distro)
    355429                return {'status':True,'msg':'set architecture'}
     
    365439
    366440                if "ORIGS" in config.keys():
    367                         return {'status':True,'msg':config["ORIGS"][option] }
     441                        if option:
     442                            if option in config['ORIGS']:
     443                                return {'status':True,'msg':config["ORIGS"][option] }
     444                            else:
     445                                return {'status':False,'msg':'No such option available'}
     446                        else:
     447                            ret=[]
     448                            for opt in config['ORIGS']:
     449                                ret.append({opt:config['ORIGS'][opt]})
     450                            return {'status':True,'msg':ret}
    368451                       
    369452                return {'status':False,'msg':"debmirror.conf hasn't orig variable" }   
     
    375458                configpath = os.path.join(self.configpath, distro + ".json")
    376459                config = json.load(open(configpath,'r'))
    377                 config['ORIGS'][option] = url
    378 
     460                config['ORIGS'][str(option)] = url
    379461                f=open(configpath,"w")
    380462                data=unicode(json.dumps(config,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
    381463                f.write(data)
    382464                f.close()
    383 
    384465                self.build_debmirror_config(distro)
    385466                return {'status':True,'msg':'set orig'}
     
    390471                config = json.load(open(configpath,'r'))
    391472                if not os.path.lexists(configpath):
    392                         return {'status':False,'msg':'not exists debmirror.conf to '+ distro }
     473                        return {'status':False,'msg':' no configfile {} available'.format(configpath) }
    393474
    394475                if "CURRENT_UPDATE_OPTION" in config.keys():
    395476                        return {'status':True,'msg':config["CURRENT_UPDATE_OPTION"] }
    396477                       
    397                 return {'status':False,'msg':"debmirror.conf hasn't option update variable" }
     478                return {'status':False,'msg':' No current_update_option into configfile {}'.format(configpath)}
    398479        #def get_option_update
    399480
     
    412493                f.write(data)
    413494                f.close()
    414 
    415495                self.build_debmirror_config(distro)
    416496                return {'status':True,'msg':'set update option'}
     
    424504        #def get_percentage
    425505
    426 
    427506        def build_debmirror_config(self,distro):
    428507                result = self.render_debmirror_config(distro)
    429508                string_template = result['msg']
    430                 f = open(os.path.join(self.debmirrorconfpath,distro),'w')
     509                conffile = os.path.join(self.debmirrorconfpath,distro)
     510                f = open(conffile,'w')
    431511                f.write(string_template)
    432512                f.close()
    433513        #def build_debmirror_config
    434514
     515        def reset_debmirror_config(self,distro):
     516                try:
     517                    try:
     518                        config=self.default_path_configs[distro]
     519                        with open(config,'r') as fp_orig:
     520                            with open(os.path.join(self.configpath,distro + ".json"),'w') as fp_dest:
     521                                fp_dest.write(fp_orig.read())
     522                    except:
     523                        return {'status': False, 'msg': e}
     524                    self.build_debmirror_config(distro)
     525                    return {'status': True, 'msg': 'CONFIG RESET'}
     526                except Exception as e:
     527                    return {'status': False, 'msg': e}
     528        #def reset_debmirror_config(self,distro)
     529       
    435530        def render_debmirror_config(self,arg):
    436531                if type(arg) == type(""):
Note: See TracChangeset for help on using the changeset viewer.