Advertisement
Guest User

Untitled

a guest
Aug 7th, 2017
517
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.55 KB | None | 0 0
  1. import sys
  2. import re
  3. import os
  4. import paramiko
  5.  
  6.  
  7. class BinUpdate:
  8. files_dirs = []
  9. file_name_patterns = []
  10. parts_files = {}
  11. user_dir = os.path.dirname(os.path.abspath(__file__))
  12.  
  13. def run_through_dirs(self):
  14. os.path.walk(self.user_dir + '/bts_sw', self.add_to_filelist, None)
  15.  
  16. def search_for_files(self):
  17. for key in self.parts_files:
  18. for filename in self.files_dirs:
  19. if re.search(key[0], filename):
  20. self.parts_files[key].append(filename)
  21.  
  22. def add_to_filelist(self, a, dir, files):
  23. for i in files:
  24. self.files_dirs.append(dir + '/' + i)
  25.  
  26. def merge_files(self):
  27. for key in self.parts_files:
  28. with open(key[1], 'wb') as outputfile:
  29. for part in self.parts_files[key]:
  30. with open(part, 'rb') as inputfile:
  31. outputfile.write(inputfile.read())
  32.  
  33. def sort_parts(self):
  34. def atoi(text):
  35. return int(text) if text.isdigit() else text
  36.  
  37. def comparator(text):
  38. return [atoi(c) for c in re.split('(\d+)', text)]
  39.  
  40. for key_to_part in self.parts_files:
  41. self.parts_files[key_to_part].sort(key=comparator)
  42.  
  43.  
  44. class BinUpdateFSMr4(BinUpdate):
  45. p_magent_version = 0;
  46.  
  47. def __init__(self, hardware_type):
  48. if hardware_type == 'FSM4':
  49. self.file_patterns = [(r'LTEL2', 'LTEL2.tgz'), (r'FL-K2-DPDSP', 'dpdsp/dsprtsw.bin'),
  50. (r'FL-K2-UPDSP', 'updsp/dsprtsw.bin'),
  51. (r'libEM-SC-LOM', 'libEM_SC_LOM.txz'), (r'liblom-trace-em', 'liblom-trace-em.txz'),
  52. (r'libmeasurement-service-eo', 'libmeasurement-service-eo.txz'),
  53. (r'pmagent', 'pmagent.txz'), (r'WMPPSem', 'WMPPSem.txz'),
  54. (r'libfault-service-eo', 'libfault-service-eo.txz'),
  55. (r'libfault-reporter', 'libfault-reporter.txz'),
  56. (r'BootKeplerMaster', 'BootKeplerMaster.out'),
  57. (r'BootKeplerSlave', 'BootKeplerSlave.out')]
  58. self.parts_files = dict((el, []) for el in self.file_patterns)
  59.  
  60. def run_through_dirs(self):
  61. os.path.walk(self.user_dir + '/bts_sw', self.add_to_filelist, None)
  62. if not os.path.exists(self.user_dir + '/updsp'):
  63. os.makedirs(self.user_dir + '/updsp')
  64. if not os.path.exists(self.user_dir + '/dpdsp'):
  65. os.makedirs(self.user_dir + '/dpdsp')
  66.  
  67. def p_magent_setup(self):
  68. self.p_magent_version = re.findall(r'(?<=\_)([0-9]*?)(?=\.)',
  69. self.parts_files[(r'FL-K2-DPDSP', 'dpdsp/dsprtsw.bin')][0])
  70. for file in self.parts_files[(r'pmagent', 'pmagent.txz')]:
  71. if re.search(self.p_magent_version[0], file):
  72. with open(file, 'rb') as inputfile:
  73. with open('pmagent.txz', 'wb') as outputfile:
  74. outputfile.write(inputfile.read())
  75.  
  76.  
  77. class FSMr3SendViaSCP:
  78. def __init__(self):
  79. self.user_dir = os.path.dirname(os.path.abspath(__file__))
  80. self.ip_adress_dest = "192.168.255.1"
  81. self.destinations = {'LTEL2.tgz': ('/ffs/run/swpool/LTE/LTEL2NODE/addons/',),
  82. 'dpdsp/dsprtsw.bin': ('/ffs/run/boardcfg/1/A/dsp/', '/ffs/run/boardcfg/1/D/dsp/'),
  83. 'updsp/dsprtsw.bin': ('/ffs/run/boardcfg/1/B/dsp/', '/ffs/run/boardcfg/1/C/dsp/'),
  84. 'libEM_SC_LOM.txz': (
  85. '/ffs/run/swpool/LTE/LTEL2NODE/addons/', '/ffs/run/swpool/LTE/FDDMACNODE/addons/'),
  86. 'liblom-trace-em.txz': (
  87. '/ffs/run/swpool/LTE/LTEL2NODE/addons/', '/ffs/run/swpool/LTE/FDDMACNODE/addons/'),
  88. 'libmeasurement-service-eo.txz': ('/ffs/run/swpool/LTE/LTEL2NODE/addons/',),
  89. 'pmagent.txz': (
  90. '/ffs/run/swpool/LTE/LTEL2NODE/addons/', '/ffs/run/swpool/LTE/FDDMACNODE/addons/'),
  91. 'WMPPSem.txz': ('/ffs/run/swpool/LTE/FDDMACNODE/addons/',),
  92. 'libfault-service-eo.txz': (
  93. '/ffs/run/swpool/LTE/LTEL2NODE/addons/', '/ffs/run/swpool/LTE/FDDMACNODE/addons/'),
  94. 'libfault-reporter.txz': (
  95. '/ffs/run/swpool/LTE/LTEL2NODE/addons/', '/ffs/run/swpool/LTE/FDDMACNODE/addons/'),
  96. 'BootKeplerMaster.out': (
  97. '/ffs/run/boardcfg/1/A/dsp/', '/ffs/run/boardcfg/1/D/dsp/', '/ffs/run/boardcfg/1/B/dsp/',
  98. '/ffs/run/boardcfg/1/C/dsp/'),
  99. 'BootKeplerSlave.out': (
  100. '/ffs/run/boardcfg/1/D/dsp/', '/ffs/run/boardcfg/1/A/dsp/', '/ffs/run/boardcfg/1/C/dsp/',
  101. '/ffs/run/boardcfg/1/B/dsp/')}
  102. self.testing_dir = ''
  103. self.ssh_client = paramiko.SSHClient()
  104. self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  105. self.ssh_client.connect(hostname=self.ip_adress_dest, username='toor4nsn', password='oZPS0POrRieRtu')
  106.  
  107. def sending(self):
  108. ftp_client = self.ssh_client.open_sftp()
  109. for file in self.destinations:
  110. for dest in self.destinations[file]:
  111. if file == 'dpdsp/dsprtsw.bin' or file == 'updsp/dsprtsw.bin':
  112. print(self.user_dir + '/' + file, dest + file[6:])
  113. ftp_client.put(self.user_dir + '/' + file, dest + '/' + file[6:])
  114. else:
  115. print(self.user_dir + '/' + file, dest + file)
  116. ftp_client.put(self.user_dir + '/' + file, dest + file)
  117. ftp_client.close()
  118.  
  119. def crasign(self):
  120. if self.ssh_client:
  121. for file in self.destinations:
  122. for dest in self.destinations[file]:
  123. print(dest + file)
  124. _, stdout, stderr = self.ssh_client.exec_command('crasign ' + dest + file)
  125. stdout.read()
  126. else:
  127. raise Exception("Connection doesn't exist")
  128. self.ssh_client.close()
  129.  
  130.  
  131. class BinUpdateFSMr3(BinUpdate):
  132. basic = [('PSPSDSP', 'dsprtsw1231.bin'), ('L1NBDSP', 'dsprtsw1241.bin'), ('L2L2DSP', 'dsprtsw1251.bin'),
  133. ('L1NBDSP', 'dsprtsw1261.bin'), ('PSL2DSP', 'dsprtsw1271.bin'), ('L1NBDSP', 'dsprtsw1281.bin'),
  134. ('PSPSDSP', 'dsprtsw1331.bin'), ('L1NBDSP', 'dsprtsw1341.bin'), ('L2L2DSP', 'dsprtsw1351.bin'),
  135. ('L1NBDSP', 'dsprtsw1361.bin'), ('PSL2DSP', 'dsprtsw1371.bin'), ('L1NBDSP', 'dsprtsw1381.bin'),
  136. ('DSP-BW', 'dspbootsw.bin')]
  137.  
  138. fbba = [('PSEXDSP', 'dsprtsw1231.bin'), ('L1ULDSP', 'dsprtsw1241.bin'), ('PSEXDSP', 'dsprtsw1251.bin'),
  139. ('L1ULDSP', 'dsprtsw1261.bin'), ('L2EXDSP', 'dsprtsw1271.bin'), ('L1DLDSP', 'dsprtsw1281.bin'),
  140. ('L2EXDSP', 'dsprtsw1331.bin'), ('L1DLDSP', 'dsprtsw1341.bin'), ('PSEXDSP', 'dsprtsw1351.bin'),
  141. ('L1ULDSP', 'dsprtsw1361.bin'), ('L2EXDSP', 'dsprtsw1371.bin'), ('L1DLDSP', 'dsprtsw1381.bin'),
  142. ('DSP-BW', 'dspbootsw.bin')]
  143.  
  144. mixed = [('PSEXDSP', 'dsprtsw1231.bin'), ('L1ULDSP', 'dsprtsw1241.bin'), ('L2L2DSP', 'dsprtsw1251.bin'),
  145. ('L1DLDSP', 'dsprtsw1261.bin'), ('PSL2DSP', 'dsprtsw1271.bin'), ('L1NBDSP', 'dsprtsw1281.bin'),
  146. ('PSEXDSP', 'dsprtsw1331.bin'), ('L1ULDSP', 'dsprtsw1341.bin'), ('L2L2DSP', 'dsprtsw1351.bin'),
  147. ('L1DLDSP', 'dsprtsw1361.bin'), ('PSL2DSP', 'dsprtsw1371.bin'), ('L1NBDSP', 'dsprtsw1381.bin'),
  148. ('DSP-BW', 'dspbootsw.bin')]
  149.  
  150. def __init__(self, deployment):
  151. if deployment == 'basic':
  152. self.parts_files = dict((el, []) for el in self.basic)
  153. if deployment == 'fbba':
  154. self.parts_files = dict((el, []) for el in self.fbba)
  155. if deployment == 'mixed':
  156. self.parts_files = dict((el, []) for el in self.mixed)
  157.  
  158.  
  159. files_from_dirs = BinUpdateFSMr4("FSM4")
  160. files_from_dirs.run_through_dirs()
  161. files_from_dirs.search_for_files()
  162. files_from_dirs.sort_parts()
  163. files_from_dirs.merge_files()
  164. files_from_dirs.p_magent_setup()
  165. print('Merging files completed\n')
  166. sending = FSMr3SendViaSCP()
  167. sending.sending()
  168. sending.crasign()
  169.  
  170. # fsm3 = BinUpdateFSMr3('basic')
  171. # fsm3.run_through_dirs()
  172. # fsm3.search_for_files()
  173. # fsm3.sort_parts()
  174. # fsm3.merge_files()
  175. # print(fsm3.parts_files)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement