utils_firmware.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- coding: utf-8 -*-
  2. '''
  3. Gestor de nodos para LaOtraRed La Paz - El Alto
  4. Copyright (C) 2017 Rodrigo Garcia
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU Affero General Public License as
  7. published by the Free Software Foundation, either version 3 of the
  8. License, or (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU Affero General Public License for more details.
  13. You should have received a copy of the GNU Affero General Public License
  14. along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. '''
  16. import subprocess
  17. import os
  18. import re
  19. from gestor.configs import RUTA_SCRIPT_GENERADOR_FIRMWARES
  20. from gestor.configs import RUTA_IMAGENES_FIRMWARE_GENERADAS
  21. # se utiliza el script generador de firmware:
  22. # https://git.laotrared.net/LaOtraRed-dev/generador-firmwares-script
  23. def crear_imagenFirmware(modelo_router, bloque_ipv4, cidr):
  24. ''' Genera la imagen de firmware ejecutando el script
  25. https://git.laotrared.net/LaOtraRed-dev/generador-firmwares-script/chef.sh
  26. Retorna el nombre resultante de la imagen generada
  27. Si ocurre un error retorna la cadena "Error"
  28. '''
  29. print ("---- Generando imagen de firmware -----")
  30. print ("comando: "+str([RUTA_SCRIPT_GENERADOR_FIRMWARES+\
  31. "llamar_chef.sh",\
  32. RUTA_SCRIPT_GENERADOR_FIRMWARES,\
  33. modelo_router,
  34. bloque_ipv4+"/"+str(cidr)]))
  35. res = subprocess.call([RUTA_SCRIPT_GENERADOR_FIRMWARES+\
  36. "llamar_chef.sh",\
  37. RUTA_SCRIPT_GENERADOR_FIRMWARES,\
  38. modelo_router,
  39. bloque_ipv4+"/"+str(cidr)])
  40. print ("resultado:"+str(res))
  41. if res != 0:
  42. return "Error"
  43. return RUTA_IMAGENES_FIRMWARE_GENERADAS+modelo_router+"_"+bloque_ipv4
  44. def carpetas_descargaFirmware(bloque_ipv4=None, id_nodo=-1):
  45. ''' Devuelve una lista con todas las carpeta(s) donde se encuentran
  46. las imagenes de firmware generadas para el nodo con el bloque ipv4
  47. publico dado.
  48. Se devuleve una lista vacia en caso de no encontrar la carpeta
  49. '''
  50. ipv4 = bloque_ipv4.split("/")[0]
  51. try:
  52. ow = os.walk(RUTA_IMAGENES_FIRMWARE_GENERADAS)
  53. p , dirs , archs = ow.next()
  54. carpetas = []
  55. # filtrar solo carpetas pertenecientes al bloque_ipv4
  56. # notar que los nombres de carpetas generadas terminan con la ipv4
  57. pattern = re.compile(ipv4+"$")
  58. for d in dirs:
  59. if re.search(pattern,d) is not None:
  60. carpetas.append(d)
  61. return carpetas
  62. except OSError:
  63. print ("Error al ejecutar os.walk("+RUTA_IMAGENES_FIRMWARE_GENERADAS+")")
  64. return []
  65. def listar_carpetaFirmware(carpeta=None):
  66. ''' Devuelve dos listas con archivos y directorios dentro la carpeta
  67. con el nombre dado, solo busca dentro el directorio:
  68. RUTA_IMAGENES_FIRMWARE_GENERADAS
  69. Retorna una lista vacia si no encuentra
  70. '''
  71. try:
  72. ow = os.walk(RUTA_IMAGENES_FIRMWARE_GENERADAS + carpeta)
  73. p, dirs, archs = ow.next()
  74. return (dirs, archs)
  75. except:
  76. print (("Error al ejecutar os.walk("+ \
  77. RUTA_IMAGENES_FIRMWARE_GENERADAS+"/"+carpeta + ")"))
  78. return []