|
|
- #!/usr/bin/python
- # coding=utf-8
-
- import os
- import cisco_backuper as cisco
- import datetime
- import logging
- import send_to_zabbix as sender
-
-
- def conf_read(): # читаем конфиг
- errorcode = "" # Устанавливаем переменные
- out = {}
- try: # Пробуем открыть конфиг
- f = open("/opt/backuper/main_backuper.conf", 'r') # ОПАСНОСТЕ! БЫДЛОКОД!!! ЗАХАРДКОДИЛ КОНФИГ!!!
- except Exception as exept: # ЭКСЕПШЕН!!!!
- errorcode = exept
- else: # если все в норме, то вперед, к победе
- for line in f: # перебираем лайн по одной
- if line[0] == "#": # если начинаетя с решетки - коммент
- continue # пропускаем
- sp_line = line.split("=") # разделяем строку
- if len(sp_line) == 2: # если параметров - сколько надо
- if sp_line[0] not in ['hosts', 'typedir', 'cmddir', 'outdir']: # и если это не один из параметров
- errorcode = "unknown arg " + str(sp_line) # говорим, что всё говно
- break # и вываливаемся
- if "#" in sp_line[1]: # если во втором аргументе есть решеточка
- param = sp_line[1].split("#")[0].strip() # то обрезаем все, кроме решетки
- else: # а если нет
- param = sp_line[1].strip() # то не обрезаем
- out[sp_line[0]] = param # добавляем параметр
- return out, errorcode # вертаем всё
-
-
- def hosts_read(hosts): # читаем файл с хостами
- errorcode = "" # Устанавливаем переменные
- out = []
- args = []
- try: # пробуем открыть файл
- f = open(hosts, 'r')
- except Exception as exept: # ловим исключение
- errorcode = exept
- else: # если все в порядке
- for line in f: # читаем линии
- if line[0] == "#": # если начинаетя с решетки - коммент
- continue
- if "#" in line: # если в строке решетка
- sp_line = line.split("#")[0].split(
- ",") # то бомбим строку по решетке, и первый элемент снова бомбим, уже по запятой
- else:
- sp_line = line.split(",") # а если нет решетки, то просто бомбим по запятой
- for arg in sp_line: # а потом перебираем элементы
- args.append(arg.strip()) # и добавляем в список
- out.append(args) # а потом добавляем список в список
- args = [] # сбрасываем ненужные уже значения
- return out, errorcode # вертаем в зад что наковыряли
-
-
- def type_read(type_dir, type_file): # читаем тип хоста надоело комментить все как в предыдущей
- errorcode = ""
- out = {}
- try:
- f = open((type_dir + type_file), 'r')
- except Exception as exept:
- errorcode = exept
- else:
- for line in f:
- if line[0] == "#":
- continue
- sp_line = line.split("=")
- if len(sp_line) == 2:
- if sp_line[0] not in ['cmd', 'user', 'password']:
- errorcode = "unknown arg " + str(sp_line)
- break
- if "#" in sp_line[1]:
- param = sp_line[1].split("#")[1].strip()
- else:
- param = sp_line[1].strip()
- if "\"" in param or "\'" in param:
- param = param[1:-1]
- out[sp_line[0]] = param
- return out, errorcode
-
-
- def out_write(write_dir, name, out):
- errorcode = ""
- now_date = datetime.date.today()
- dir_to_write = write_dir + str(now_date) + "/"
- logging.debug("dir = " + str(dir_to_write))
- outfile = dir_to_write + name
- logging.debug("file = " + outfile)
- if not os.path.exists(dir_to_write):
- try:
- os.mkdir(dir_to_write)
- except Exception as exept:
- errorcode = exept
- return errorcode
- if not os.path.isdir(dir_to_write):
- errorcode = "Dir to write is not dir"
- return errorcode
- if not os.path.exists(outfile):
- try:
- f = open(outfile, "w")
- except Exception as exept:
- errorcode = exept
- return errorcode
- else:
- in_file = ""
- for outed in out:
- in_file = in_file + outed
- f.write(in_file)
- logging.debug("writed")
- finally:
- f.close()
- else:
- errorcode = "file exist"
- return errorcode
- return errorcode
-
-
- def main():
- logging.basicConfig(format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s',
- level=logging.DEBUG, filename="./backuper.log")
- errorcode = ""
- conf = {}
- out = []
- conf, errorcode = conf_read()
- hosts = []
- if errorcode != "":
- logging.critical(errorcode)
- keys = {"backuper[backuper_error]" : "1", }
- sender.sendkey(keys)
- exit(errorcode)
- else:
- hosts, errorcode = hosts_read(conf["hosts"])
- if errorcode != "":
- logging.critical(errorcode)
- keys = {"backuper[backuper_error]" : "2", }
- sender.sendkey(keys)
- exit(errorcode)
- else:
- keys = {"backuper[backuper_error]" : "0", }
- sender.sendkey(keys)
- for host in hosts:
- logging.debug(str(host) + "-" + str(errorcode))
- for host in hosts:
- if host[2] != "up":
- logging.debug(host[0] + " down")
- continue
- logging.debug(host[0] + " up")
- logging.debug("reading type")
- type_attr, errorcode = type_read(conf["typedir"], host[1])
- if errorcode != "":
- logging.warn(errorcode)
- keys = {"backuper[" + host[0] + "]" : "1"}
- sender.sendkey(keys)
- continue
- logging.debug(type_attr)
- logging.debug("reading cmd")
- commands, errorcode = cisco.read_file((conf["cmddir"] + type_attr["cmd"]))
- if errorcode != "":
- logging.warn(errorcode)
- logging.warn(errorcode)
- keys = {"backuper[" + host[0] + "]" : "2", }
- sender.sendkey(keys)
- continue
- logging.debug(commands)
- logging.debug(commands)
- out, errorcode = cisco.get_data(host[0], type_attr["user"], type_attr["password"], commands)
- if errorcode != "":
- logging.warn(errorcode)
- logging.warn(errorcode)
- keys = {"backuper[" + host[0] + "]" : "3", }
- sender.sendkey(keys)
- continue
- errorcode = out_write(conf['outdir'], host[0], out)
- if errorcode != "":
- logging.warn(errorcode)
- keys = {"backuper[" + host[0] + "]" : "4", }
- sender.sendkey(keys)
- else:
- keys = {"backuper[" + host[0] + "]" : "0", }
- sender.sendkey(keys)
-
- if __name__ == '__main__':
- main()
|