Как подключиться только к 1 из 3 маршрутизаторов, если маршрутизатор активен и виден в Python - PullRequest
0 голосов
/ 06 мая 2019

У меня есть 3 маршрутизатора, и в одно время мне просто нужно подключиться по ssh только к любому 1 из 3 маршрутизаторов и выполнить некоторую команду. На данный момент мой код будет ssh для всех 3 маршрутизаторов. Мне просто нужно ssh только на 1 активный маршрутизатор.

Сценарий Сначала проверьте 1-й маршрутизатор, если он активен, и если он активен .. перейдите к ssh к 1-му маршрутизатору и выполните команду..end..but ... если 1-й маршрутизатор выключен и невидим для сети, попробуйте проверить 2-й маршрутизатор и, если он жив, перейдите к ssh на 2-й маршрутизатор и выполните команду ... завершить ... если не работает ... проверить 3-й маршрутизатор ... и, если все не работает, дать уведомление.

Я использую Netmiko для SSH устройств.

Это код ssh для всех устройств: -

with open('routers.json') as dev_file:
  devices = json.load(dev_file)


for device in routers['router']:
  try:
    print('Connecting to device:', device['ip'])
    connection = netmiko.ConnectHandler(**device)
    if  device['device_type'] == "cisco_ios" :
        output = net_connect.send_command("show arp")
        print(output)

Это файл routers.json: -

{
  "router": [
    {
        "device_type": "cisco_ios",
        "ip": "192.168.100.10",
        "password": "cisco123",
        "username": "user1"
    },
    {
        "device_type": "cisco_ios",
        "ip": "192.168.100.20",
        "password": "cisco123",
        "username": "user1"
    },
    {
        "device_type": "cisco_ios",
        "ip": "192.168.100.30",
        "password": "cisco123",
        "username": "user1"
    }
  ]
}

Просто нужно подключиться по ssh только к 1 из 3 маршрутизаторов, если они активны и надежны. Пожалуйста, помогите дальше. Спасибо

** Добавить оператор прерывания, если найден маршрутизатор. Если нет, продолжайте проверять другие маршрутизаторы.

1 Ответ

1 голос
/ 06 мая 2019

Чтобы добавить функцию для проверки возможности проверки IP-адреса, мы можем использовать os.system для запуска команды ping на IP-адресе, а если мы можем пропинговать IP-адрес, мы можем подключить его

def check_ping(ip_address):

    response = -1

    #Check if we can ping the IP, if we can, response will be 0,
    try:
        response = os.system("ping -c 1 {}".format(ip_address))
    except Exception as exc:
        pass

    if response == 0:
        host_is_up = True
    else:
        host_is_up = False

    return host_is_up

Используя эту функцию, мы можем переписать код как

import os

#Open devices file
with open('routers.json') as dev_file:
  devices = json.load(dev_file)

#Function to check if ip address is pingable
def check_ping(ip_address):

    response = -1

    #Check if we can ping the IP, if we can, response will be 0,
    try:
        response = os.system("ping -c 1 {}".format(ip_address))
    except Exception as exc:
        pass

    if response == 0:
        host_is_up = True
    else:
        host_is_up = False

    return host_is_up

for device in routers['router']:
    try:
        #If device_type matches cisco_ios, do stuff
        if device['device_type'] == "cisco_ios":
            print('Connecting to device:', device['ip'])
            if check_ping(device['ip']):
                connection = netmiko.ConnectHandler(**device)
                output = net_connect.send_command("show arp")
                print(output)
    #Added the missing except
    except:
        pass

Вывод будет выглядеть как

Connecting to device: 192.168.100.10
.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...