Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2014
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. /opt/noc/sa/profiles/EdgeCore/ES# cat ./get_version.py
  2. # -*- coding: utf-8 -*-
  3. ##----------------------------------------------------------------------
  4. ## EdgeCore.ES.get_version
  5. ##----------------------------------------------------------------------
  6. ## Copyright (C) 2007-2012 The NOC Project
  7. ## See LICENSE for details
  8. ##----------------------------------------------------------------------
  9. """
  10. """
  11. ## Python modules
  12. import re
  13. ## NOC Modules
  14. from noc.sa.script import Script as NOCScript
  15. from noc.sa.interfaces import IGetVersion
  16.  
  17.  
  18. class Script(NOCScript):
  19. name = "EdgeCore.ES.get_version"
  20. cache = True
  21. implements = [IGetVersion]
  22.  
  23. ##
  24. ## Main dispatcher
  25. ##
  26. def execute(self):
  27. s = ""
  28. if self.snmp and self.access_profile.snmp_ro:
  29. # Trying SNMP
  30. try:
  31. # SNMPv2-MIB::sysDescr.0
  32. s = self.snmp.get("1.3.6.1.2.1.1.1.0", cached=True)
  33. # SNMPv2-MIB::sysObjectID.0
  34. oid = self.snmp.get("1.3.6.1.2.1.1.2.0", cached=True)
  35. if oid == "":
  36. raise self.snmp.TimeOutError # Fallback to CLI
  37. if ", " in oid:
  38. oid = oid[1: -1].replace(", ", ".")
  39. if oid[-3:] == "2.4":
  40. # 3528M-SFP OID (v1.4.x.x)
  41. v = self.snmp.get(oid[: -3] + "1.4.1.1.3.1.6.1",
  42. cached=True)
  43. else:
  44. # 3526-Style OID
  45. v = self.snmp.get(oid + ".1.1.3.1.6.1", cached=True)
  46. if v == "":
  47. # 4626-Style OID
  48. v = self.snmp.get(oid + ".100.1.3.0", cached=True)
  49. if v == "":
  50. raise self.snmp.TimeOutError # Fallback to CLI
  51. if self.rx_sys_4.search(s):
  52. return self.get_version_4xxx(s, v)
  53. return self.get_version_35xx("System description : " + s, v)
  54. except self.snmp.TimeOutError:
  55. pass
  56. if s == "":
  57. # Trying CLI
  58. try:
  59. s = self.cli("show system", cached=True)
  60. except self.CLISyntaxError:
  61. # Get 4xxx version
  62. return self.get_version_4xxx(None, None)
  63. return self.get_version_35xx(s, None)
  64.  
  65. ##
  66. ## 35xx
  67. ##
  68. rx_sysname_35 = re.compile(
  69. r"^\s*System Name\s*:\s*(?P<sysname>\S+)\s*$",
  70. re.MULTILINE | re.IGNORECASE)
  71. rx_sys_35 = re.compile(
  72. r"^\s*System description\s*:\s(?P<platform>.+?)\s*$",
  73. re.MULTILINE | re.IGNORECASE)
  74. rx_ver_35 = re.compile(
  75. r"^\s*Operation code version\s*:\s*(?P<version>\S+)\s*$",
  76. re.MULTILINE | re.IGNORECASE)
  77. rx_ser_35 = re.compile(
  78. r"^\s*Serial Number\s*:\s*(?P<serial>\S+)\s*$",
  79. re.MULTILINE | re.IGNORECASE)
  80. rx_hw_35 = re.compile(
  81. r"^\s*Hardware Version\s*:\s*(?P<hardware>\S+)\s*$",
  82. re.MULTILINE | re.IGNORECASE)
  83. rx_boot_35 = re.compile(
  84. r"^\s*Boot ROM Version\s+:\s+(?P<boot>.+)\s*$",
  85. re.MULTILINE | re.IGNORECASE)
  86.  
  87. def get_version_35xx(self, show_system, version):
  88. # Vendor default
  89. vendor = "EdgeCore"
  90. # Detect version
  91. if not version:
  92. v = self.cli("show version", cached=True)
  93. match = self.re_search(self.rx_ver_35, v)
  94. version = match.group("version")
  95. # Detect platform
  96. match_sy = self.rx_sysname_35.search(show_system)
  97. if match_sy:
  98. sysname = match_sy.group("sysname")
  99. else:
  100. sysname = ""
  101. # match = self.re_search(self.rx_sysname_35, show_system)
  102. # sysname = match.group("sysname")
  103.  
  104. match = self.rx_sys_35.search(show_system)
  105. platform = match.group("platform")
  106. if "ES3526XA" in platform:
  107. # Detect ES3626XA hardware version
  108. sub = version.split(".")
  109. if sub[0] == "1":
  110. platform = "ES3526XA-V2"
  111. elif sub[0] == "2" and sub[1] == "3":
  112. if int(sub[2]) & 1 == 1:
  113. platform = "ES3526XA-38"
  114. else:
  115. platform = "ES3526XA-1-SL-38"
  116. else:
  117. raise self.NotSupportedError(platform)
  118. elif "3510MA" in platform:
  119. platform = "ES3510MA"
  120. elif "3510" in platform:
  121. platform = "ES3510"
  122. elif "3552M" in platform:
  123. platform = "ES3552M"
  124. elif "ES3528M" in platform:
  125. platform = "ES3528M"
  126. elif "ES3526S" in platform:
  127. pass
  128. elif "MR2228N" in platform:
  129. vendor = "MRV"
  130. elif platform.lower() == "8 sfp ports + 4 gigabit combo ports l2/l3/l4 managed standalone switch":
  131. platform = "ES4612"
  132. elif platform == "Managed 8G+4GSFP Switch":
  133. platform = "ECS4210-12T"
  134. elif platform == "Managed 24G+4GSFP Switch":
  135. platform = "ECS4210-28T"
  136. else:
  137. raise self.NotSupportedError(platform)
  138. r = {
  139. "vendor": vendor,
  140. "platform": platform,
  141. "version": version,
  142. "attributes": {
  143. "image": version,
  144. "sysname": sysname,
  145. }
  146. }
  147. r["attributes"].update({"image": version})
  148. v = self.cli("show version", cached=True)
  149. match = self.rx_boot_35.search(v)
  150. if match:
  151. r["attributes"].update({"Boot PROM": match.group("boot")})
  152. match = self.rx_hw_35.search(v)
  153. if match:
  154. r["attributes"].update({"HW version": match.group("hardware")})
  155. match = self.rx_ser_35.search(v)
  156. if match:
  157. r["attributes"].update({"Serial Number": match.group("serial")})
  158. return r
  159.  
  160. ##
  161. ## ES4626
  162. ##
  163. rx_sys_4 = re.compile(r"(?P<platform>ES.+?) Device, Compiled",
  164. re.MULTILINE | re.DOTALL | re.IGNORECASE)
  165. rx_ver_4 = re.compile(
  166. r"SoftWare (Package )?Version.*?(?:_|Vco\.)(?P<version>\d.+?)$",
  167. re.MULTILINE | re.DOTALL | re.IGNORECASE)
  168. rx_boot_4 = re.compile(
  169. r"BootRom Version (\S+_)?(?P<boot>\d.+?)$",
  170. re.MULTILINE | re.DOTALL | re.IGNORECASE)
  171. rx_hw_4 = re.compile(
  172. r"HardWare Version (\S+_)?(?P<hardware>\S+)$",
  173. re.MULTILINE | re.DOTALL | re.IGNORECASE)
  174. rx_ser_4 = re.compile(
  175. r"Device serial number (\S+_)?(?P<serial>\S+)$",
  176. re.MULTILINE | re.DOTALL | re.IGNORECASE)
  177.  
  178. def get_version_4xxx(self, v, version):
  179. if not v:
  180. v = self.cli("show version 1", cached=True)
  181. match_sys = self.re_search(self.rx_sys_4, v)
  182. if not version:
  183. match_ver = self.re_search(self.rx_ver_4, v)
  184. version = match_ver.group("version")
  185. r = {
  186. "vendor": "EdgeCore",
  187. "platform": match_sys.group("platform"),
  188. "version": version,
  189. "attributes": {}
  190. }
  191. r["attributes"].update({"image": match_ver.group("version")})
  192. match = self.rx_boot_4.search(v)
  193. if match:
  194. r["attributes"].update({"Boot PROM": match.group("boot")})
  195. match = self.rx_hw_4.search(v)
  196. if match:
  197. r["attributes"].update({"HW version": match.group("hardware")})
  198. match = self.rx_ser_4.search(v)
  199. if match:
  200. r["attributes"].update({"Serial Number": match.group("serial")})
  201. return r
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement