воскресенье, 15 мая 2016 г.

Использование swtoolz-core

Проект swtoolz-core продолжает развиваться и совершенствоваться. В новой версии появилась возможность более гибко использовать пользовательские параметры. В первую очередь, это сделано для облегчения работы с snmpset-операциями. Cписок изменений можно посмотреть на страничке проекта, а эту заметку посвятим практическому применению swtoolz-core.

Итак, как можно использовать swtoolz-core на практике? Рассмотрим здесь несколько примеров.

1. Изменить IP-адрес коммутатора D-Link. На практике это зачастую предполагает одновременное изменение еще и шлюза по умолчанию и управляющей vlan. Чтобы при этом не потерять управление устройством, нужно прибегать к некоторым хитростям. Например:
а) зайти на коммутатор с маршрутизатора, чтобы не потерять к нему доступ после изменения IP-адреса или шлюза по умолчанию
б) изменить IP-адрес через веб-интерфейс
в) использовать snmp-команды
г) использовать заранее подготовленные скрипты

Каждый из этих способов имеет свои недостатки. При подключении с маршрутизатора требуются лишние телодвижения, а внутренняя сессия "подвисает" когда у коммутатора меняется адрес. Веб-интерфейс зачастую отключен. SNMP-команды требуют умения ориентироваться в OID и MIB (swL2DevCtrlManagementVlanId относится к vendor-specific OID, т.е. отличается у каждой модели). Скрипты требуется готовить заранее и их может быть достаточно много (см. пример выше про уникальный OID для управляющей vlan).

Понятно, что один раз сменить адрес не является проблемой. Но если адреса надо поменять у нескольких десятков или даже сотен коммутаторов, то придется искать способ упростить эту операцию. На днях мне понадобилось изменить IP-адреса у 200 коммутаторов. Пришлось научить делать это swtoolz-core. В модуль для каждой модели был добавлен новый метод:
set_IpifCfg = [
#     .1.3.6.1.2.1.16.19.11.1.1                                         netConfigIPAddress
    ['.1.3.6.1.2.1.16.19.11.1.1', '5121', '{1}', 'IPADDR'],
#     .1.3.6.1.2.1.16.19.11.1.2                                         netConfigSubnetMask
    ['.1.3.6.1.2.1.16.19.11.1.2', '5121', '{2}', 'IPADDR'],
#     .1.3.6.1.2.1.16.19.12                                             netDefaultGateway
    ['.1.3.6.1.2.1.16.19.12', '0', '{3}', 'IPADDR'],
#     .1.3.6.1.4.1.171.11.113.5.1.2.1.2.16                              swL2DevCtrlManagementVlanId
    ['.1.3.6.1.4.1.171.11.113.5.1.2.1.2.16', '0', '{4}', 'INTEGER'],
    ]
После этого понадобилось лишь обратиться к API с нужными параметрами (выделены жирным) и дело сделано:

http://host.domain:7377/<user>/<device_ip>/<community_index>/set_IpifCfg/<IP>/<mask>/<gateway>/<mvlan>

2. Создать новую vlan. Выше уже было сказано, что новый IP-адрес зачастую предполагает новую vlan для управления. Создавать ее вручную не обязательно. Это можно сделать при помощи метода:
set_CreateVlan = [
#     .1.3.6.1.2.1.17.7.1.4.3.1.1                                       dot1qVlanStaticName
    ['.1.3.6.1.2.1.17.7.1.4.3.1.1', '{1}', '{2}', 'OCTETSTR'],
#     .1.3.6.1.2.1.17.7.1.4.3.1.2                                       dot1qVlanStaticEgressPorts
    ['.1.3.6.1.2.1.17.7.1.4.3.1.2', '{1}', '{3}', 'OCTETSTR'],
#     .1.3.6.1.2.1.17.7.1.4.3.1.5                                       dot1qVlanStaticRowStatus
    ['.1.3.6.1.2.1.17.7.1.4.3.1.5', '{1}', '4', 'INTEGER'],
    ]
Создание VLAN с ID 500, именем testvlan и member-портами 25-28:
/set_CreateVlan/500/testvlan/%f0

Поскольку в данном примере не используются vendor-specific OID, то данный метод будет работать для любого коммутатора D-Link.

3. Сохранить настройки коммутатора. Сохранение настроек - вещь важная и нужная. Да и делается легко:
set_SaveConfig = [
#     .1.3.6.1.4.1.171.12.1.2.18.4                                      agentBscFileSystemSaveCfg
    ['.1.3.6.1.4.1.171.12.1.2.18.4', '0', '2', 'INTEGER'],
    ]
Сама команда вызывается без параметров:
/set_SaveConfig
Примечание: в конфигурации swtoolz-core желательно убрать дополнительные попытки опроса (retries) для этого метода. Делается это просто:
no_retries = ['set_SaveConfig']
4. Изменить статус порта (включить/выключить). Для управления состоянием портов есть свой метод:
set_AdminStatus = [
#     .1.3.6.1.4.1.171.11.63.6.2.2.2.1.3                                swL2PortCtrlAdminState
    ['.1.3.6.1.4.1.171.11.63.6.2.2.2.1.3.%s', '100', '%s', 'INTEGER'],
    ]
Установить порт в состояние status:
/set_AdminStatus/<>/<status>
Сам список статусов можно получить так:
/AdminStatus

5. Изменить административную скорость порта. Для этого тоже есть свой метод:
set_AdminSpeed = [
#     .1.3.6.1.4.1.171.11.63.6.2.2.2.1.4                                swL2PortCtrlNwayState
    ['.1.3.6.1.4.1.171.11.63.6.2.2.2.1.4.%s', '100', '%s', 'INTEGER'],
    ]
Установить скорость speed для порта №:
/set_AdminSpeed/<>/<speed>
Список возможных вариантов доступен при вызове:
/AdminSpeed

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

Возвращаясь к теме изменения IP-адреса у 200 коммутаторов, можно подвести итог. Итак, сначала я сделал список соответствия старого и нового IP-адресов. После этого был написан простой скрипт, который вычислял адрес шлюза по умолчанию и подставлял этот и другие параметры в URL, примеры которых даны выше. Получившиеся ссылки сам же скрипт и вызывал. Первая ссылка содержала команду на создание управляющей vlan, вторая меняла DHCP Relay Remote ID, третья изменяла IP-адрес интерфейса, помещая последний в новую vlan, а четвертая сохраняла настройки. В итоге все коммутаторы (разных моделей и ревизий) были перенастроены довольно быстро, а главное - мне не пришлось заходить на каждый. :)

Здесь мы рассмотрели только snmpset-операции, как дающие заметный и понятный эффект. Выключили порт - он погас. Изменили IP-адрес коммутатора - и потеряли управление им он стал доступен по новому и т.д. Но если мы работаем с get/walk-операциями, то мы получаем, прежде всего, данные. И с этими данными надо что-то сделать. Об этом в следующей статье.

Комментариев нет:

Отправить комментарий