source: lliurex-mirror/trunk/fuentes/lliurex-mirror2/lliurex_mirror_connect.py @ 2578

Last change on this file since 2578 was 2578, checked in by hectorgh, 3 years ago

wip

File size: 6.4 KB
Line 
1import xmlrpclib
2
3class LliurexMirrorN4d:
4        def __init__(self,server,credentials):
5                self.mode = None
6                self.client = None
7                self.serverip = server
8                self.localclient = None
9                self.connect(server)
10                self.local_connect()
11                self.credentials = credentials
12                self.localcredentials = self.get_local_credentials()
13                self.localport = None
14                self.remoteport = None
15               
16                self.key_list=["NAME","ARCHITECTURES","CURRENT_UPDATE_OPTION","BANNER","DISTROS","SECTIONS","MIRROR_PATH","ORIGS","CHK_MD5","IGN_GPG","IGN_RELEASE"]
17               
18               
19        #def __init__
20
21
22        def connect(self,server):
23                self.client = xmlrpclib.ServerProxy('https://' + server + ':9779',allow_none=True)
24                self.serverip = server
25                try:
26                        self.client.get_methods()
27                except:
28                        self.client = None
29                        return False
30                return True
31        #def connect
32
33        def local_connect(self):
34                self.localclient = xmlrpclib.ServerProxy('https://localhost:9779',allow_none=True)
35                try:
36                        self.localclient.get_methods()
37                except:
38                        self.localclient = None
39                        return False
40                return True
41        #def connect
42
43        def get_local_credentials(self):
44                try:
45                        f = open('/etc/n4d/key','r')
46                        key = f.readline().strip()
47                        return key
48                except:
49                        return None
50
51        def mirror_list(self):
52                try:
53                        if type(self.client) == type(None):
54                                return {}
55                        result = self.client.get_all_configs(self.credentials,'MirrorManager')
56                        if not result['status']:
57                                return {}
58                        return result['msg']
59                except:
60                        return {}
61                       
62        #def mirror_list
63
64        def is_alive(self):
65                try:
66                        return self.client.is_alive(self.credentials,'MirrorManager')
67                except:
68                        return {'status':False,'msg':None}
69                       
70        #def is_alive
71       
72        def save_config(self,mirror,config):
73               
74                parsed_mirror={}
75               
76                for key in self.key_list:
77                        parsed_mirror[key]=config[key]
78               
79               
80                result = self.client.update_mirror_config(self.credentials,'MirrorManager',mirror,parsed_mirror)
81                return result
82               
83        #def save_config
84
85        def create_config(self,config):
86                print config
87                if type(self.client) == type(None):
88                        return {}
89                result = self.client.new_mirror_config(self.credentials,'MirrorManager',config)
90                print 2
91                if result['status']:
92                        return result['msg']
93                return result
94        #def create_conf
95
96        def update(self,mirror,mode,data=None):
97                '''
98                mode is option to update mirror. (Internet, local network, folder)
99                data is extra info to update (local network ip, )
100                '''
101                self.mode = None
102                self.localport = None
103                callback_args = None
104                if mode == '2':
105                        self.mode = 2 
106                        result = self.client.get_client_ip('','MirrorManager','')
107                        tempserver = result['msg']
108                        result = self.localclient.enable_webserver_into_folder(self.localcredentials,'MirrorManager',data)
109                        print result
110                        tempserver = tempserver + ":" + str(result['msg'])
111                        data = tempserver
112                        callback_args = {}
113                        callback_args['port'] = str(result['msg'])
114                        self.localport = str(result['msg'])
115                if data != None:
116                        self.client.set_mirror_orig(self.credentials,'MirrorManager',mirror,data,mode)
117                self.client.set_option_update(self.credentials,'MirrorManager',mirror,mode)
118                result = self.client.update(self.credentials,'MirrorManager','',mirror,callback_args)
119                return result['status']
120        #def update
121
122        def export(self, mirror,folder):
123                import tempfile
124
125                # Get config for this mirror
126                result = self.client.get_all_configs(self.credentials,'MirrorManager')
127                config = result['msg'][mirror]
128                result = self.client.get_client_ip('','MirrorManager','')
129                ip = result['msg']
130                # Open webserver for mirror and get ip
131                result = self.client.enable_webserver_into_folder(self.credentials,'MirrorManager',config['MIRROR_PATH'])
132                port = str(result['msg'])
133                self.remoteport = port
134                # Modify Config and write
135               
136                config['MIRROR_PATH'] = folder
137                config['CURRENT_UPDATE_OPTION'] = '3'
138                config['ORIGS']['3'] = self.serverip + ":" + str(port)
139                result = self.client.render_debmirror_config(self.credentials,'MirrorManager',config)
140                temp_file = tempfile.mktemp()
141                f = open(temp_file,'w')
142                f.write(result['msg'])
143                f.close()
144                callback_args = {}
145                callback_args['ip'] = ip
146                callback_args['port'] = port
147                # Execute mirror
148                print self.localclient.get_mirror(self.localcredentials,'MirrorManager',temp_file,callback_args)
149                return True
150        #def export
151
152        def get_percentage_export(self):
153                result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager')
154                return result['msg'][0]
155        #def get_percentage_export
156
157        def is_alive_export(self):
158                result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager')
159                return result
160               
161
162
163        def get_percentage(self,mirror):
164                result = self.client.get_percentage(self.credentials,'MirrorManager',mirror)
165                if result['status'] :
166                        return result['msg']
167        #def get_percentage
168       
169        def get_status(self,mirror):
170               
171                try:
172                        var=self.client.get_variable(self.credentials,"VariablesManager","LLIUREXMIRROR")
173                        if var[mirror]["status_mirror"]=="Ok":
174                                return {"status": True, "msg": None}
175                        else:
176                                return {"status": False, "msg": var[mirror]["exception_msg"]}
177                               
178                except Exception as e:
179                        return {"status": False, "msg": str(e) }
180                       
181        #def get_status
182
183        def is_update_available(self,mirror):
184                result = self.client.is_update_available(self.credentials,'MirrorManager',mirror)
185                return result['status']
186        #def is_update_available
187
188        def stop_update(self):
189                if self.mode == '2':
190                        self.localclient.stop_webserver(self.credentials,'MirrorManager',self.localport)
191                result = self.client.stopupdate(self.credentials,'MirrorManager')
192                return result['status']
193        #def stop_update
194
195        def stop_export(self):
196                self.client.stop_webserver(self.credentials,'MirrorManager',self.remoteport)
197                result = self.localclient.stopgetmirror(self.credentials,'MirrorManager')
198                return result['status']
199        #def stop_update
200
201
202if __name__ == '__main__':
203        #c = LliurexMirrorN4d('localhost',['kbut','lliurex'])
204        #config = {'IGN_GPG': 1, 'NAME': 'Mi ppa', 'ORIGS': {'1': 'ppa.launchpad.net/llxdev/xenial/ubuntu', '3': '172.20.8.6/mirror/ppa-xenial/', '2': '/home/kbut/miMirrorPortatil'}, 'SECTIONS': ['main', 'universe', 'restricted', 'multiverse'], 'MIRROR_PATH': '/home/mirror-ppa', 'ARCHITECTURES': ['amd64', 'i386'], 'CHK_MD5': 0, 'IGN_RELEASE': 0, 'BANNER': '', 'CURRENT_UPDATE_OPTION': '1', 'DISTROS': ['xenial']}
205        #print c.save_config('mippa',config)
206        #print c.create_conf(config)
207        #print c.update('mippa','3','172.20.8.6/mirror/ppa-xenial')
208        #print c.update('mippa','2','/home/mirror-ppa-otracarpeta')
209        #print c.update('mippa','1')
210        #print c.mirror_list()
211        #print c.export('mippa','/home/mirror16')
212        #print c.is_alive_export()
213        #print c.get_percentage_export()
214        #print c.get_percentage('mippa')
215        #print c.is_alive()
216        #print c.stop_export()
217        pass
Note: See TracBrowser for help on using the repository browser.