Автоматическое сохранение конфигов hp-свитчей

Материал из Mindsellers
Перейти к: навигация, поиск

Python

Возникла задача - выгрузить конфиги свитчей HP, причем всех и прям-вот-сейчас. На коленке родилось простое решение: hp из ssh-консоли умеет выгружать свой конфиг на TFTP-сервер! Значит, нужно просто пробежаться по всем свитчам и сказать им, куда нужно выгружать.

Сначала ставим и настраиваем tftp

apt install tftpd-hpa

Приводим файл конфига к следующему виду

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"

Каталог, ясное дело, можно менять на свое усмотрение, но у tftp должны быть права на запись в него.

Теперь напишем скрипт. Никаких классов, декораторов и так далее не будет - на коленке ж делаем!


#!/usr/bin/python
import paramiko, datetime, tarfile
def connect(host="1.1.1.1",port="22",username="",password="",commandlist=["",""]):
	print 'start function for '
	print 'host='+host
	try:
		client = paramiko.SSHClient()
		client.set_missing_host_key_policy(paramiko.AutoAddPolicy())	
		client.connect(host,username=username,password=password,look_for_keys=False)
		ssh = client.invoke_shell()
		ssh.send('\n')
		ssh.recv(1024)
		
		for command in commandlist:
			ssh.send(command+'\n')
			print ssh.recv(1024)
			
		ssh.close()
		client.close()
		
	except Exception as s:
		print 'Cannot connect to '+str(host)
		print s

def targz(directory="",arch=""):
    tar = tarfile.open(arch+str(datetime.date.today())+'.tar.gz','w:gz')
    tar.add(directory,'conf')
    tar.close()


if __name__=='__main__':
	for n in range(1,42):
	    host='172.16.22.'+str(n)
	    print host
	    connect(host=host,username="manager",password="passsss",commandlist=["copy running-config tftp 10.10.1.33 "+host+".conf"])
	
	targz(directory='/var/lib/tftpboot/',arch='/admin/switch/conf/')
	

Особенность свитчей HP в том, что они категорически отказываются пускать пользователей по ключам, так что придется использовать paramiko (pip install paramiko).

При необходимости, в список commandlist можно добавить еще какие-то команды. Как видно из кода, свитчи у меня имеют адреса 172.16.22.1-41, а пароли у нас на свитчах одинаковые.

Ясно, что вы можете использовать эту маленькую функцию с любой благородной целью, например, добавить некий vlan на все свитчи.

Простая функция targz просто добавляет все слитые файлы в архив в указанном каталоге, называя архив по дате.