The old python backup software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
7.4 KiB

2 years ago
  1. #!/usr/bin/python
  2. # coding=utf-8
  3. import os
  4. import cisco_backuper as cisco
  5. import datetime
  6. import logging
  7. import send_to_zabbix as sender
  8. def conf_read(): # читаем конфиг
  9. errorcode = "" # Устанавливаем переменные
  10. out = {}
  11. try: # Пробуем открыть конфиг
  12. f = open("/opt/backuper/main_backuper.conf", 'r') # ОПАСНОСТЕ! БЫДЛОКОД!!! ЗАХАРДКОДИЛ КОНФИГ!!!
  13. except Exception as exept: # ЭКСЕПШЕН!!!!
  14. errorcode = exept
  15. else: # если все в норме, то вперед, к победе
  16. for line in f: # перебираем лайн по одной
  17. if line[0] == "#": # если начинаетя с решетки - коммент
  18. continue # пропускаем
  19. sp_line = line.split("=") # разделяем строку
  20. if len(sp_line) == 2: # если параметров - сколько надо
  21. if sp_line[0] not in ['hosts', 'typedir', 'cmddir', 'outdir']: # и если это не один из параметров
  22. errorcode = "unknown arg " + str(sp_line) # говорим, что всё говно
  23. break # и вываливаемся
  24. if "#" in sp_line[1]: # если во втором аргументе есть решеточка
  25. param = sp_line[1].split("#")[0].strip() # то обрезаем все, кроме решетки
  26. else: # а если нет
  27. param = sp_line[1].strip() # то не обрезаем
  28. out[sp_line[0]] = param # добавляем параметр
  29. return out, errorcode # вертаем всё
  30. def hosts_read(hosts): # читаем файл с хостами
  31. errorcode = "" # Устанавливаем переменные
  32. out = []
  33. args = []
  34. try: # пробуем открыть файл
  35. f = open(hosts, 'r')
  36. except Exception as exept: # ловим исключение
  37. errorcode = exept
  38. else: # если все в порядке
  39. for line in f: # читаем линии
  40. if line[0] == "#": # если начинаетя с решетки - коммент
  41. continue
  42. if "#" in line: # если в строке решетка
  43. sp_line = line.split("#")[0].split(
  44. ",") # то бомбим строку по решетке, и первый элемент снова бомбим, уже по запятой
  45. else:
  46. sp_line = line.split(",") # а если нет решетки, то просто бомбим по запятой
  47. for arg in sp_line: # а потом перебираем элементы
  48. args.append(arg.strip()) # и добавляем в список
  49. out.append(args) # а потом добавляем список в список
  50. args = [] # сбрасываем ненужные уже значения
  51. return out, errorcode # вертаем в зад что наковыряли
  52. def type_read(type_dir, type_file): # читаем тип хоста надоело комментить все как в предыдущей
  53. errorcode = ""
  54. out = {}
  55. try:
  56. f = open((type_dir + type_file), 'r')
  57. except Exception as exept:
  58. errorcode = exept
  59. else:
  60. for line in f:
  61. if line[0] == "#":
  62. continue
  63. sp_line = line.split("=")
  64. if len(sp_line) == 2:
  65. if sp_line[0] not in ['cmd', 'user', 'password']:
  66. errorcode = "unknown arg " + str(sp_line)
  67. break
  68. if "#" in sp_line[1]:
  69. param = sp_line[1].split("#")[1].strip()
  70. else:
  71. param = sp_line[1].strip()
  72. if "\"" in param or "\'" in param:
  73. param = param[1:-1]
  74. out[sp_line[0]] = param
  75. return out, errorcode
  76. def out_write(write_dir, name, out):
  77. errorcode = ""
  78. now_date = datetime.date.today()
  79. dir_to_write = write_dir + str(now_date) + "/"
  80. logging.debug("dir = " + str(dir_to_write))
  81. outfile = dir_to_write + name
  82. logging.debug("file = " + outfile)
  83. if not os.path.exists(dir_to_write):
  84. try:
  85. os.mkdir(dir_to_write)
  86. except Exception as exept:
  87. errorcode = exept
  88. return errorcode
  89. if not os.path.isdir(dir_to_write):
  90. errorcode = "Dir to write is not dir"
  91. return errorcode
  92. if not os.path.exists(outfile):
  93. try:
  94. f = open(outfile, "w")
  95. except Exception as exept:
  96. errorcode = exept
  97. return errorcode
  98. else:
  99. in_file = ""
  100. for outed in out:
  101. in_file = in_file + outed
  102. f.write(in_file)
  103. logging.debug("writed")
  104. finally:
  105. f.close()
  106. else:
  107. errorcode = "file exist"
  108. return errorcode
  109. return errorcode
  110. def main():
  111. logging.basicConfig(format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s',
  112. level=logging.DEBUG, filename="./backuper.log")
  113. errorcode = ""
  114. conf = {}
  115. out = []
  116. conf, errorcode = conf_read()
  117. hosts = []
  118. if errorcode != "":
  119. logging.critical(errorcode)
  120. keys = {"backuper[backuper_error]" : "1", }
  121. sender.sendkey(keys)
  122. exit(errorcode)
  123. else:
  124. hosts, errorcode = hosts_read(conf["hosts"])
  125. if errorcode != "":
  126. logging.critical(errorcode)
  127. keys = {"backuper[backuper_error]" : "2", }
  128. sender.sendkey(keys)
  129. exit(errorcode)
  130. else:
  131. keys = {"backuper[backuper_error]" : "0", }
  132. sender.sendkey(keys)
  133. for host in hosts:
  134. logging.debug(str(host) + "-" + str(errorcode))
  135. for host in hosts:
  136. if host[2] != "up":
  137. logging.debug(host[0] + " down")
  138. continue
  139. logging.debug(host[0] + " up")
  140. logging.debug("reading type")
  141. type_attr, errorcode = type_read(conf["typedir"], host[1])
  142. if errorcode != "":
  143. logging.warn(errorcode)
  144. keys = {"backuper[" + host[0] + "]" : "1"}
  145. sender.sendkey(keys)
  146. continue
  147. logging.debug(type_attr)
  148. logging.debug("reading cmd")
  149. commands, errorcode = cisco.read_file((conf["cmddir"] + type_attr["cmd"]))
  150. if errorcode != "":
  151. logging.warn(errorcode)
  152. logging.warn(errorcode)
  153. keys = {"backuper[" + host[0] + "]" : "2", }
  154. sender.sendkey(keys)
  155. continue
  156. logging.debug(commands)
  157. logging.debug(commands)
  158. out, errorcode = cisco.get_data(host[0], type_attr["user"], type_attr["password"], commands)
  159. if errorcode != "":
  160. logging.warn(errorcode)
  161. logging.warn(errorcode)
  162. keys = {"backuper[" + host[0] + "]" : "3", }
  163. sender.sendkey(keys)
  164. continue
  165. errorcode = out_write(conf['outdir'], host[0], out)
  166. if errorcode != "":
  167. logging.warn(errorcode)
  168. keys = {"backuper[" + host[0] + "]" : "4", }
  169. sender.sendkey(keys)
  170. else:
  171. keys = {"backuper[" + host[0] + "]" : "0", }
  172. sender.sendkey(keys)
  173. if __name__ == '__main__':
  174. main()

Powered by TurnKey Linux.