1 | import xmlrpclib |
---|
2 | |
---|
3 | class 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 | #def __init__ |
---|
14 | |
---|
15 | def connect(self,server): |
---|
16 | self.client = xmlrpclib.ServerProxy('https://' + server + ':9779',allow_none=True) |
---|
17 | self.serverip = server |
---|
18 | try: |
---|
19 | self.client.get_methods() |
---|
20 | except: |
---|
21 | self.client = None |
---|
22 | return False |
---|
23 | return True |
---|
24 | #def connect |
---|
25 | |
---|
26 | def local_connect(self): |
---|
27 | self.localclient = xmlrpclib.ServerProxy('https://localhost:9779',allow_none=True) |
---|
28 | try: |
---|
29 | self.localclient.get_methods() |
---|
30 | except: |
---|
31 | self.localclient = None |
---|
32 | return False |
---|
33 | return True |
---|
34 | #def connect |
---|
35 | |
---|
36 | def get_local_credentials(self): |
---|
37 | try: |
---|
38 | f = open('/etc/n4d/key','r') |
---|
39 | key = f.readline().strip() |
---|
40 | return key |
---|
41 | except: |
---|
42 | return None |
---|
43 | |
---|
44 | def mirror_list(self): |
---|
45 | if type(self.client) == None: |
---|
46 | return {} |
---|
47 | result = self.client.get_all_configs(self.credentials,'MirrorManager') |
---|
48 | if not result['status']: |
---|
49 | return {} |
---|
50 | return result['msg'] |
---|
51 | #def mirror_list |
---|
52 | |
---|
53 | def is_alive(self): |
---|
54 | try: |
---|
55 | return self.client.is_alive(self.credentials,'MirrorManager') |
---|
56 | except: |
---|
57 | return {'status':False,'msg':None} |
---|
58 | #def is_alive |
---|
59 | |
---|
60 | def save_config(self,mirror,config): |
---|
61 | result = self.client.update_mirror_config(self.credentials,'MirrorManager',mirror,config) |
---|
62 | return result |
---|
63 | #def save_config |
---|
64 | |
---|
65 | def create_conf(self,config): |
---|
66 | if type(self.client) == None: |
---|
67 | return {} |
---|
68 | result = self.client.new_mirror_config(self.credentials,'MirrorManager',config) |
---|
69 | if result['status']: |
---|
70 | return result['msg'] |
---|
71 | return result |
---|
72 | #def create_conf |
---|
73 | |
---|
74 | def update(self,mirror,mode,data=None): |
---|
75 | ''' |
---|
76 | mode is option to update mirror. (Internet, local network, folder) |
---|
77 | data is extra info to update (local network ip, ) |
---|
78 | ''' |
---|
79 | self.mode = None |
---|
80 | if mode == '2': |
---|
81 | self.mode = 2 |
---|
82 | result = self.client.get_client_ip('','MirrorManager','') |
---|
83 | print result |
---|
84 | tempserver = result['msg'] |
---|
85 | result = self.localclient.enable_webserver_into_folder(self.localcredentials,'MirrorManager',data) |
---|
86 | tempserver = str(tempserver) + ":" + str(result['msg']) |
---|
87 | data = tempserver |
---|
88 | print data |
---|
89 | self.localclient.watch_update_finish(self.localcredentials,'MirrorManager',self.credentials,self.serverip) |
---|
90 | if data != None: |
---|
91 | self.client.set_mirror_orig(self.credentials,'MirrorManager',mirror,data,mode) |
---|
92 | self.client.set_option_update(self.credentials,'MirrorManager',mirror,mode) |
---|
93 | result = self.client.update(self.credentials,'MirrorManager',mirror) |
---|
94 | return result['status'] |
---|
95 | #def update |
---|
96 | |
---|
97 | def export(self, mirror,folder): |
---|
98 | import tempfile |
---|
99 | |
---|
100 | # Get config for this mirror |
---|
101 | result = self.client.get_all_configs(self.credentials,'MirrorManager') |
---|
102 | config = result['msg'][mirror] |
---|
103 | |
---|
104 | # Open webserver for mirror and get ip |
---|
105 | result = self.client.enable_webserver_into_folder(self.credentials,'MirrorManager',config['MIRROR_PATH']) |
---|
106 | |
---|
107 | # Modify Config and write |
---|
108 | |
---|
109 | config['MIRROR_PATH'] = folder |
---|
110 | config[] = '3' |
---|
111 | config['ORIGS']['3'] = self.serverip + ":" + str(result['msg']) |
---|
112 | result = self.client.render_debmirror_config(self.credentials,'MirrorManager',config) |
---|
113 | temp_file = tempfile.mktemp() |
---|
114 | f = open(temp_file,'w') |
---|
115 | f.write(result['msg']) |
---|
116 | f.close() |
---|
117 | |
---|
118 | # Execute mirror |
---|
119 | self.localclient.get_mirror(self.localcredentials,'MirrorManager',temp_file) |
---|
120 | return True |
---|
121 | #def export |
---|
122 | |
---|
123 | def get_percentage_export(self): |
---|
124 | result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager') |
---|
125 | return result['msg'] |
---|
126 | #def get_percentage_export |
---|
127 | |
---|
128 | def is_alive_export(self): |
---|
129 | result = self.localclient.is_alive_get_mirror(self.localcredentials,'MirrorManager') |
---|
130 | print result |
---|
131 | return result['status'] |
---|
132 | |
---|
133 | |
---|
134 | def get_percentage(self,mirror): |
---|
135 | result = self.client.get_percentage(self.credentials,'MirrorManager',mirror) |
---|
136 | if result['status'] : |
---|
137 | return result['msg'] |
---|
138 | #def get_percentage |
---|
139 | |
---|
140 | def is_update_available(self,mirror): |
---|
141 | result = self.client.is_update_available(self.credentials,'MirrorManager',mirror) |
---|
142 | return result['status'] |
---|
143 | #def is_update_available |
---|
144 | |
---|
145 | def stop_update(self): |
---|
146 | if self.mode == '2': |
---|
147 | self.client.stop_webserver(self.credentials,'MirrorManager') |
---|
148 | result = self.client.stopupdate(self.credentials,'MirrorManager') |
---|
149 | return result['status'] |
---|
150 | #def stop_update |
---|
151 | |
---|
152 | |
---|
153 | if __name__ == '__main__': |
---|
154 | c = LliurexMirrorN4d('localhost',['kbut','lliurex']) |
---|
155 | config = {'IGN_GPG': 1, 'NAME': 'LliureX Xenial', 'ORIGS': {'1': 'lliurex.net/xenial', '3': '172.20.8.6/mirror/lliurex', '2': ''}, 'SECTIONS': ['main', 'main/debian-installer', 'universe', 'restricted', 'multiverse', 'partner'], 'MIRROR_PATH': '/net/mirror/llx16', 'ARCHITECTURES': ['amd64', 'i386'], 'CHK_MD5': 0, 'IGN_RELEASE': 0, 'BANNER': '', 'CURRENT_UPDATE_OPTION': '3', 'DISTROS': ['xenial', 'xenial-updates', 'xenial-security']} |
---|
156 | #print c.save_config('llx16',config) |
---|
157 | #print c.update('llx16','3','172.20.8.6/mirror/lliurex') |
---|
158 | #print c.update('llx16','2','/net/mirror/lugar') |
---|
159 | #print c.update('llx16','3') |
---|
160 | #print c.mirror_list() |
---|
161 | print c.export('llx16','/net/miexportacion') |
---|
162 | #print c.is_alive_export() |
---|
163 | #print c.get_percentage('llx16') |
---|
164 | #print c.is_alive() |
---|
165 | #print c.stop_update() |
---|