source: lliurex-mirror/trunk/fuentes/lliurex-mirror-gui/usr/share/lliurex-mirror/lliurex_mirror_connect.py @ 2612

Last change on this file since 2612 was 2612, checked in by hectorgh, 4 years ago

adding project files

File size: 7.5 KB
Line 
1import xmlrpclib
2import base64
3import tempfile
4
5class LliurexMirrorN4d:
6        def __init__(self,server,credentials):
7                self.mode = None
8                self.client = None
9                self.serverip = server
10                self.localclient = None
11                self.connect(server)
12                self.local_connect()
13                self.credentials = credentials
14                self.localcredentials = self.get_local_credentials()
15                self.localport = None
16                self.remoteport = None
17               
18                self.key_list=["NAME","ARCHITECTURES","CURRENT_UPDATE_OPTION","BANNER","DISTROS","SECTIONS","MIRROR_PATH","ORIGS","CHK_MD5","IGN_GPG","IGN_RELEASE"]
19               
20               
21        #def __init__
22
23
24        def connect(self,server):
25                self.client = xmlrpclib.ServerProxy('https://' + server + ':9779',allow_none=True)
26                self.serverip = server
27                try:
28                        self.client.get_methods()
29                except:
30                        self.client = None
31                        return False
32                return True
33        #def connect
34
35        def local_connect(self):
36                self.localclient = xmlrpclib.ServerProxy('https://localhost:9779',allow_none=True)
37                try:
38                        self.localclient.get_methods()
39                except:
40                        self.localclient = None
41                        return False
42                return True
43        #def connect
44
45        def get_local_credentials(self):
46                try:
47                        f = open('/etc/n4d/key','r')
48                        key = f.readline().strip()
49                        return key
50                except:
51                        return None
52
53        def mirror_list(self):
54                try:
55                        if type(self.client) == type(None):
56                                return {}
57                        result = self.client.get_all_configs(self.credentials,'MirrorManager')
58                        if not result['status']:
59                                return {}
60                        return result['msg']
61                except:
62                        return {}
63                       
64        #def mirror_list
65
66        def is_alive(self):
67                try:
68                        return self.client.is_alive(self.credentials,'MirrorManager')
69                except:
70                        return {'status':False,'msg':None}
71                       
72        #def is_alive
73       
74        def save_config(self,mirror,config):
75               
76                try:
77               
78                        parsed_mirror={}
79                       
80                        for key in self.key_list:
81                                parsed_mirror[key]=config[key]
82                       
83                       
84                        result = self.client.update_mirror_config(self.credentials,'MirrorManager',mirror,parsed_mirror)
85                        return result
86                       
87                except Exception as e:
88                        print "[!] Error saving configuration: [!]"
89                        print e
90                        return None
91               
92        #def save_config
93
94        def create_config(self,config):
95               
96                try:
97               
98                        if type(self.client) == type(None):
99                                return {}
100                        result = self.client.new_mirror_config(self.credentials,'MirrorManager',config)
101               
102                        if result['status']:
103                                return result['msg']
104                               
105                except:
106                       
107                        return {}
108               
109               
110               
111        #def create_conf
112
113        def update(self,mirror,mode,data=None):
114                '''
115                mode is option to update mirror. (Internet, local network, folder)
116                data is extra info to update (local network ip, )
117                '''
118               
119                try:
120               
121                        self.mode = None
122                        self.localport = None
123                        callback_args = None
124                        if mode == '2':
125                                self.mode = 2 
126                                result = self.client.get_client_ip('','MirrorManager','')
127                                tempserver = result['msg']
128                                result = self.localclient.enable_webserver_into_folder(self.localcredentials,'MirrorManager',data)
129                                print result
130                                tempserver = tempserver + ":" + str(result['msg'])
131                                data = tempserver
132                                callback_args = {}
133                                callback_args['port'] = str(result['msg'])
134                                self.localport = str(result['msg'])
135                        if data != None:
136                                self.client.set_mirror_orig(self.credentials,'MirrorManager',mirror,data,mode)
137                        self.client.set_option_update(self.credentials,'MirrorManager',mirror,mode)
138                        result = self.client.update(self.credentials,'MirrorManager','',mirror,callback_args)
139                        return result['status']
140                       
141                except Exception as e:
142                        print e
143                       
144                        return None
145                       
146        #def update
147
148        def export(self, mirror,folder):
149               
150                try:
151                        # Get config for this mirror
152                        result = self.client.get_all_configs(self.credentials,'MirrorManager')
153                        config = result['msg'][mirror]
154                        result = self.client.get_client_ip('','MirrorManager','')
155                        ip = result['msg']
156                        # Open webserver for mirror and get ip
157                        result = self.client.enable_webserver_into_folder(self.credentials,'MirrorManager',config['MIRROR_PATH'])
158                        port = str(result['msg'])
159                        self.remoteport = port
160                        # Modify Config and write
161                       
162                        config['MIRROR_PATH'] = folder
163                        config['CURRENT_UPDATE_OPTION'] = '3'
164                        config['ORIGS']['3'] = self.serverip + ":" + str(port)
165                        result = self.client.render_debmirror_config(self.credentials,'MirrorManager',config)
166                        temp_file = tempfile.mktemp()
167                        f = open(temp_file,'w')
168                        f.write(result['msg'])
169                        f.close()
170                        callback_args = {}
171                        callback_args['ip'] = ip
172                        callback_args['port'] = port
173                        # Execute mirror
174                        print self.localclient.get_mirror(self.localcredentials,'MirrorManager',temp_file,callback_args)
175                        return True
176                except:
177                       
178                        return False
179        #def export
180
181        def get_percentage_export(self):
182                try:
183                        result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager')
184                        return result['msg'][0]
185                except Exception as e:
186                        print e
187                        return None
188                       
189        #def get_percentage_export
190
191        def is_alive_export(self):
192                try:
193                        result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager')
194                        return result
195                except Exception as e:
196                        print e
197                        return None
198               
199
200
201        def get_percentage(self,mirror):
202               
203                try:
204               
205                        result = self.client.get_percentage(self.credentials,'MirrorManager',mirror)
206                        if result['status'] :
207                                return result['msg']
208                               
209                except Exception as e:
210                        print e
211                        return None
212                       
213        #def get_percentage
214
215       
216        def get_status(self,mirror):
217               
218                try:
219                        var=self.client.get_variable(self.credentials,"VariablesManager","LLIUREXMIRROR")
220                        if var[mirror]["status_mirror"]=="Ok":
221                                return {"status": True, "msg": None}
222                        else:
223                                return {"status": False, "msg": var[mirror]["exception_msg"]}
224                               
225                except Exception as e:
226                        return {"status": False, "msg": str(e) }
227                       
228        #def get_status
229
230       
231        def get_last_log(self):
232               
233                try:
234               
235                        ret=self.client.get_last_log(self.credentials,"MirrorManager")
236                        txt=base64.b64decode(ret["msg"])
237                        tmp_file=tempfile.mkstemp(suffix=".lliurex-mirror")
238                        f=os.fdopen(tmp_file[0],"w")
239                        f.write(txt)
240                        f.close()
241                        return tmp_file[1]
242                       
243                except Exception as e:
244                        print e
245                        return None
246
247        #def get_last_log
248
249        def is_update_available(self,mirror):
250                try:
251                        result = self.client.is_update_available(self.credentials,'MirrorManager',mirror)
252                        return result['status']
253                except Exception as e:
254                        print e
255                        return None
256                       
257        #def is_update_available
258
259        def stop_update(self):
260                try:
261                        if self.mode == '2':
262                                self.localclient.stop_webserver(self.credentials,'MirrorManager',self.localport)
263                        result = self.client.stopupdate(self.credentials,'MirrorManager')
264                        return result['status']
265                except Exception as e:
266                        print e
267                        return None
268                       
269        #def stop_update
270
271        def stop_export(self):
272               
273                try:
274                        self.client.stop_webserver(self.credentials,'MirrorManager',self.remoteport)
275                        result = self.localclient.stopgetmirror(self.credentials,'MirrorManager')
276                        return result['status']
277                except Exception as e:
278                        print e
279                        return None
280                       
281        #def stop_update
282
283
284if __name__ == '__main__':
285        #c = LliurexMirrorN4d('localhost',['kbut','lliurex'])
286        #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']}
287        #print c.save_config('mippa',config)
288        #print c.create_conf(config)
289        #print c.update('mippa','3','172.20.8.6/mirror/ppa-xenial')
290        #print c.update('mippa','2','/home/mirror-ppa-otracarpeta')
291        #print c.update('mippa','1')
292        #print c.mirror_list()
293        #print c.export('mippa','/home/mirror16')
294        #print c.is_alive_export()
295        #print c.get_percentage_export()
296        #print c.get_percentage('mippa')
297        #print c.is_alive()
298        #print c.stop_export()
299        pass
Note: See TracBrowser for help on using the repository browser.