Exccript контроль cisco выполнить команду "перезагрузить"

В конечном итоге я пытаюсь создать некоторые базовые функции для управления устройствами лаборатории тестирования cisco с использованием Exscript. До сих пор Exscript сделал для меня все идеально, и я просто потянул несколько функций, например.

У меня проблемы с созданием этой функции reload_start(), которая выполняет команду перезагрузки, перезагружает мое устройство Cisco и отменяет любые изменения, которые я внес в мой тестовый запуск. Я пытался выполнить десятки различных комбинаций символьных строк, но не смог заставить его работать с дополнительными подсказками, которые появляются при вводе 'reload'

Напротив, моя функция copy_to_running_config () работает просто отлично, просто добавляя '\ n' в конце строки.

Я еще не перешел к функциям подсказок Exscript (get_prompt(), wait_prompt(), waitfor () и т. Д.), И я предполагаю, что это путь, который мне нужно исследовать, но я не могу найти примеры этого, которые имеют дело с моя конкретная цель.

from Exscript import Account
from Exscript.protocols import Telnet
from Exscript.protocols.drivers import ios

def __init__(self, ip):

    self.ip = ip
    self.account = Account('admin', 'key')              
    self.conn = Telnet()        
    self.conn.set_driver('ios')     
    self.conn.connect(ip)
    self.conn.login(self.account) 
    self.conn.execute('terminal length 0')

def enable(self):
    self.conn.execute('enable')

def copy_to_running_config(self, config):
    self.enable()
    self.conn.execute('copy flash:{0} running-config  \n'.format(config))
    res = self.conn.response
    self.conn.execute('exit')
    return res

def reload_start(self):
    self.enable()
    self.conn.execute('reload \n no \n')
    print self.conn.response

Любая помощь или вклад будет принята с благодарностью!

1 ответ

Решение

Ваша функция reload_start должна выглядеть так:

def reload_start(self):
    self.enable()
    self.conn.set_prompt(r'Save\? \[yes/no\]\:')
    self.conn.execute('reload')
    self.conn.set_prompt(r'Proceed with reload\? \[confirm\]')
    self.conn.execute('no')
    self.conn.set_prompt()
    self.conn.execute('confirm')
    print self.conn.response

Вы должны установить регулярное выражение для приглашения перед выполнением команды. В противном случае Exscrpt не сможет определить, когда отправить следующую команду.

Тем не менее, если конфигурация не была изменена и маршрутизатор не просит вас сохранить, приведенный выше скрипт не будет работать, потому что он будет ждать вопрос сохранения.

Другие вопросы по тегам