source: lliurex-mirror/trunk/fuentes/lliurex-mirror-gui/lliurex_mirror_connect.py @ 2516

Last change on this file since 2516 was 2516, checked in by kbut, 3 years ago

first version of all functions working

File size: 5.8 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        #def __init__
16
17        def connect(self,server):
18                self.client = xmlrpclib.ServerProxy('https://' + server + ':9779',allow_none=True)
19                self.serverip = server
20                try:
21                        self.client.get_methods()
22                except:
23                        self.client = None
24                        return False
25                return True
26        #def connect
27
28        def local_connect(self):
29                self.localclient = xmlrpclib.ServerProxy('https://localhost:9779',allow_none=True)
30                try:
31                        self.localclient.get_methods()
32                except:
33                        self.localclient = None
34                        return False
35                return True
36        #def connect
37
38        def get_local_credentials(self):
39                try:
40                        f = open('/etc/n4d/key','r')
41                        key = f.readline().strip()
42                        return key
43                except:
44                        return None
45
46        def mirror_list(self):
47                if type(self.client) == type(None):
48                        return {}
49                result = self.client.get_all_configs(self.credentials,'MirrorManager')
50                if not result['status']:
51                        return {}
52                return result['msg']
53        #def mirror_list
54
55        def is_alive(self):
56                try:
57                        return self.client.is_alive(self.credentials,'MirrorManager')
58                except:
59                        return {'status':False,'msg':None}
60        #def is_alive
61       
62        def save_config(self,mirror,config):
63                result = self.client.update_mirror_config(self.credentials,'MirrorManager',mirror,config)
64                return result
65        #def save_config
66
67        def create_conf(self,config):
68                print config
69                if type(self.client) == type(None):
70                        return {}
71                result = self.client.new_mirror_config(self.credentials,'MirrorManager',config)
72                print 2
73                if result['status']:
74                        return result['msg']
75                return result
76        #def create_conf
77
78        def update(self,mirror,mode,data=None):
79                '''
80                mode is option to update mirror. (Internet, local network, folder)
81                data is extra info to update (local network ip, )
82                '''
83                self.mode = None
84                self.localport = None
85                callback_args = None
86                if mode == '2':
87                        self.mode = 2 
88                        result = self.client.get_client_ip('','MirrorManager','')
89                        tempserver = result['msg']
90                        result = self.localclient.enable_webserver_into_folder(self.localcredentials,'MirrorManager',data)
91                        print result
92                        tempserver = tempserver + ":" + str(result['msg'])
93                        data = tempserver
94                        callback_args = {}
95                        callback_args['port'] = str(result['msg'])
96                        self.localport = str(result['msg'])
97                if data != None:
98                        self.client.set_mirror_orig(self.credentials,'MirrorManager',mirror,data,mode)
99                self.client.set_option_update(self.credentials,'MirrorManager',mirror,mode)
100                result = self.client.update(self.credentials,'MirrorManager','',mirror,callback_args)
101                return result['status']
102        #def update
103
104        def export(self, mirror,folder):
105                import tempfile
106
107                # Get config for this mirror
108                result = self.client.get_all_configs(self.credentials,'MirrorManager')
109                config = result['msg'][mirror]
110                result = self.client.get_client_ip('','MirrorManager','')
111                ip = result['msg']
112                # Open webserver for mirror and get ip
113                result = self.client.enable_webserver_into_folder(self.credentials,'MirrorManager',config['MIRROR_PATH'])
114                port = str(result['msg'])
115                self.remoteport = port
116                # Modify Config and write
117               
118                config['MIRROR_PATH'] = folder
119                config['CURRENT_UPDATE_OPTION'] = '3'
120                config['ORIGS']['3'] = self.serverip + ":" + str(port)
121                result = self.client.render_debmirror_config(self.credentials,'MirrorManager',config)
122                temp_file = tempfile.mktemp()
123                f = open(temp_file,'w')
124                f.write(result['msg'])
125                f.close()
126                callback_args = {}
127                callback_args['ip'] = ip
128                callback_args['port'] = port
129                # Execute mirror
130                print self.localclient.get_mirror(self.localcredentials,'MirrorManager',temp_file,callback_args)
131                return True
132        #def export
133
134        def get_percentage_export(self):
135                result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager')
136                return result['msg']
137        #def get_percentage_export
138
139        def is_alive_export(self):
140                result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager')
141                print result
142                return result['status']
143
144
145        def get_percentage(self,mirror):
146                result = self.client.get_percentage(self.credentials,'MirrorManager',mirror)
147                if result['status'] :
148                        return result['msg']
149        #def get_percentage
150
151        def is_update_available(self,mirror):
152                result = self.client.is_update_available(self.credentials,'MirrorManager',mirror)
153                return result['status']
154        #def is_update_available
155
156        def stop_update(self):
157                if self.mode == '2':
158                        self.localclient.stop_webserver(self.credentials,'MirrorManager',self.localport)
159                result = self.client.stopupdate(self.credentials,'MirrorManager')
160                return result['status']
161        #def stop_update
162
163        def stop_export(self):
164                self.client.stop_webserver(self.credentials,'MirrorManager',self.remoteport)
165                result = self.localclient.stopgetmirror(self.credentials,'MirrorManager')
166                return result['status']
167        #def stop_update
168
169
170if __name__ == '__main__':
171        c = LliurexMirrorN4d('localhost',['kbut','lliurex'])
172        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']}
173        #print c.save_config('mippa',config)
174        #print c.create_conf(config)
175        #print c.update('mippa','3','172.20.8.6/mirror/ppa-xenial')
176        #print c.update('mippa','2','/home/mirror-ppa-otracarpeta')
177        #print c.update('mippa','1')
178        #print c.mirror_list()
179        #print c.export('mippa','/home/mirror16')
180        print c.is_alive_export()
181        print c.get_percentage_export()
182        #print c.get_percentage('mippa')
183        #print c.is_alive()
184        print c.stop_export()
Note: See TracBrowser for help on using the repository browser.