Page tree
Skip to end of metadata
Go to start of metadata

Ниже представлено описание скрипта, предназначенного для сохранения настроек группы мастер-модулей на ftp сервере.

Запуск скрипта осуществляется в операционной системе пользователя (администратора). Для периодического запуска скрипта нужно использовать планировщик задач операционной системы (cron, anacron - для *nix, Task Scheduler, nnCron - для Win и т.д.)

Для запуска скрипта требуется Python 3, дистрибутив которого можно скачать по ссылке: https://www.python.org/downloads/ , либо установить из репозитория вашей операционной системы

Для настройки скрипта необходимо указать параметры в разделе User settings скрипта:

ПараметрНазначение
username
Имя для аккаунта пользователя с правами администратора на устройстве
password
Пароль для аккаунта пользователя с правами администратора на устройстве
ftpurl
Адрес ftp сервера
ftpuser
Пользователь ftp сервера
ftppassword
Пароль пользователя  ftp сервера
ftpdir
Дирректория на ftp сервере для хранения копий настроек

Список адресов устройств мастер-модулей задается в файле hosts.txt по одному на каждой строке. Например:

hosts.txt
192.168.0.193
192.168.0.194
telemetry.asia

Файлы настроек сохраняются на ftp сервере в указанной директории в виде  settings_mm.dd.yy-hh:mm:ss.vut

Текст скрипта прилагается ниже:

vtbackup.py Скрипт сохранения настроек группы мастер-модулей
#!/usr/bin/python3
#
# vtbackup.py 
# 
# Vutlan backup settings script v.0.3
#
__author__ = 'Vutlan'

import datetime
import ftplib
import hashlib
import os
import sys
import time
import urllib.request
from urllib.request import urlretrieve
import urllib.parse
from xml.dom.minidom import parse, parseString

# get Python version
# print(sys.version_info)

#-----------------------------------
#
# User settings
#
#-----------------------------------
# admin username on device
username = 'guest'
# password on device 
password = 'guest' # or setup hash: h=...
hash_object = hashlib.sha1(str.encode(password))
h = hash_object.hexdigest()
#print(h)
# ftp url:
ftpurl = 'ftp.server.com'
# ftp user name:
ftpuser = 'user'
# password for ftp user:
ftppassword = 'pass'
# directory on ftp server:
ftpdir = '/savesettings/'
#-----------------------------------


#
# make filename by timestamp
#
def MakeFilename(host, prefix='settings_', ext='.vut'):
    timeStamp =  datetime.datetime.fromtimestamp(time.time()).strftime("%b-%d-%y-%H:%M:%S")
    filename = prefix+host+'-'+timeStamp+ext
    return filename

#
# auth procedure
#
def QueryAuth(host, username, h):
    param = "querytype=auth&name=%s&h=%s" % (username, h)
    hosturl="http://"+host+"/"
  
    response = urllib.request.urlopen(hosturl+"engine.htm", param.encode("ascii"))   
    #print(response.read());

    xmldoc = parseString(response.read().decode("utf-8"))
    itemlist = xmldoc.getElementsByTagName('error')
    if len(itemlist) :
        print("Error"+itemlist[0].attributes['type'].value)
        return
    else :
      itemlist = xmldoc.getElementsByTagName('user')

      if len(itemlist) :
          k=itemlist[0].attributes['k'].value
          #print(k)
          return k

#
# get settings procedure
#
def QuerySettingsGet(host, k, filename):
    hosturl="http://"+host+"/"
    param = ("k=%s" % (k))
    urlretrieve(hosturl+"settings.htm?"+param, filename)

#
# get dump procedure
#
def QueryDumpGet(host, k):
    param = "&txt=true&id=201001"
    pparam = ("k=%s&%s" % (k,param))
    print(pparam)
    urlretrieve(hosturl+"dump.htm?"+pparam, "dump.xml")

#
# Upload to FTP server 
#
def FtpUpload(ftpurl, ftpuser,ftppassword, ftpdir, filename):
    # file to send
    file = open(filename,'rb')

    # send the file
    session = ftplib.FTP(ftpurl, ftpuser, ftppassword)
    session.cwd(ftpdir)
    session.storbinary('STOR '+filename, file)
    session.quit()

    # close file
    file.close()

#
# backup device settings 
#
def HostBackup(host):
    # make filename
    filename = MakeFilename(host)
    #print(filename)
    #return 
    
    try :
        # auth on device
        k = QueryAuth(host, username,h)
        #print(k)

        # get file settings from device
        QuerySettingsGet(host, k, filename)

        # upload to ftp
        FtpUpload(ftpurl, ftpuser,ftppassword, ftpdir, filename)

        # tidy 
        os.remove(filename)
        print("%s\t - backup succeeded" % (host))
    except:
        print("%s\t - backup failed" % (host))   

#
# backup settings for devices from list (text file)
#
def HostsListBackup(hosts):
    with open(hosts, 'r') as f:
        lines = f.readlines()
        for host in lines:
            HostBackup(host.rstrip('\n')) 
    
#
# main programm
#

HostsListBackup("hosts.txt");     

Скачать: vtbackup.py


Для запуска скрипта необходимо выполнить:

Пример запуска
> python vtbackup.py

или

$ python3 vtbackup.py

При этом путь до интерпретатора python должен быть указан в переменной PATH, либо в строке запуска необходимо указать полный путь.

Результат работы скрипта:

Пример работы
192.168.0.193     - backup succeeded
192.168.0.194     - backup failed
telemetry.asia    - backup succeeded

 

 

  • No labels