Telnet-скрипты — различия между версиями

Строка 1: Строка 1:
 +
= Общие сведения =
 +
Каждый скрипт (кроме <code>CommutatorLogin</code> и <code>CommutatorLogout</code>) должен представлять из себя законченный unit-of-work. Нужно исходить из предположения, что на момент начала выполнения любого скрипта имеется открытая telnet-сессия, которая ожидает ввода пользователя. После завершения выполнения скрипта telnet-сессия должна оставаться в том же виде, в котором была на начало выполнения. Т.е. скрипт не должен оставить сессию в контексте выполнения какой-то команды свитча (например, войти в режим <code>config</code> и не выйти из него). Только так можно гарантировать, что выполнение данного скрипта никак не помешает выполнению последующих скриптов, которые будут выполняться в той же сессии.
 +
 +
Отдельного внимания заслуживают скрипты <code>CommutatorLogin</code> и <code>CommutatorLogout</code>.<br>
 +
 +
В отличие от всех других скриптов, <code>CommutatorLogin</code> должен начинаться с команды <code>expect</code> (или аналогичной). Данный скрипт всегда выполняется самый первый после открытия telnet-сессии, и прежде, чем что-то слать в telnet-сессию (например, имя пользователя и пароль) нужно дождаться приглашения от telnet-сервера.
 +
 +
<code>CommutatorLogout</code> же, напротив, всегда выполняться самым последним, перед закрытием telnet-сессии, поэтому его последней командой не должна быть <code>expect</code> (или аналогичная). Последняя команда этого скрипта должна закрывать telnet-сессию, а после закрытия сессии уже нечего ожидать.
 +
 +
 +
ComConfig имеет тенденцию склеивать быстро поступающие подряд команды (до 5ти штук), чтобы выполнять их все в одной telnet-сессии, без постоянного залогинивания и разлогинивания. Если поступила одна команда, то будет открыта новая telnet-сессия, в ней будет выполнена команда <code>CommutatorLogin</code>, затем поступившая команда и, наконец, <code>CommutatorLogout</code>. После выполнения этой последовательности ожидается закрытие telnet-сессии, и если она не была закрыта в течение заданного таймаута, значит что-то пошло не так (возможно, не корректен один из telnet-скриптов).
 +
 +
Пока происходит выполнение команды на свитче, в очередь команд для этого же свитча вполне могут поступить еще несколько команд. В этом случае после успешного завершения выполняемой в данный момент команды, ComConfig склеит до 5-ти ждущих в очереди команд и попытается выполнить их все в одной telnet-сессии, выполнив скрипты <code>CommutatorLogin</code> и <code>CommutatorLogout</code> только 1 раз, вначале и, соответственно, в конце.<br>
 +
Т.о., если в очереди успело накомпиться 3 команды <code>Command1</code>, <code>Command2</code> и <code>Command3</code>, то последовательность выполнения скриптов в одной telnet-сессии будет такая:
 +
* CommutatorLogin
 +
* Command1
 +
* Command2
 +
* Command3
 +
* CommutatorLogout
 +
 +
Если накопилось больше 5-ти команд, ComConfig объединит лишь первые 5, оставив оставшиеся в очереди дожидаться успешного выполнения этих пяти. Затем возьмет еще 5 (или меньше, если 5 не набирается) и т.д.
 +
 +
Если какая-то команда не выполнена успешно, весь пакет команд отправляется в начало очереди и через время ComConfig пытается снова, при этом ComConfig будет пытаться выполнять команды по одной, пока хотя бы одна из них не выполнится успешно. Т.о. достигается некоторая отказоустойчивость, если ошибка проявляется только в случае, если команды выполняются в пакете, но не проявляется, если выполняются по одной. Хотя в большинстве случаев это может сигнализировать о некорректно написанном скрипте.
 +
 +
 
= Скрипты конфигурирования порта =
 
= Скрипты конфигурирования порта =
  

Версия 11:33, 22 апреля 2016

Общие сведения

Каждый скрипт (кроме CommutatorLogin и CommutatorLogout) должен представлять из себя законченный unit-of-work. Нужно исходить из предположения, что на момент начала выполнения любого скрипта имеется открытая telnet-сессия, которая ожидает ввода пользователя. После завершения выполнения скрипта telnet-сессия должна оставаться в том же виде, в котором была на начало выполнения. Т.е. скрипт не должен оставить сессию в контексте выполнения какой-то команды свитча (например, войти в режим config и не выйти из него). Только так можно гарантировать, что выполнение данного скрипта никак не помешает выполнению последующих скриптов, которые будут выполняться в той же сессии.

Отдельного внимания заслуживают скрипты CommutatorLogin и CommutatorLogout.

В отличие от всех других скриптов, CommutatorLogin должен начинаться с команды expect (или аналогичной). Данный скрипт всегда выполняется самый первый после открытия telnet-сессии, и прежде, чем что-то слать в telnet-сессию (например, имя пользователя и пароль) нужно дождаться приглашения от telnet-сервера.

CommutatorLogout же, напротив, всегда выполняться самым последним, перед закрытием telnet-сессии, поэтому его последней командой не должна быть expect (или аналогичная). Последняя команда этого скрипта должна закрывать telnet-сессию, а после закрытия сессии уже нечего ожидать.


ComConfig имеет тенденцию склеивать быстро поступающие подряд команды (до 5ти штук), чтобы выполнять их все в одной telnet-сессии, без постоянного залогинивания и разлогинивания. Если поступила одна команда, то будет открыта новая telnet-сессия, в ней будет выполнена команда CommutatorLogin, затем поступившая команда и, наконец, CommutatorLogout. После выполнения этой последовательности ожидается закрытие telnet-сессии, и если она не была закрыта в течение заданного таймаута, значит что-то пошло не так (возможно, не корректен один из telnet-скриптов).

Пока происходит выполнение команды на свитче, в очередь команд для этого же свитча вполне могут поступить еще несколько команд. В этом случае после успешного завершения выполняемой в данный момент команды, ComConfig склеит до 5-ти ждущих в очереди команд и попытается выполнить их все в одной telnet-сессии, выполнив скрипты CommutatorLogin и CommutatorLogout только 1 раз, вначале и, соответственно, в конце.
Т.о., если в очереди успело накомпиться 3 команды Command1, Command2 и Command3, то последовательность выполнения скриптов в одной telnet-сессии будет такая:

  • CommutatorLogin
  • Command1
  • Command2
  • Command3
  • CommutatorLogout

Если накопилось больше 5-ти команд, ComConfig объединит лишь первые 5, оставив оставшиеся в очереди дожидаться успешного выполнения этих пяти. Затем возьмет еще 5 (или меньше, если 5 не набирается) и т.д.

Если какая-то команда не выполнена успешно, весь пакет команд отправляется в начало очереди и через время ComConfig пытается снова, при этом ComConfig будет пытаться выполнять команды по одной, пока хотя бы одна из них не выполнится успешно. Т.о. достигается некоторая отказоустойчивость, если ошибка проявляется только в случае, если команды выполняются в пакете, но не проявляется, если выполняются по одной. Хотя в большинстве случаев это может сигнализировать о некорректно написанном скрипте.


Скрипты конфигурирования порта

При конфигурировании порта скрипты выполняются в следующей последовательности:

Тип порта MAGISTRAL

  • PortConfigMagistral
  • PortMediaType*

Тип порта TRANSIT

  • PortConfigTransit
  • PortMediaType*

Тип порта SEGMENT

  • PortConfigSegment
  • PortMediaType*

Тип порта CLIENT

  • PortConfigClient
  • Один из: PortUnauth, PortAuth, PortDisabled
  • PortMediaType*

Тип порта DEDICATED

Ничего не делается.

Тип порта SHUTDOWN

  • PortConfigShutdown
  • PortMediaType*

Неизвестный тип порта

  • PortMediaType*