Перейти к содержимому
Калькуляторы

Управление vlan на cisco через snmp Костыль вместо VTP

Введение

Есть задача автоматизировать проброс вланов по сети состоящей из длинков и цисок на L2. Понятно, что можно использовать GVRP и VTP, но делать этого не хочется по причинам длинков, сами понимаете, в один прекрасный момент это может всё развалится из-за специфики оборудования. Оборудование - от 3526 до 3200-X без веб-смартов и обрезков. Каталисты - 29xx, 3750.

 

Что уже есть

1. Полная карта по которой нужно построить цепочку вланов, акцесом на конце, транком на начале.

2. Возможность управления вланами на длинках через snmp, создать удалить, добавить порты. Без проблем, всё работает годами через Q-BRIDGE MIB.

3. Возможность управлять цисками через VTP-что-то-там-MIB (пример ниже)

 

Сам вопрос

Не могу найти mib и вообще факт присутствия нужного функционала для назначения портов в VLAN режиме TRUNK. Access - без проблем. Сделать switchport trunk allowed all можно, но не хочется, люблю порядок. Понятно, что можно написать телнет клиент на каком-нибудь экспекте, но хочется именно snmp. Может быть кто-нибудь делал подобную вещь?

 

Я уже нарыл по этому вопросу следующее

СОЗДАНИЕ ВЛАНА (vlan=6)

#Режим редактирования и копирование таблицы влан
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 integer 2 1.3.6.1.4.1.9.9.46.1.4.1.1.3.1 s "vurd"

#Создание влан
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.2.1.11.1.6 i 4 1.3.6.1.4.1.9.9.46.1.4.2.1.3.1.6 i 1 1.3.6.1.4.1.9.9.46.1.4.2.1.4.1.6 s "vlan6" 1.3.6.1.4.1.9.9.46.1.4.2.1.6.1.6 x 000186A6 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 3

#Применение таблицы
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 4

УНИЧТОЖЕНИЕ ВЛАНА (vlan=6)

#Режим редактирования и копирование таблицы влан
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 integer 2 1.3.6.1.4.1.9.9.46.1.4.1.1.3.1 s "vurd"

#Удаление влан
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.2.1.11.1.6 i 6 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 3

#Применение таблицы
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 4

ДОБАВЛЕНИЕ ACCESS-ПОРТА В ВЛАН (vlan=6, port=10(ifIndex))

#Добавить порт в влан
snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.68.1.2.2.1.2.10 i 6
1.3.6.1.4.1.9.9.68.1.2.2.1.2.{ifIndex} i {vlan}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

по длинку:

ftp://ftp.dlink.pl/_KnowledgeBase/Switch_doc_en_How-to-use-SNMP-to-check-VLAN-Static-and-Current-Tables-on-DES-3028_20100203.pdf

там в конце есть The Example of creating a VLAN и The Example of adding a tag port in VLAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По длинку без проблем ( см. "что уже есть", пункт 2;) ). Вопрос именно по цискам и именно по транковым портам.

Есть вон какой-то http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=1.3.6.1.4.1.9.9.46.1.6.1.1.4 , объект read-create.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

по цискам есть ман: http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c6035.shtml

http://dragon.east.isi.edu/twiki/bin/view/DRAGON/CiscoCatalystSNMPandCLI

 

где-то еще попадались готовые куски перла для полного управления вланами на cisco ios, если найду подкину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

О! Первый мануал в переводе на наш язык и с исправлениями всех ошибок, которые там встретились, я приложил выше :)

А вот второй я уже не видел. Беглый просмотр говорит мне о том, что это именно то, что я искал. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

.1.3.6.1.4.1.9.9.46.1.6.1.1.4

 

.iso.org.dod.internet.private.enterprises.cisco.ciscoMgmt.ciscoVtpMIB.vtpMIBObjects.vlanTrunkPorts.vlanTrunkPortTable.vlanTrunkPortEntry.vlanTrunkPortVlansEnabled

 

A string of octets containing one bit per VLAN in the

management domain on this trunk port. The first octet

corresponds to VLANs with VlanIndex values of 0 through 7;

the second octet to VLANs 8 through 15;etc. The most

significant bit of each octet corresponds to the lowest

value VlanIndex in that octet. If the bit corresponding to

a VLAN is set to '1', then the local system is enabled for

sending and receiving frames on that VLAN;if the bit is set

to '0', then the system is disabled from sending and

receiving frames on that VLAN.

 

allowed vlan на tunk'e , не оно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Автоматическая работа с vlans

 

 

Инструменты

1.                Получение инфы о существующем vlan и поиск устройств

2.                Быстрое создание vlan

3.                Быстрое удаление vlan со всех коммутаторов

 

 

 

 

Получение актуальных данных vlan

Задача: Получить информацию о действительном использовании VID

Запуск ./check_vlan.sh

 

./check_vlan.sh
./check_vlan.sh <VID> debug

 

 

Процеcc

I.                        Ввод данных пользователя

II.                        Анализ VID и Vlan name на существование, поиск дубликатов в конфигурациях всех коммутаторов сети

III.                        Поиск MAC адресов на основных коммутаторах в распр через SNMP запрос к каждому кольцевому коммутатору

 

 

Быстрое создание vlan

Основная задача: быстрое создание vlan только коммутаторов

Второстепенные задачи:

1.                Актуализировать пропуски

2.                Переименовать уже созданный ранее vlan

 

Процеcc

   I.            Ввод данных пользователя

   II.            Анализ VID и Vlan name на существование, поиск дубликатов имени

 III.            Создание vlan (автоматическое)

 IV.            Сохранение конфигураций

 

 

Запуск ./start-add-vlan.sh

./start-add-vlan.sh
./start-add-vlan.sh <VID> <name>

 

 

 

 

 

Если обе точки находятся в пределах местонахождения , то достаточно указать зону «1». Если есть хотя бы одна точка находится в зоне 2, то нужно указывать «1,2».

В стандартных случаях зона 2 не используется отдельно без зоны 3оны 1И в таком случае будет выдано предупреждающее сообщение:

Вы выбрали "зона 2" без . зона 1 Не сделали ли вы ошибку?

 

 

Правильные примеры:

 

Ошибочные примеры***:

2 (отсутствует зона 1)
3 (отсутствует зона 1,2)

*- пример не будет ошибкой если вы выполняете узкую задачу, например на одном коммутаторе зоны 2 отсутствует нужный vlan.

 

После завершения создания vlan пропишите vlan вручную на конечных коммутаторах.

 

 

 

 

 

 

Быстрое удаление vlan со всех коммутаторов

Задача: быстрое удаление vlan со всех коммутаторов.

Запуск ./start-delete-vlan.sh

./start-delete-vlan.sh
./start-delete-vlan.sh <VID>

 

Процеcc

I.                        Ввод данных пользователя

II.                        Поиск коммутаторов с нужным VID

III.                       Удаление vlan (полуавтоматическое с «предохранителем»)

IV.                       Сохранение конфигураций

 

Если Mac адресов много, то vlan удалить нельзя

 

Дополнительно

 

Ручное скачивание конфигов

./download_configs.sh

 

Сохранить все конфиги

./autosave-conf-all-switches.sh

 

 

Список оборудования

cat "/all_devices"

Цитата

#|#|PERVAYA_ZONA
1|2|192.168.0.123|47,48|snmp_community
1|3|192.168.0.105|106,107|snmp_community
1|2|192.168.0.125|47,48|snmp_community
1|3|192.168.0.92|106,107|snmp_community
1|3|192.168.0.34|107,108|snmp_community
#|#|VTORAYA_ZONA
2|2|192.168.0.123|46|snmp_community
2|2|192.168.0.6|47,48|snmp_community
2|3|192.168.0.8|107,108|snmp_community
2|3|192.168.0.121|105,107|snmp_community
2|3|192.168.0.105|108|snmp_community
#|#|TRETYA_ZONA
3|3|192.168.0.85|107|snmp_community
3|3|192.168.0.140|107,108|snmp_community
3|3|192.168.0.138|107,108|snmp_community
3|3|192.168.0.1252|108,107|snmp_community
3|3|192.168.0.1251|108,107|snmp_community
3|3|192.168.0.121|108|snmp_community
#|#|CHETVERTAYA_ZONA
4|2|192.168.0.125|44|snmp_community
4|3|192.168.0.74|57,60|snmp_community
4|0|192.168.0.78|26,25|d_link_snmp_community
4|0|192.168.0.76|26,28|d_link_snmp_community
4|2|192.168.0.123|29|snmp_community

 

 

 

 

 

 

Основные срипты

autosave-conf-all-switches.sh
check_settings.sh
check_vlan.sh
download_configs.sh
start-add-vlan.sh
start-delete-vlan.sh

 

 

 

Вспомогательные срипты

Директория sub-scripts

add_vlan-Cisco-Nexus.sh
add_vlan-D-link.sh
add_vlan-Eltex.sh
del_vlan-Cisco-Nexus.sh
del_vlan-D-link.sh
del_vlan-Eltex.sh
wr_mem-Cisco-Nexus.sh

 

 

 

autosave-conf-all-switches.sh

 

 

Цитата

#!/bin/bash

folder_cfg="/srv/tftp"

### Сохранение конфигураций коммутаторов Eltex ###
list_eltex=$(cat /config_eltex)

while read ip
do
                  comm=snmp_community
                  sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
                  echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( snmpset -t 10 -r 0 -v2c -c $comm $ip 1.3.6.1.4.1.89.87.2.1.3.1 i 1 1.3.6.1.4.1.89.87.2.1.7.1 i 2 1.3.6.1.4.1.89.87.2.1.8.1 i 1 1.3.6.1.4.1.89.87.2.1.12.1 i 3 1.3.6.1.4.1.89.87.2.1.17.1 i 4 )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
done <<< "$list_eltex"

### Сохранение конфигураций коммутаторов D-link ###
list_dlink_all=$(cat /config_des3200C1 /config_des /config_dgs1100-06ME)
while read ip
do
                  sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g')
                  ip_4oct=`echo $ip | awk -F '.' '{print $4}'`
                  echo;echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( snmpset -t 10 -r 0 -v2c -c snmp_community"$ip_4oct" $ip 1.3.6.1.4.1.171.12.1.2.18.4.0 i 4 )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
done <<< "$list_dlink_all"

 

 

 

 

check_settings.sh

 

Цитата

#!/bin/bash

IFS=''

DEVICES="/all_devices"
list_eltex=$(cat /config_eltex)
list_dlink_all=$(cat /config_des /config_des3200C1 /config_dgs1100-06ME)
list_cisco=$(cat /config_cisco)
#list_alldevices=$(cat /config_*)
folder_cfg="/srv/tftp"
#dir_eltex="/srv/tftp/Eltex"
#dir_dlink="/srv/tftp/DES"
#dir_cisco="/srv/tftp/cisco"

#dir_des2="/configs/DES/"
#dir_des="/configs/DES/*"
#list_des_3200C1=$(cat /config_des3200C1)
#list_des_3200=$(grep -a "DES-3200-[[:digit:]]\{2\} Configuration" /configs/DES/* | cut -d '/' -f6 | cut -d ':' -f1)
#list_dgs_1100_06=$(grep -a "DGS-1100-06/ME Gigabit" /configs/DES/*)
#list_dgs_1100_06_1=$(echo $list_dgs_1100_06 | cut -d '/' -f6 | cut -d ':' -f1)
#list_des_3526_draft=$(grep -a "DES-3526 Configuration" /configs/DES/*)
#list_des_3526=$(echo $list_des_3526_draft | cut -d '/' -f6 | cut -d ':' -f1)
#list_des_3016=$(grep -a "DES-3016 Configuration" /configs/DES/*)

case "$1" in
        --help)
                echo "use $0 VlanID debug";exit
                ;;
        -h)
                echo "use $0 VlanID debug";exit
                ;;
        *)

                ;;
esac

/usr/bin/renice -n 20 -p $$ > /dev/null
cd /usr/libexec/vlans

vlanid=$1
vlanname=$2

#Цвета для дебага
deb_c1="\e[35m"
deb_c2="\e[0m"

echo -e "Проверка vlan\e[0m"
if [ "x$1" = "x" ]; then
echo -e "\033[44;7mВведите Vlan ID\e[0m";
read -p "Vlan ID: " vlanid
fi

if [ "x$2" = "xdebug" ];
  then debug=1
  else debug=0
fi

#read -p "Включить режим debug? y/n: " dbg
#case "$dbg" in
#    y) debug=1 ;;
#    *) debug=0 ;;
#esac

#D-link и Cisco Nexus не разрешает испотзование пробелов, однако Элтекс разрешают пробелы и нужно их заменить на _
# из-за этого в дальнейшем придется проверять vlan`ы 2 раза: с пробелами и с "_"
vlanname_orig=$vlanname
vlanname=`echo $vlanname | sed 's/ /_/g'`

### Функция поиска vlan ###
search_vid(){
       if ( echo $list_vlan_final | grep -w $vlanid &>/dev/null )
        then echo -e "\033[33m\nVlan ID $vlanid создан на $postfix $sw_name $ip \e[0m" /// $vlanname_current; vlanid_error=true
         if [ $debug == "1" ]
            then
            echo -e "${deb_c1}==DEBUG== Найден VID \c";
            echo -e "`echo $list_vlan_final | grep -w $vlanid`${deb_c2}"
         fi
       fi
}

### Функция очистки переменных ###
clear_var(){

unset postfix
unset sw_name
unset list_vlan
unset list_vlan_final
unset vlanname_current
unset vlanname_current_short
}

### Индикатор выполнения ###
progress_bar(){
if [ $debug == "0" ]; then echo -e "\033[36m.\e[0m\c"; fi
}


###################
### Cisco Nexus ###
###################

while read ip || [ -n "$ip" ]
do
if (grep -i "hostname Nexus" "$folder_cfg"/cisco/"$ip".conf &>/dev/null)
 then list_cisco_nexus=$(echo -e "$list_cisco_nexus\n$ip")
fi
done <<< "$list_cisco"
list_cisco_nexus=$(echo $list_cisco_nexus | sed '/^$/d')


while read ip || [ -n "$ip" ]
do
        postfix=CiscoNexus;
        sw_name=`grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'`
        list_vlan=`grep -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | sed 's/vlan //'`
        list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/\n/,/g')
        list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" }
        NR > 1  { print "\n" }
        NF > 1  { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next }
        { print $1 }'`
        vlanname_current=`grep -wEA1 "^vlan $vlanid" "$folder_cfg"/cisco/"$ip".conf | sed ':a;N;$!ba;s/\n//g'`
        vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'`
        #list_vlanname_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname_orig" | sed 's/  name //'`
        #list_vlanname_debug_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        #list_vlanname=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname" | sed 's/  name //'`
        #list_vlanname_debug=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi
        list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short")
        search_vid
        clear_var
        progress_bar
done <<< "$list_cisco_nexus"


#############
### Eltex ###
#############

while read ip || [ -n "$ip" ]
do
        postfix=Eltex;
        sw_name=`grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'`
        list_vlan=`sed -n '/^vlan database$/,/^exit$/p' "$folder_cfg"/Eltex/"$ip".conf | sed -e'/database/'d -e'/exit/'d | sed 's/ vlan //'`
        list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/ \n/,/g')
        list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" }
        NR > 1  { print "\n" }
        NF > 1  { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next }
        { print $1 }'`
        vlanname_current=`grep -wA1 "interface vlan $vlanid" "$folder_cfg"/Eltex/"$ip".conf | sed ':a;N;$!ba;s/\n//g'`
        vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'`
        #list_vlanname_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -w name | sed 's/ name //' | sed 's/"//g'`
        #list_vlanname_debug_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        #list_vlanname=$list_vlanname_o
        #list_vlanname_debug=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi
        list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short")
        search_vid
        clear_var
        progress_bar
done <<< "$list_eltex"


##############
### D-link ###
##############

while read ip || [ -n "$ip" ]
do
        postfix=Dlink;
        sw_name=`grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g'`
        list_vlan_final=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 5`
        vlanname_current=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -w "tag $vlanid"`
        vlanname_current_short=`echo $vlanname_current | awk -F ' ' '{print $3}'`
        #list_vlanname=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 3`
        #list_vlanname_debug=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -wi $vlanname`
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi
        list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short")
        search_vid
        clear_var
        progress_bar
done <<< "$list_dlink_all"

echo
echo Обнаружены следующие имена:
echo $list_all_curvlanname | sed 's/ $//g' | sort -u | sed '/^$/d'

 

 

 

 

 

download_configs.sh

 

Цитата

#!/bin/bash

case "$1" in
        --help)
                echo "use $0 debug";exit
                ;;
        -h)
                echo "use $0 debug";exit
                ;;
        *)

                ;;
esac


if [ "x$1" = "xdebug" ]
  then debug=1
  else debug=0
fi

print_message(){
echo
echo "Выгрузка Элтекс завершена. Через 3 сек. начнется выгрузка конфигуаций D-link. Нажмите Ctrl+C для отмены"
echo "К сожалению, конфигуации коммутаторов Cisco Nexus не выгружаются по данному запросу :-("
echo
sleep 3
}

error=""
#read -p "Выводить подробности? y/n: " debug
case "$debug" in
    1)
        echo Началась выгрузка конфигураций Элтекс...
        /eltex-uploader.pl | grep STRING
        print_message
        /des-uploader.pl | grep STRING
        ;;
    0)
        echo Началась выгрузка конфигураций Элтекс...
        echo "Для вывода более детальной информации используйте $0 debug"
        /eltex-uploader.pl > /dev/null
        print_message
        /des-uploader.pl > /dev/null
        ;;
esac

 

 

 

 

start-add-vlan.sh

 

Цитата

#!/bin/bash

DEVICES="/all_devices"
debug=0
deb_o="&>/dev/null"
folder_cfg="/srv/tftp"

case "$1" in
        --help)
                echo "use $0 VlanID debug";exit
                ;;
        -h)
                echo "use $0 VlanID debug";exit
                ;;
        *)

                ;;
esac

/usr/bin/renice -n 20 -p $$ > /dev/null
cd /usr/libexec/vlans

vlanid=$1
vlanname=$2

#Цвета для дебага
deb_c1="\e[35m"
deb_c2="\e[0m"

stop(){
read -p "Нажмите enter для продолжения..." s
}

echo -e "Быстрое создание vlan. \e[4mhttp://1.2.3.4/mstpring.html\e[0m"
 

if [ "x$1" = "x" ]; then
echo -e "\033[44;7mВведите Vlan ID <vlanid 2-3967,4048-4094>\e[0m";
read -p "Vlan ID: " vlanid
fi
if [ "x$2" = "x" ]; then

echo
echo "Далее нужно создать описание vlan'a"
echo
echo -e "\033[44;7mВведите название vlan'a\e[0m";
read -p "Vlan name: " vlanname
fi

#D-link и Cisco Nexus не разрешает испотзование пробелов, однако Элтекс разрешают пробелы и нужно их заменить на _
# из-за этого в дальнейшем придется проверять vlan`ы 2 раза: с пробелами и с "_"
vlanname_orig=$vlanname
vlanname=`echo $vlanname | sed -e 's/ /_/g' -e 's/"//g'`
vlanname_wc=`echo $vlanname | wc -m`
#Проверка на количество символов 32
if [ $vlanname_wc -gt "33" ]; then echo "Максимальное количество символов в наименовании vlan не должно превышать 32. Рекомендуем уменьшить длину имени...";exit
fi

echo
echo -e "\033[45;7mВы выбрали Vlan ID=$vlanid, имя=$vlanname\e[0m";
echo;echo -e "Проводится анализ на наличие Vlan ID $vlanid коммутаторов в кольце MSTP"

###############################################
########### ПРОВЕРКА VLAN НА НАЛИЧИЕ ##########
###############################################

#IFS=' '
    while read LINE || [ -n "$LINE" ]
    do
        arr=(`echo $LINE | sed "s/ /_/g" | sed "s/|/ /g"`);
        zone_switch=${arr[0]};
        type=${arr[1]};
        ip=${arr[2]};
        portlist=${arr[3]};#portlist=(`echo ${arr[3]} | sed "s/,/ /g"`);
        portcount=`echo ${arr[3]} | awk -F ',' '{print NF}'`;
        comm=${arr[4]};
        #в начале каждого цикла стираются значения переменных предыдущего коммутатора
        unset sw_name
        unset list_vlan_final
        unset list_vlanname
        unset list_vlanname_debug
        unset list_vlanname_invert
        #значение оригинального наименования vlan без замены пробелов на знак "_"
        #У D-link и Cisco Nexus нельзя использовать проблелы, поэтому данное поле отсутствует
        unset list_vlanname_o
        unset list_vlanname_debug_o
        #Пропускать проверенные коммутаторы. Дебаг включается только вручную в самом скрипте.
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== check_vid_all=$check_vid_all ${deb_c2}"; fi
        if ( echo $check_vid_all | grep $ip &>/dev/null ); then
            if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== IP $ip уже был проверен ранее, пропускаем ...${deb_c2}"; fi
            continue
        fi
        echo -e "\033[36m.\e[0m\c"

        IFS='' #Для дальнейшей обработки разделитель должен быть переводом строки
                if [ $type == "0" ]; then
                postfix=Dlink;
                sw_name=`grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g'`
                list_vlan_final=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 5`
                #_vlanname_current=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -w "tag $vlanid"`
                list_vlanname=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 3`
                list_vlanname_debug=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -wi $vlanname`
            elif [ $type == "1" ]; then
                postfix=Cisco;
            elif [ $type == "2" ]; then
                postfix=CiscoNexus;
                sw_name=`grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'`
                list_vlan=`grep -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | sed 's/vlan //'`
                list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/\n/,/g')
                list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" }
                NR > 1  { print "\n" }
                NF > 1  { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next }
                { print $1 }'`
                #_vlanname_current=`grep -wEA1 "^vlan $vlanid" "$folder_cfg"/cisco/"$ip".conf | sed ':a;N;$!ba;s/\n//g'`
                list_vlanname_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wi "name $vlanname_orig" | sed 's/  name //'`
                list_vlanname_debug_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wiB1 "name $vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
                list_vlanname=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wi "name $vlanname" | sed 's/  name //'`
                list_vlanname_debug=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wiB1 "name $vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
            elif [ $type == "3" ]; then
                postfix=Eltex;
                sw_name=`grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'`
                list_vlan=`sed -n '/^vlan database$/,/^exit$/p' "$folder_cfg"/Eltex/"$ip".conf | sed -e'/database/'d -e'/exit/'d | sed 's/ vlan //'`
                list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/ \n/,/g')
                                                                                #if [ $ip == 1.2.3.140 ]; then echo DEBUG list_vlan $list_vlan; fi
                list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" }
                NR > 1  { print "\n" }
                NF > 1  { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next }
                { print $1 }'`
                #_vlanname_current=`grep -wA1 "interface vlan $vlanid" "$folder_cfg"/Eltex/"$ip".conf | sed ':a;N;$!ba;s/\n//g'`
                list_vlanname_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -w name | sed 's/ name //' | sed 's/"//g'`
                list_vlanname_debug_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
                list_vlanname=$list_vlanname_o
                list_vlanname_debug=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
                list_vlanname_invert=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -vw "interface vlan $vlanid" | grep -A1 'interface vlan' | grep -w name | sed 's/ name //'`
                   #Проверка, чтобы имя vlan не использовалось для другого vid.
                   #У Элтекс с этим есть баг, который может удалить существующий vlan
                   #На остальных вендорах vlan создастся, только ему не назначится имя. Это не критично.
                   if ( echo $list_vlanname_invert | grep -iw "$vlanname" &>/dev/null )
                    then echo -e "\033[31mИмя $vlanname уже используется ДЛЯ ДРУГОГО VLAN на $postfix $sw_name $ip \e[0m /// $list_vlanname_debug"; vlanname_fatal_error=true
                   fi
                    if [ "$vlanname" != "$vlanname_orig" ]
                        then
                         if ( echo $list_vlanname_invert | grep -iw "$vlanname_orig" &>/dev/null )
                          then echo -e "\033[31mИмя $vlanname_orig уже используется ДЛЯ ДРУГОГО VLAN на $postfix $sw_name $ip \e[0m /_/ $list_vlanname_debug_o"; vlanname_fatal_error=true
                         fi
                    fi
#echo $ip list_vlanname_invert $list_vlanname_invert
            fi
               #Проверяем выбранный vid и vlanname на наличие в конфигах
               if ( echo $list_vlan_final | grep -w $vlanid &>/dev/null )
                then echo -e "\033[33mVlan ID $vlanid уже создан на $postfix $sw_name $ip \e[0m"; vlanid_error=true
               fi
               if ( echo $list_vlanname | grep -iwE "^$vlanname" &>/dev/null )
                then echo -e "\033[33mИмя $vlanname уже используется на $postfix $sw_name $ip \e[0m /// $list_vlanname_debug"; vlanname_error=true
               fi
                if [ "$vlanname" != "$vlanname_orig" ]
                    then
                     if ( echo $list_vlanname_o | grep -iwE "^$vlanname_orig" &>/dev/null )
                      then echo -e "\033[33mИмя $vlanname_orig уже используется на $postfix $sw_name $ip \e[0m /_/ $list_vlanname_debug_o"; vlanname_error=true
                     fi
                fi
                  check_vid_all="$check_vid_all $ip"
    IFS=' ' #После окончания обработки возвращаем разделитель в режим по-умолчанию - в виде пробела. Иначе массив не будет обрабатываться
    done < $DEVICES

if [ -n "$vlanid_error" ]; then echo;echo -e "\033[43m\033[30mВнимание! Данный vlan найден в текущих настройках!\e[0m"; fi
if [ -n "$vlanname_error" ]; then echo;echo -e "\033[43m\033[30mОшибка! Данное имя уже занято!\e[0m"; fi
if [ -n "$vlanname_fatal_error" ]; then echo;echo -e "\033[41m\033[30mСерьезная ошибка! Данное имя уже используется для другого VID. На Элтекс VLAN не создастся. Подробная информация в документации. Исправьте ошибку и запустите скрипт повторно. До свидания.\e[0m"; exit; fi

if [[ -n "$vlanid_error" || -n "$vlanname_error" ]]; then echo; echo "Найдены ошибки. Рекомендуется выйти и разобраться в причинах дубликатов VID $vlanid $vlanname. Будете ли продолжать?"
read -p "Продолжить? y/n: " stage1
case "$stage1" in
    y) true ;;
    n) echo "До свидания.";exit  ;;
    *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;;
esac
fi

echo
echo -e "Откройте ссылку, чтобы ознакомится с примером зон \e[4mhttp://1.2.3.4\e[0m и выберите нужные зоны"
echo "Перечислите через запятую нужные зоны."
echo "1) Зона 1"
echo "2) Зона 2"
echo "3) Зона 3"
echo "4) Зона 4"
echo "5) Зона 5"
echo "Для отладки напишите debug, для подробного вывода напишите verbose"
echo
echo -e "\033[36mПримеры:\e[0m"
echo -e "\033[36m1 (прокладка только в пределах Зона 1) \e[0m"
echo -e "\033[36m1,4,debug (прокладка по зонам c выводом отладочной информации) \e[0m"
echo -e "\033[36m1,2,5 (прокладка только в пределах Зона 1,2,5) \e[0m"
echo
read -p ": " zones

echo "Вы желаете создать VID $vlanid \"$vlanname\" на коммутаторах:"
zones2=`echo $zones | tr ',' '\n'`
#echo ==zones== $zones
while read zone ; do
    if [[ "$zone" == "debug" ]]; then echo -e "${deb_c1}Вы выбрали режим отладки${deb_c2}"; debug=1; deb_o=""; fi
    if [[ "$zone" == "verbose" ]]; then echo -e "${deb_c1}Вы выбрали подробный режим [пока не работает]${deb_c2}"; debug=1; deb_o=""; fi
    if [[ "$zone" == "1" ]]; then echo "Зона 1"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "2" ]]; then echo "Зона 2"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "3" ]]; then echo "Зона 3"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "4" ]]; then echo "Зона 4"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "5" ]]; then echo "Зона 5"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "6" ]]; then echo "Зона 6"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "7" ]]; then echo "Зона 7"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "9" ]]; then echo "Зона 9"; zoneall="$zoneall $zone"; fi
    if [[ "$zone" == "0" ]]; then echo "Демо-версия"; zoneall="$zoneall $zone"; fi
done <<< "$zones2"
if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== zoneall=\"$zoneall\"${deb_c2}"; fi

              if ( echo $zoneall | grep -w 2 &>/dev/null )
                then
                  if ( ! echo $zoneall | grep -w 1 &>/dev/null )
                    then echo -e "\033[41m\033[30mВы выбрали \"Зона 2\" Зона 1. Не сделали ли вы ошибку? \e[0m"; echo При выборе зоны \"левый берег/кал.\" нужно также выбирать опорные узлы.
                  fi

              fi

read -p "Все верно? y/n: " stage2
case "$stage2" in
    y) true ;;
    n) echo "До свидания.";exit ;;
    *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;;
esac

#Заменяем разделитель пробел на перевод строки и удаляем пустую строку
zoneall=`echo $zoneall | tr ' ' '\n' | sed '/^$/d'`
#stop
#stop
############################################################
########### СОЗДАНИЕ VLAN НА НУЖНЫХ КОММУТАТОРАХ ###########
############################################################

#cat $DEVICES | sed -e '$a\#|#|Add_last_string_for_check_alt_port' |
    while read LINE || [ -n "$LINE" ]
    do
        arr=(`echo $LINE | sed "s/ /_/g" | sed "s/|/ /g"`);
        zone_switch=${arr[0]};
        type=${arr[1]};
        ip=${arr[2]};
        portlist=${arr[3]};#portlist=(`echo ${arr[3]} | sed "s/,/ /g"`);
        portcount=`echo ${arr[3]} | awk -F ',' '{print NF}'`;
        comm=${arr[4]};
        unset sw_name

        #Проверка указанных пользователем зон на соответствие
        while read chk_z ; do
         if [[ "$chk_z" == "$zone_switch" ]];
             then echo;echo;echo ================================================================================;echo
              if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Выбранная зона $chk_z найдена в строчке \"$LINE${deb_c2}\""; fi
              if [ $type == "0" ]; then
                  postfix=Dlink;
#read -p "Нажмите enter для продолжения..." s
                  sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g')
                  echo -e "\033[36mПодключение к $postfix $sw_name $ip \e[0m"
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/add_vlan-D-link.sh debug_expect $ip $vlanid $vlanname $portlist${deb_c2}"; fi
                  if ( ./sub-scripts/add_vlan-D-link.sh debug_expect $ip $vlanid $vlanname $portlist )
                   then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m"
                   else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m";
                  fi
              elif [ $type == "1" ]; then
                  postfix=Cisco;
              elif [ $type == "2" ]; then
                  postfix=CiscoNexus;
#read -p "Нажмите enter для продолжения..." s
###почему-то не отображает sw_name для CiscoNexus. Поразбираться позже.
                  sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
                  echo -e "\033[36mПодключение к $postfix $sw_name $ip \e[0m"
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/add_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid $vlanname${deb_c2}"; fi
                  if ( ./sub-scripts/add_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid $vlanname )
                   then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m"
                   else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m";
                  fi
              elif [ $type == "3" ]; then
                  postfix=Eltex;
#read -p "Нажмите enter для продолжения..." s
                  sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
                  portlist2=$(echo -e "$portlist" | sed 's/,/ /g')
                  echo -e "\033[36mПодключение к $postfix $sw_name $ip \e[0m"
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/add_vlan-Eltex.sh debug_expect $ip $vlanid $vlanname \"$portlist2\"${deb_c2}"; fi
                  if ( ./sub-scripts/add_vlan-Eltex.sh debug_expect $ip $vlanid $vlanname "$portlist2" )
                   then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m"
                   else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m";
                  fi
              fi
         fi
        done <<< "$zoneall"
    done < $DEVICES


echo;echo;echo
echo -e "\033[45;7mВсе vlan's созданы. Внимательно ознакомтесь с выводом всех комутаторов и убедитесь в отсутствии ошибок\e[0m";
sleep 2;echo
echo -e "Ваш выброр: Vlan ID=$vlanid, имя=$vlanname зоны=\033[44;7m$zones\e[0m";
echo -e "Быстрая команда\033[44;7m$0 $vlanid $vlanname\e[0m";
sleep 2;echo
read -p "Сохраняем конфигурации коммутаторов? y/n: " stage3
case "$stage3" in
    y) true ;;
    n) echo "До свидания.";exit ;;
    *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;;
esac

###############################################
########### СОХРАНЕНИЕ КОНФИГУРАЦИЙ ###########
###############################################

    while read LINE || [ -n "$LINE" ]
    do
        arr=(`echo $LINE | sed "s/ /_/g" | sed "s/|/ /g"`);
        zone_switch=${arr[0]};
        type=${arr[1]};
        ip=${arr[2]};
        portlist=${arr[3]};#portlist=(`echo ${arr[3]} | sed "s/,/ /g"`);
        portcount=`echo ${arr[3]} | awk -F ',' '{print NF}'`;
        comm=${arr[4]};
        unset sw_name

        #Проверка указанных пользователем зон на соответствие
        while read chk_z ; do
         if [[ "$chk_z" == "$zone_switch" ]];
             then
              if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Выбранная зона $chk_z найдена в строчке \"$LINE${deb_c2}\""; fi
              #Пропускать проверенные коммутаторы.
              if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== ip_save_all=$ip_save_all ${deb_c2}"; fi
              if ( echo $ip_save_all | grep $ip &>/dev/null ); then
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== IP $ip уже был сохранен ранее, пропускаем ...${deb_c2}"; fi
                  continue
              fi
              if [ $type == "0" ]; then
                  postfix=Dlink;
                  sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g')
                  ip_4oct=`echo $ip | awk -F '.' '{print $4}'`
                  echo;echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( snmpset -t 10 -r 0 -v2c -c snmp_community"$ip_4oct" $ip 1.3.6.1.4.1.171.12.1.2.18.4.0 i 4 )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
              elif [ $type == "1" ]; then
                  postfix=Cisco;
              elif [ $type == "2" ]; then
                  postfix=CiscoNexus;
                  sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip${deb_c2}"; fi
                  echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
              elif [ $type == "3" ]; then
                  postfix=Eltex;
                  sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
                  echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( snmpset -t 10 -r 0 -v2c -c $comm $ip 1.3.6.1.4.1.89.87.2.1.3.1 i 1 1.3.6.1.4.1.89.87.2.1.7.1 i 2 1.3.6.1.4.1.89.87.2.1.8.1 i 1 1.3.6.1.4.1.89.87.2.1.12.1 i 3 1.3.6.1.4.1.89.87.2.1.17.1 i 4 )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
              fi
          ip_save_all="$ip_save_all $ip"
         fi
        done <<< "$zoneall"
    done < $DEVICES
echo -e "\e[0m"; #Сброс форматирования

 

 

 

 

 

 

start-delete-vlan.sh

 

Цитата

#!/bin/bash

IFS=''
debug=0

list_eltex=$(cat /config_eltex)
list_dlink_all=$(cat /config_des /config_des3200C1 /config_dgs1100-06ME)
list_cisco=$(cat /config_cisco)
folder_cfg="/srv/tftp"

case "$1" in
        --help)
                echo "use $0 VlanID debug";exit
                ;;
        -h)
                echo "use $0 VlanID debug";exit
                ;;
        *)

                ;;
esac

/usr/bin/renice -n 20 -p $$ > /dev/null
cd /usr/libexec/vlans

vlanid=$1
#vlanname=$2

if [ "x$2" = "xdebug" ]
  then debug=1
  else debug=0
fi


#Цвета для дебага
deb_c1="\e[35m"
deb_c2="\e[0m"

echo -e "Быстрое удаление vlan со всех коммутаторов\e[0m"
#удаление временных файлов
/usr/bin/find /tmp/manual-delete-vlan* -mmin +60 -delete 2>/dev/null

echo -e "\033[44;7mВыгрузить актуальные конфигурации коммутаторов?\e[0m";
read -p "Выгрузить? y/n: " DL_conf
case "$DL_conf" in
    y) echo -e "\033[36m"; ./download_configs.sh; echo -e "[0m" ;;
    #n) echo "До свидания.";exit  ;;
    *) echo  ;;
esac

if [ "x$1" = "x" ]; then
echo -e "\033[44;7mВведите Vlan ID\e[0m";
read -p "Vlan ID: " vlanid
fi

if [[ "$vlanid" == 55 || "$vlanid" == 7 ]];then
 echo "Извините, удаление Vlan ID $vlanid запрещено. До свидания.";exit
fi

#D-link и Cisco Nexus не разрешает испотзование пробелов, однако Элтекс разрешают пробелы и нужно их заменить на _
# из-за этого в дальнейшем придется проверять vlan`ы 2 раза: с пробелами и с "_"
#vlanname_orig=$vlanname
#vlanname=`echo $vlanname | sed 's/ /_/g'`

### Функция поиска vlan ###
search_vid(){
       if ( echo $list_vlan_final | grep -w $vlanid &>/dev/null )
        then echo -e "\033[33m\nVlan ID $vlanid присутствует на $postfix $sw_name $ip \e[0m" /// $vlanname_current; vlanid_error=true
         if [ $debug == "1" ]
            then
            echo -e "${deb_c1}==DEBUG== Найден VID \c";
            echo -e "`echo $list_vlan_final | grep -w $vlanid`${deb_c2}"
         fi

        if [[ "$postfix" == "CiscoNexus" ]]; then list_CiscoNexus=`echo -e "$list_CiscoNexus\n$ip"`; fi
        if [[ "$postfix" == "Eltex" ]]; then list_Eltex=`echo -e "$list_Eltex\n$ip"`; fi
        if [[ "$postfix" == "Dlink" ]]; then list_Dlink=`echo -e "$list_Dlink\n$ip"`; fi


#         vender=postfix
#         list_vender=list_${!vender}

#         list_vender=list_${!vender}
#         list_vender=$(echo -e "$list_vender\n$ip")
#         echo list_vender $list_vender
       fi
}

### Функция очистки переменных ###
clear_var(){

unset postfix
unset sw_name
unset list_vlan
unset list_vlan_final
unset vlanname_current
unset vlanname_current_short
}

### Индикатор выполнения ###
progress_bar(){
if [ $debug == "0" ]; then echo -e "\033[36m.\e[0m\c"; fi
}


test(){
echo FUNCTIONNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
bash -lc "./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid"
}


##########################################
### Обработка коммутаторов Cisco Nexus ###
##########################################

while read ip || [ -n "$ip" ]
do
if (grep -i "hostname MSTP-Nexus" "$folder_cfg"/cisco/"$ip".conf &>/dev/null)
 then list_cisco_nexus=$(echo -e "$list_cisco_nexus\n$ip")
fi
done <<< "$list_cisco"
list_cisco_nexus=$(echo $list_cisco_nexus | sed '/^$/d')


while read ip || [ -n "$ip" ]
do
        postfix=CiscoNexus;
        sw_name=`grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'`
        list_vlan=`grep -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | sed 's/vlan //'`
        list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/\n/,/g')
        list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" }
        NR > 1  { print "\n" }
        NF > 1  { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next }
        { print $1 }'`
        vlanname_current=`grep -wEA1 "^vlan $vlanid" "$folder_cfg"/cisco/"$ip".conf | sed ':a;N;$!ba;s/\n//g'`
        vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'`
        #list_vlanname_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname_orig" | sed 's/  name //'`
        #list_vlanname_debug_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        #list_vlanname=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname" | sed 's/  name //'`
        #list_vlanname_debug=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi
        list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short")
        search_vid
        clear_var
        progress_bar
done <<< "$list_cisco_nexus"


####################################
### Обработка коммутаторов Eltex ###
####################################

while read ip || [ -n "$ip" ]
do
        postfix=Eltex;
        sw_name=`grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'`
        list_vlan=`sed -n '/^vlan database$/,/^exit$/p' "$folder_cfg"/Eltex/"$ip".conf | sed -e'/database/'d -e'/exit/'d | sed 's/ vlan //'`
        list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/ \n/,/g')
        list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" }
        NR > 1  { print "\n" }
        NF > 1  { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next }
        { print $1 }'`
        vlanname_current=`grep -wA1 "interface vlan $vlanid" "$folder_cfg"/Eltex/"$ip".conf | sed ':a;N;$!ba;s/\n//g'`
        vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'`
        #list_vlanname_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -w name | sed 's/ name //' | sed 's/"//g'`
        #list_vlanname_debug_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        #list_vlanname=$list_vlanname_o
        #list_vlanname_debug=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'`
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi
        list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short")
        search_vid
        clear_var
        progress_bar
done <<< "$list_eltex"


#####################################
### Обработка коммутаторов D-link ###
#####################################

while read ip || [ -n "$ip" ]
do
        postfix=Dlink;
        sw_name=`grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g'`
        list_vlan_final=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 5`
        vlanname_current=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -w "tag $vlanid"`
        vlanname_current_short=`echo $vlanname_current | awk -F ' ' '{print $3}'`
        #list_vlanname=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 3`
        #list_vlanname_debug=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -wi $vlanname`
        if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi
        list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short")
        search_vid
        clear_var
        progress_bar
done <<< "$list_dlink_all"

echo;echo
echo У данного VLAN найдены следующие имена:
echo $list_all_curvlanname | sed 's/ $//g' | sort -u | sed '/^$/d'

#удаляем пустые строки.
list_CiscoNexus=$(echo $list_CiscoNexus | sed '/^$/d');list_Eltex=$(echo $list_Eltex | sed '/^$/d');list_Dlink=$(echo $list_Dlink | sed '/^$/d')

if [ $debug == "1" ]; then
 echo -e "${deb_c1}"
 echo
 echo Список list_CiscoNexus
 echo $list_CiscoNexus
 echo
 echo Список list_Eltex
 echo $list_Eltex
 echo
 echo Список list_Dlink
 echo $list_Dlink
 echo
 echo -e "${deb_c2}"
fi

echo
echo -e "\033[43m\033[30mПриступить к удалению VLAN?\e[0m"
read -p "y/n: " stage2
case "$stage2" in
    y) true ;;
    n) echo "До свидания.";exit ;;
    *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;;
esac

############################################################
########### УДАЛЕНИЕ VLAN НА КОММУТАТОРАХ ##################
############################################################


#bash -lic "./sub-scripts/del_vlan-Eltex.sh debug_expect 1.2.3.103 200"
#exit

SUB_SCRIPT="/tmp/manual-delete-vlan$$.sh"
echo "#!/bin/bash" > $SUB_SCRIPT
echo >> $SUB_SCRIPT
echo "cd /usr/libexec/vlans" >> $SUB_SCRIPT
chmod +x $SUB_SCRIPT


### Обработка коммутаторов Cisco Nexus ###
if [[ -n "$list_CiscoNexus" ]]; then
while read ip
do
if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== echo CiscoNexus $ip ${deb_c2}"; fi
                  sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
#                  echo -e "\033[36mПодключение к CiscoNexus $sw_name $ip \e[0m"
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/del_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid${deb_c2}"; fi
#                  if ( ./sub-scripts/del_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid )
#                   then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m"
#                   else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m";
#                       fi
echo "./sub-scripts/del_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid" >> $SUB_SCRIPT
done <<< "$list_CiscoNexus"
fi


### Обработка коммутаторов Eltex ###
if [[ -n "$list_Eltex" ]]; then
while read ip
do
if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== echo Eltex $ip ${deb_c2}"; fi
                  sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
#                  echo -e "\033[36mПодключение к Eltex $sw_name $ip \e[0m"
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid${deb_c2}"; fi
#                  if ( ./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid )
#                   then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m"
#                   else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m";
#                  fi
echo "./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid" >> $SUB_SCRIPT
done <<< "$list_Eltex"
fi


### Обработка коммутаторов D-link ###
if [[ -n "$list_Dlink" ]]; then
while read ip
do
if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== echo Dlink $ip ${deb_c2}"; fi
                  sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g')
#                  echo -e "\033[36mПодключение к Dlink $sw_name $ip \e[0m"
                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/del_vlan-D-link.sh debug_expect $ip $vlanid${deb_c2}"; fi
#                  if ( ./sub-scripts/del_vlan-D-link.sh debug_expect $ip $vlanid )
#                   then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m"
#                   else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m";
#                  fi
echo "./sub-scripts/del_vlan-D-link.sh debug_expect $ip $vlanid" >> $SUB_SCRIPT
done <<< "$list_Dlink"
fi


#Запуск дочерних скриптов по удалению vlan
$SUB_SCRIPT
rm $SUB_SCRIPT


read -p "Сохраняем конфигурации коммутаторов? y/n: " saving
case "$saving" in
    y) true ;;
    n) echo "До свидания.";exit ;;
    *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;;
esac

### Сохранение конфигураций коммутаторов Cisco Nexus ###
#if [[ -n "$list_CiscoNexus" ]]; then
#while read ip
#do
#echo Saving CiscoNexus $ip
#                  sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
#                  if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip${deb_c2}"; fi
#                  echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
#                  if ( ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip )
#                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
#                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
#                  fi
#done <<< "$list_CiscoNexus"
#fi


### Сохранение конфигураций коммутаторов Eltex ###
if [[ -n "$list_Eltex" ]]; then
while read ip
do
echo Saving Eltex  $ip
                  comm=snmp_community
                  sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g')
                  echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( snmpset -t 10 -r 0 -v2c -c $comm $ip 1.3.6.1.4.1.89.87.2.1.3.1 i 1 1.3.6.1.4.1.89.87.2.1.7.1 i 2 1.3.6.1.4.1.89.87.2.1.8.1 i 1 1.3.6.1.4.1.89.87.2.1.12.1 i 3 1.3.6.1.4.1.89.87.2.1.17.1 i 4 )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
done <<< "$list_Eltex"
fi


### Сохранение конфигураций коммутаторов D-link ###
if [[ -n "$list_Dlink" ]]; then
while read ip
do
echo Saving Dlink $ip
                  sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g')
                  ip_4oct=`echo $ip | awk -F '.' '{print $4}'`
                  echo;echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m"
                  if ( snmpset -t 10 -r 0 -v2c -c snmp_community"$ip_4oct" $ip 1.3.6.1.4.1.171.12.1.2.18.4.0 i 4 )
                   then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m"
                   else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m";
                  fi
done <<< "$list_Dlink"
fi

##Добавить удаление на коммутатор DGS-1100-06/ME

 

 

 

 

 

sub-scripts/add_vlan-Cisco-Nexus.sh

 

Цитата

#!/usr/bin/expect -f

#Enable debug mode
exp_internal 0

if {[llength $argv] < 4} {
    puts "Usage: add_vlan-Cisco-Nexus.sh debug host vlanid vlanname";
    puts "Example: add_vlan-Cisco-Nexus.sh debug 1.2.3.0 200 test"
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set vlanid [lindex $argv 2]
set vlanname [lindex $argv 3]
set user "autologin"
set password "password"

spawn ssh $user@$host

log_user $l_u
log_user 0
set timeout 3
expect {
    "Are you sure you want to continue connecting (yes/no)" {
        send "yes\n"
        exp_continue
    }
    "Password" {
        send "$password\n"
log_user $l_u
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn ssh $user@$host
    expect {
    "Are you sure you want to continue connecting (yes/no)" {
        send "yes\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
log_user $l_u
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}
#выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером
log_user 0

expect "#" {send "\n"}
#Далее ожидания команд 1 сек достаточно
log_user $l_u
set timeout 1
expect "#" {send "configure terminal\n"}
expect "(config)#" {send "vlan $vlanid\n"}
expect "(config-vlan)#" {send "name $vlanname\n"}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "show vlan id $vlanid\n"}
expect "#" {send "exit\nexit\n"}

expect eof

exit 0

 

 

 

sub-scripts/add_vlan-D-link.sh

 

Цитата

#!/usr/bin/expect -f

#Enable debug mode
exp_internal 0

if {[llength $argv] < 5} {
    puts "Usage: ./add_vlan-D-link.sh debug host vlanid \"vlanname\" \"interfaces\"";
    puts "Example: ./add_vlan-D-link.sh debug 1.6.3.0 200 test 7,8,9,10"
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set vlanid [lindex $argv 2]
set vlanname [lindex $argv 3]
set ports [lindex $argv 4]
set user "autologin"
set password "password"
set attempt "1"

spawn telnet $host

log_user $l_u
set timeout 3
expect {
    "Username:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn telnet $host
expect {
    "Username:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}

#Проблема с авторизацией "authentication" приходит с задержкой
#Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией

set timeout 5
expect {
    "user#" {send "enable admin\n\n"}
    "authentication" {
        send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n"
        exit 10
        interact
    }
}
#Далее ожидания команд 1 сек достаточно
set timeout 1

#При оспользовании команды "create vlan $vlanname tag $vlanid\n" при существующем vlan команда будет отменена
#нужно отслеживать дубликат имени. Безопаснее двумя командами создавать VID, а затем добавлять имя.
expect "admin#" {send "create vlan vlanid $vlanid\n"}

#Если попало в настройки vlan, то все ок. Иначе выйти с ошибкой
#expect {
###Если имя уже существует, то vlan не создатся
####VLAN 556: Name new 555 is already used.
#    "The VLAN already exists" {
#        send_user "!_!_!_!!!NAME USED EROOR!!!_!_!_!\n"
#        exit 11
#    }
#    "admin#" {send "\n\n"}
#}

expect "admin#" {send "config vlan vlanid $vlanid name $vlanname\n"}
expect "admin#" {send "config vlan vlanid $vlanid add tagged $ports\n"}
expect "admin#" {send "show vlan vlanid $vlanid\n"}

#expect "#" {send "exit\nexit\n"}
expect "#" {send "logout\n"}

expect eof

exit 0

 

 

 

 

sub-scripts/add_vlan-Eltex.sh

 

Цитата

#!/usr/bin/expect -f

#Enable debug mode
exp_internal 0

if {[llength $argv] < 5} {
    puts "Usage: add_vlan-Eltex.sh debug host vlanid \"vlanname\" \"interfaces\"";
    puts "Example: add_vlan-Eltex.sh debug 1.2.3.0 200 \"test\" \"106 107\""
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set vlanid [lindex $argv 2]
set vlanname [lindex $argv 3]
set interfaces_array [lindex $argv 4]
set user "autologin"
set password "password"


spawn telnet $host

log_user $l_u
set timeout 1
expect {
    "User Name:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn telnet $host
expect {
    "User Name:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}
#выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером
#Проблема с авторизацией "authentication failed" приходит с задержкой
#Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией
log_user 0
set timeout 5
expect {
    ">" {send "enable\n\n"}
    "authentication failed" {
        send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n"
        exit 10
        interact
    }
}
#Далее ожидания команд 1 сек достаточно
log_user $l_u
set timeout 1

expect "#" {send "\n"}
expect "#" {send "configure terminal\n"}
expect "config" {send "vlan database\n"}
expect "config-vlan" {send "vlan $vlanid name $vlanname\n"}
#На элтексе если имя дублируется в другом VLAN, то vlan не создается
#Важно это отслеживать и выходить с ошибкой

expect {
#В секции прерывания скрипта при появлении ошибки при создании vlan. Важно выходить с кодом отличным от нуля, т.к. родительский скрипт считывает код ошибки
###Если имя уже существует, то vlan не создатся и скрипт прерывается
#Example VLAN 556: Name new 555 is already used.

    "is already used" {
        send_user "!_!_!_!!!NAME USED EROOR!!!_!_!_!\n"
        exit 11
    }
###Если проблема при создании vlan, то vlan не создатся и скрипт прерывается
#наример номер vlan из выхода из диапазона или название имни превышающее 32 символа
#Example % bad parameter value
    "bad parameter value" {
        send_user "!_!_!_!!!BAD PARAMETER ERROR!!!_!_!_!\n"
        exit 12
    }
# Данная значение нужно для того, чтобы ускорить выполнение, если нет ошиок
# Однако по неясной причине "bad parameter value" отображается с некоторой задержкой
# для правильного считывания ошибок нижняя строчка закомментирована. При безошибочном выполнении ожидается таймат 1 сек.
#    "config-vlan" {send "\n\n"}
}
expect "config-vlan" {send "\n\n"}

#Проверка массива
foreach int_index $interfaces_array {
#send_user "DEBUG Massiv $int_index \n"
if { $int_index eq 49 } { set int "gi1/0/1" }
if { $int_index eq 50 } { set int "gi1/0/2" }
if { $int_index eq 51 } { set int "gi1/0/3" }
if { $int_index eq 52 } { set int "gi1/0/4" }
if { $int_index eq 53 } { set int "gi1/0/5" }
if { $int_index eq 54 } { set int "gi1/0/6" }
if { $int_index eq 55 } { set int "gi1/0/7" }
if { $int_index eq 56 } { set int "gi1/0/8" }
if { $int_index eq 57 } { set int "gi1/0/9" }
if { $int_index eq 58 } { set int "gi1/0/10" }
if { $int_index eq 59 } { set int "gi1/0/11" }
if { $int_index eq 60 } { set int "gi1/0/12" }
if { $int_index eq 61 } { set int "gi1/0/13" }
if { $int_index eq 62 } { set int "gi1/0/14" }
if { $int_index eq 63 } { set int "gi1/0/15" }
if { $int_index eq 64 } { set int "gi1/0/16" }
if { $int_index eq 65 } { set int "gi1/0/17" }
if { $int_index eq 66 } { set int "gi1/0/18" }
if { $int_index eq 67 } { set int "gi1/0/19" }
if { $int_index eq 68 } { set int "gi1/0/20" }
if { $int_index eq 69 } { set int "gi1/0/21" }
if { $int_index eq 70 } { set int "gi1/0/22" }
if { $int_index eq 71 } { set int "gi1/0/23" }
if { $int_index eq 72 } { set int "gi1/0/24" }
if { $int_index eq 105 } { set int "te1/0/1" }
if { $int_index eq 106 } { set int "te1/0/2" }
if { $int_index eq 107 } { set int "te1/0/3" }
if { $int_index eq 108 } { set int "te1/0/4" }

#expect "#" {send "configure terminal\n"}
expect "config" {send "interface $int\n"}
expect "config-if" {send "switchport trunk allowed vlan add $vlanid\n"}
#send_user "DEBUG Massiv $int_index $int \n"
}

#expect "#" {send "exit\nexit\n"}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "show vlan tag $vlanid\n"}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "exit\nexit\n"}

expect eof

exit 0

 

 

 

 

 

 

sub-scripts/del_vlan-Cisco-Nexus.sh

Цитата

#!/usr/bin/expect -f

#Enable debug mode
exp_internal 0

if {[llength $argv] < 3} {
    puts "Usage: del_vlan-Cisco-Nexus.sh debug host vlanid";
    puts "Example: del_vlan-Cisco-Nexus.sh debug 1.2.3.0 200"
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set vlanid [lindex $argv 2]
set user "autologin"
set password "password"

spawn ssh $user@$host

log_user $l_u
log_user 0
set timeout 3
expect {
    "Are you sure you want to continue connecting (yes/no)" {
        send "yes\n"
        exp_continue
    }
    "Password" {
        send "$password\n"
log_user $l_u
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn ssh $user@$host
    expect {
    "Are you sure you want to continue connecting (yes/no)" {
        send "yes\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
log_user $l_u
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}
#выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером
log_user 0

expect "#" {send "\n"}
#Далее ожидания команд 1 сек достаточно
log_user $l_u
set timeout 1
expect "#" {send "show vlan id $vlanid\n"};sleep 1
expect "#" {send "show mac address-table vlan $vlanid\n"};sleep 1
#Если в список MAC адресов настолько большой, что предлагается постраничный вывод списка, то для безопасности срипт завершает работу и прерывается с ошибкой
#Возможно это рабочий vlan и произошла какая-то ошибка
#Для удаления vlan не должно быть много MAC адресов
expect {
  "More" {
     puts "\n\n!_!_!_!!!Dangerous!!! Script exiting...  there are a lot of mac addresses. For what reason are there many mac addresses?!!!_!_!_!\n"; exit 1
    }
  "a8:f9:4b" {
     puts "\n!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!\n"
    }
}
expect "#" {send "configure terminal\n"}
send_user "\n---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---\n\nWHEN FINISHED, TYPE \"!!!\" FOR RETURN\n\n"
expect "(config)#" {send "no vlan $vlanid==="; interact -o "!!!" return}; send "\n"
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "show vlan id $vlanid\n"}
expect "#" {send "exit\nexit\n"}


############
### Сделать проверку неуспешного удаления vlan
############


expect eof

exit 0

 

 

 

 

 

 

 

sub-scripts/del_vlan-D-link.sh

Цитата

#!/usr/bin/expect -f

#Enable debug mode
exp_internal 0

if {[llength $argv] < 3} {
    puts "Usage: ./del_vlan-D-link.sh debug host vlanid";
    puts "Example: ./del_vlan-D-link.sh debug 172.16.0.0 200";
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set vlanid [lindex $argv 2]
set vlanname [lindex $argv 3]
set ports [lindex $argv 4]
set user "autologin"
set password "password"
set attempt "1"

spawn telnet $host

log_user $l_u
set timeout 3
expect {
    "Username:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn telnet $host
expect {
    "Username:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}

#Проблема с авторизацией "authentication" приходит с задержкой
#Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией

set timeout 5
expect {
    "user#" {send "enable admin\n\n"}
    "authentication" {
        send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n"
        exit 10
        interact
    }
}
#Далее ожидания команд 1 сек достаточно
set timeout 1

expect "admin#" {send "show vlan vlanid $vlanid\n"}
expect "admin#" {send "show fdb vlanid $vlanid\n"}
# Для исправления вводятся пробелы. Может есть другой способ исправить?
############
### D-link выводит с задержкой сообщения.
### Перевод строки не помогает.
### Как это исправить?
############
expect "*" {send "\n"}
expect "*" {send "\n"}
expect "*" {send "\n"}

send_user "\n---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---\n\nWHEN FINISHED, TYPE \"!!!\" FOR RETURN\n\n"
send_user "Backspace - CTRL+H\n\n"
expect "admin#" {send "delete vlan vlanid $vlanid==="; interact -o "!!!" return}; send "\n"
expect "admin#" {send "show vlan vlanid $vlanid\n"}
expect "admin#" {send "logout\n"}

############
### Сделать проверку неуспешного удаления vlan
############

expect eof

exit 0

 

 

 

 

 

 

sub-scripts/del_vlan-Eltex.sh

Цитата

#!/usr/bin/expect -f

#Enable debug mode
exp_internal 0

if {[llength $argv] < 3} {
    puts "Usage: del_vlan-Eltex.sh debug host vlanid";
    puts "Example: del_vlan-Eltex.sh debug 1.2.3.0 200"
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set vlanid [lindex $argv 2]
set user "autologin"
set password "password"


spawn telnet $host

log_user $l_u
set timeout 3
expect {
    "User Name:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn telnet $host
expect {
    "User Name:" {
        send "$user\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}
#выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером
#Проблема с авторизацией "authentication failed" приходит с задержкой
#Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией
log_user 0
set timeout 5
expect {
    ">" {send "enable\n\n"}
    "authentication failed" {
        send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n"
        exit 10
        interact
    }
}
#Далее ожидания команд 1 сек достаточно
log_user $l_u
set timeout 1


expect "#" {send "show vlan tag $vlanid\n"};sleep 1
expect "#" {send "show mac address-table vlan $vlanid\n"};sleep 1
#Если в список MAC адресов настолько большой, что предлагается постраничный вывод списка, то для безопасности срипт завершает работу и прерывается с ошибкой
#Возможно это рабочий vlan и произошла какая-то ошибка
#Для удаления vlan не должно быть много MAC адресов
expect {
  "More" {
     puts "\n\n!_!_!_!!!Dangerous!!! Script exiting...  there are a lot of mac addresses. For what reason are there many mac addresses?!!!_!_!_!\n"; exit 1
    }
  "a8:f9:4b" {
     puts "\n!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!\n"
    }
}
expect "#" {send "configure terminal\n"}

send_user "\n---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---\n\nWHEN FINISHED, TYPE \"!!!\" FOR RETURN\n\n"
expect "config" {send "no vlan $vlanid==="; interact -o "!!!" return}; send "\n"
#expect "config" {send "no vlan $vlanid==="; interact}
expect "#" {send "\u001A"}
expect "#" {send "\u001A"}
expect "#" {send "show vlan tag $vlanid\n"}
expect "#" {send "exit\nexit\n"}


############
### Надо ли сделать проверку неуспешного удаления vlan ???
### Надо ли сделать проверку отсутствия vlan ???
############

#expect "config" {interact +++ return}
#expect "config" {send "vlan database\n"}
#expect "config-vlan" {send "vlan $vlanid name $vlanname\n"}
#На элтексе если имя дублируется в другом VLAN, то vlan не создается
#Важно это отслеживать и выходить с ошибкой
#expect {
###Если имя уже существует, то vlan не создатся
#Example VLAN 556: Name new 555 is already used.
#    "is already used" {
#        send_user "!_!_!_!!!NAME USED EROOR!!!_!_!_!\n"
#        exit 11
#    }
#    "config-vlan" {send "\n\n"}
#}

#expect "#" {send "exit\nexit\n"}


expect eof

exit 0

 

 

 

 

 

 

sub-scripts/wr_mem-Cisco-Nexus.sh

 

Цитата

#!/usr/bin/expect -f

exp_internal 0
if {[llength $argv] < 2} {
    puts "Usage: add_vlan-Cisco-Nexus.sh debug host";
    puts "Example: add_vlan-Cisco-Nexus.sh debug 1.2.3.0"
    exit 1;
}

set l_u "1"
set debug [lindex $argv 0]
set host [lindex $argv 1]
set user "autologin"
set password "password"

spawn ssh $user@$host

log_user $l_u
log_user 0
set timeout 3
expect {
    "Are you sure you want to continue connecting (yes/no)" {
        send "yes\n"
        exp_continue
    }
    "Password" {
        send "$password\n"
log_user $l_u
#        exp_continue
    }
    timeout {
        puts "Timed out...Attempt 2"
        set timeout 6
        spawn ssh $user@$host
    expect {
    "Are you sure you want to continue connecting (yes/no)" {
        send "yes\n"
        exp_continue
    }
    "Password*" {
        send "$password\n"
log_user $l_u
#        exp_continue
    }
    timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 }
  }
 }
}
#выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером
log_user 0

expect "#" {send "\n"}
#Далее ожидания команд 5 сек достаточно
log_user $l_u
expect "#" {send "copy running-config startup-config\n"}
set timeout 7
expect "Copy complete" {send "\n"}
expect "#" {send "exit\n"}
expect eof

exit 0

 

 

 

Технические аспекты

 

 

Элтекс MES

Цитата

Тема:    [](Ethernet Switches MES23xx) Запрос с сайта
Контактное лицо:    
Ответственный сотрудник:    
Комментарий:    Обсудили вопрос по телефону. Вариантов автоматизации настроек vlan всего 3:
1.    snmp
2.    gvrp
3.    при помощи скриптов


В документе «MES_configuration_and_monitoring_via_SNMP_4.0.16.5.pdf» есть возможность создавать vlanы по snmp запросу. Способ основывается на низкоуровневом формате битовых масок. Каждый snmp запрос распространяется на свою группу vlan 1-1024. Всего 4 группы. Запрос должен учитывать уже созданные vlan’ы. При ошибке в маске можно случайно удалить действующие vlan’ы. Способ очень сложный и опасный, т.к. можно задеть остальные vlan’ы. С помощью snmp запроса нельзя присваивать имя для vlan.


В будущую версию документации внесём пометку о том,что при добавлении нового vlan к уже имеющимся во vlan database нужно учитывать их битовую маску - конечный результат требуется вводить в виде битовой маски, состоящей из результата выполнения дизъюнкции (логическое "или") битовых масок. »

Snmp (не подходит, метод Элтекс с битовыми масками сложен и опасный, т.к. возможно удаление других vlan). В документе «MES_configuration_and_monitoring_via_SNMP_4.0.16.5.pdf» есть возможность создавать vlanы по snmp запросу. Способ основывается на низкоуровневом формате битовых масок. Каждый snmp запрос распространяется на свою группу vlan 1-1024. Всего 4 группы. Запрос должен учитывать уже созданные vlan’ы. При ошибке в маске можно случайно удалить действующие vlan’ы. Способ очень сложный и опасный, т.к. можно задеть остальные vlan’ы. С помощью snmp запроса нельзя присваивать имя для vlan.
Gvrp (не подходит, сложная  топология сети и разношерстное оборудование (Cisco, D-link) . Ранее уже был отрицательный опыт построения GVRP на D-link, реализованной на D-link. От этой технологии отказались в пользу статических VLAN из-за нестабильной работы GVRP при перестроении колец.)
при помощи скриптов (Единственно возможный вариант)

Выбран способ автоматизации telnet при помощи утилиты expect.
 

 

 

Баг на MES если имя дублируется.

Обнаружен баг в создании vlan, если имя дублируется. В таком случае vlan удаляется. 

Цитата

Здравствуйте, уважаемые разработчики.

Если во время создания vlan случайно указать имя (vlanname) vlan другого уже созданного vlan, то
а) если создаваемый vlan отсутствует, то он не создастся (на самом деле он создастся и удалится)
б) но если он существует (без имени или с другим именем), то он полностью УДАЛИТСЯ!!!!!!!!

 Команда "no vlan <2-4094>" при этом не вводилась. У нас на оборудовании много неподписанных vlan. Если во время актуализации при указании имени я случайно укажу имя другого существующего vlan, то мой vlan без имени полностью удалиться. 


name 4#sh vlan
...
444     test_vlan4         te1/0/1-4                                S         
555     test_vlan5         te1/0/1-4                                S         
...                        S         

name 4#conf t
name 4(config)#vlan database 
name 4(config-vlan)#vlan 555 name test_vlan4
VLAN 555: Name test_vlan4 is already used.
##########VLAN 555 уничтожился глобально и исчез со всех портов!!!!!!!!!!!!!!!!!!!!!#########
name 4(config-vlan)#do sh vlan tag 555
ПУСТО!!!!!!!!!!!!!!!!!

name 4#sh system 
System Description:                       MES2324 AC 28-port 1G/10G Managed Switch

name 4#sh version 
Active-image: flash://system/images/mes3300-4016-R2.ros
  Version: 4.0.16
  Commit: 30fac121
  Build: 2 (master)
  MD5 Digest: f85bf8ad2b9e899cf2988752fa1feca9
  Date: 13-Apr-2021
  Time: 11:42:37
 

 

 

 

D-link
У D-link есть удобный способ по SNMP
 

Цитата

snmpset -v2c -c ReadWriteSwitch148 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1.1.500 s new_vlan .1.3.6.1.2.1.17.7.1.4.3.1.2.500 x 00C0000000000000 .1.3.6.1.2.1.17.7.1.4.3.1.5.500 i 4;echo $?


snmpset -v2c -c ReadWriteSwitch148 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1.1.500 s newvlan .1.3.6.1.2.1.17.7.1.4.3.1.2.500 x fffffff000000000 .1.3.6.1.2.1.17.7.1.4.3.1.4.500 x 0000000000000000 .1.3.6.1.2.1.17.7.1.4.3.1.5.500 i 4


snmpwalk -v2c -c energy -On 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1

denis@ubuntu:~$ snmpwalk -v2c -c energy -On 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1 | grep 2088
.1.3.6.1.2.1.17.7.1.4.3.1.1.2088 = STRING: "Televizornaya1_1"
.1.3.6.1.2.1.17.7.1.4.3.1.2.2088 = Hex-STRING: C1 C0 00 00 00 00 00 00 
.1.3.6.1.2.1.17.7.1.4.3.1.3.2088 = Hex-STRING: 00 00 00 00 00 00 00 00 
.1.3.6.1.2.1.17.7.1.4.3.1.4.2088 = Hex-STRING: C0 00 00 00 00 00 00 00 
.1.3.6.1.2.1.17.7.1.4.3.1.5.2088 = INTEGER: 1


C1 C0
11000001 11000000


3.1.2.VID - tag
3.1.3.VID - fob (запрещенный)
3.1.4.VID - unt
3.1.5.VID - задача

Указание только 3.1.2.VID создает по-умолчанию тегированный порт. Если дополнительно указать 3.1.4.VID, то перечисленные порт(ы) станут нетегируемыми
задача:
1 изменение
4 создание
6 удаление
 

 

D-link Создание VLAN по SNMP

D-link Чтение информации о VLAN по SNMP

D-link Сохранение конфигурации коммутаторов по SNMP

 

Все очень удобно и работает прекрасно пока новый vlan отсутствует на оборудовании. Однако, если же на каком-то коммутаторе vlan уже существует, то  возникает проблема. Очень сложно автоматизировать процесс добавления магистральных портов. Требуется предварительный анализ текущих настроек, чтобы не удалить другие порты. Из-за сложности автоматизации этого процесса способ «snmp» не рассматривается.

Выбран способ автоматизации telnet при помощи утилиты expect.

 

 

 

 

Cisco Nexus
Пока не найден OID

 

How To Add, Modify, and Remove VLANs on a Catalyst Using SNMP

 

 

 

 

Ссылки

Ultimate Guide to VLAN Configuration and Management + Best Tools

VLAN Configuration and Troubleshooting

[MES] SNMP. Как на коммутаторе MES добавить порты в VLAN?

SNMP mes 2324f и VLAN

SNMP OID Vlan

Управление vlan на cisco через snmp

D-link Создание у управление VLAN по SNMP

Как управлять вланами по snmp на свичах доступа ?

DES-1210-28/ME - Проблемма с созданием VLAN'а через SNMP

Управление vlan на cisco через snmp

 

Изменено пользователем neperpbl3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Результат вывода ./check_settings.sh

Цитата

./check_settings.sh 3456
Проверка vlan

Vlan ID 3456 создан на CiscoNexus Nexus-Switch_name 192.168.0.4  /// vlan 3456  name NAMEEEE
.
Vlan ID 3456 создан на CiscoNexus Nexus-Switch_name 192.168.0.5  /// vlan 3456  name NAMEEEE
.
Vlan ID 3456 создан на CiscoNexus Nexus-Switch_name 192.168.0.6  /// vlan 3456  name NAMEEEE
........
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.64  /// interface vlan 3456 name NAMEEEE
.....
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.73  /// interface vlan 3456 name NAMEEEE
...
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.8  /// interface vlan 3456 name NAMEEEE
.
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.81  /// interface vlan 3456 name NAMEEEE
...
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.85  /// interface vlan 3456 name NAMEEEE
..
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.87  /// interface vlan 3456 name NAMEEEE
...
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.92  /// interface vlan 3456 name NAMEEEE
.
Vlan ID 3456 создан на Eltex Switch_name 192.168.0.94  /// interface vlan 3456 name NAMEEEE
...................................................................................................
Обнаружены следующие имена:
NAMEEEE
 

 

 

Цитата

./check_settings.sh 2345

..........
Vlan ID 2345 создан на Eltex Switch_name 192.168.0.104  /// interface vlan 2345 name NAMEEEE22
..............................................................................................
Vlan ID 2345 создан на Eltex Switch_name 192.168.0.94  /// interface vlan 2345 name NAMEEEE22
...................................................................................................
Обнаружены следующие имена:
NAMEEEE22
 

 

 

Результат вывода ./sstart-add-vlan.sh

 

Цитата

./start-add-vlan.sh 555
Быстрое создание vlan 


Далее нужно создать описание vlan'a
Укажите кратко все точки включения и индивидуальные особенности. Не указывайте Vlan ID. Максимально 32 символа.

Введите название vlan'a
Vlan name: testing

Вы выбрали Vlan ID=555, имя=testing

Проводится анализ на наличие Vlan ID 555 коммутаторов
...................................................
Перечислите через запятую нужные зоны.
1) Зона 1
2) Зона 2
3) Зона 3
Для отладки напишите debug, для подробного вывода напишите verbose

Примеры:
1 (Зона 1)
1,2 (Зона 1,2)

: 1
Вы желаете создать VID 555 "testing" на коммутаторах:
Зона 1
Все верно? y/n: y


================================================================================

Подключение к CiscoNexus Nexus-hostname 192.168.0.88
spawn ssh autologin@192.168.0.88

Nexus-hostname# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Nexus-hostname(config)# vlan 555
Nexus-hostname(config-vlan)# name testing
Nexus-hostname(config-vlan)#
Nexus-hostname#
Nexus-hostname# show vlan id 555

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
555  testing                          active    Po1, Eth1/1, Eth1/2, Eth1/11
                                                Eth1/44, Eth1/45, Eth1/46
                                                Eth1/47, Eth1/48

VLAN Type         Vlan-mode
---- -----        ----------
555  enet         CE

Remote SPAN VLAN
----------------
Disabled

Primary  Secondary  Type             Ports
-------  ---------  ---------------  -------------------------------------------

Nexus-hostname# exit
Connection to 192.168.0.88 closed.
Команды для Nexus-hostname введены


================================================================================

Подключение к Eltex hostname 192.168.0.105
spawn telnet 192.168.0.105
Trying 192.168.0.105...
Connected to 192.168.0.105.
Escape character is '^]'.


User Name:autologin
Password:enable
hostname#21-Mar-2023 17:10:26 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.105, none ACCEPTED.

hostname#configure terminal
hostname(config)#vlan database
hostname(config-vlan)#vlan 555 name testing
hostname(config-vlan)#
hostname(config-vlan)#interface te1/0/2
hostname(config-if)#switchport trunk allowed vlan add 555
hostname(config-if)#21-Mar-2023 17:10:28 %LINK-I-Up:  Vlan 555
interface te1/0/3
hostname(config-if)#switchport trunk allowed vlan add 555
hostname(config-if)#
hostname#
hostname#
hostname#
hostname#
hostname#
hostname#eConnection closed by foreign host.
Команды для hostname введены


================================================================================

Подключение к CiscoNexus Nexus-hostname 192.168.0.5
spawn ssh autologin@192.168.0.5

Nexus-hostname# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Nexus-hostname(config)# vlan 555
Nexus-hostname(config-vlan)# name testing
Nexus-hostname(config-vlan)#
Nexus-hostname#
Nexus-hostname# show vlan id 555

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
555  testing                          active    Eth1/1, Eth1/39, Eth1/42
                                                Eth1/43, Eth1/46, Eth1/47
                                                Eth1/48

VLAN Type         Vlan-mode
---- -----        ----------
555  enet         CE

Remote SPAN VLAN
----------------
Disabled

Primary  Secondary  Type             Ports
-------  ---------  ---------------  -------------------------------------------

Nexus-hostname# exit
Connection to 192.168.0.5 closed.
Команды для Nexus-hostname введены


================================================================================

Подключение к Eltex hostname 192.168.0.9
spawn telnet 192.168.0.9
Trying 192.168.0.9...
Connected to 192.168.0.9.
Escape character is '^]'.


User Name:aTimed out...Attempt 2
spawn telnet 192.168.0.9
Trying 192.168.0.9...
Connected to 192.168.0.9.
Escape character is '^]'.


User Name:autologin
Password:enable
hostname#21-Mar-2023 17:10:05 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.9, none ACCEPTED.

hostname#configure terminal
hostname(config)#vlan database
hostname(config-vlan)#vlan 555 name testing
hostname(config-vlan)#
hostname(config-vlan)#interface te1/0/2
hostname(config-if)#switchport trunk allowed vlan add 555
hostname(config-if)#21-Mar-2023 17:10:06 %LINK-I-Up:  Vlan 555
interface te1/0/3
hostname(config-if)#switchport trunk allowed vlan add 555
hostname(config-if)#
hostname#
hostname#
hostname#
hostname#show vlan tag 555
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
555       testing          te1/0/2-3                                S

hostname#
hostname#
hostname#eConnection closed by foreign host.
Команды для hostname введены


================================================================================

Подключение к Eltex hostname 192.168.0.34
spawn telnet 192.168.0.34
Trying 192.168.0.34...
Connected to 192.168.0.34.
Escape character is '^]'.


User Name:autologin
Password:enable
hostname#21-Mar-2023 17:09:01 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.34, none ACCEPTED.

hostname#configure terminal
hostname(config)#vlan database
hostname(config-vlan)#vlan 555 name testing
hostname(config-vlan)#
hostname(config-vlan)#interface te1/0/3
hostname(config-if)#switchport trunk allowed vlan add 555
hostname(config-if)#21-Mar-2023 17:09:03 %LINK-I-Up:  Vlan 555
interface te1/0/4
hostname(config-if)#switchport trunk allowed vlan add 555
hostname(config-if)#
hostname#
hostname#
hostname#
hostname#show vlan tag 555
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
555       testing          te1/0/3-4                                S

hostname#
hostname#
hostname#
hostname#eConnection closed by foreign host.
Команды для hostname введены

Все vlan's созданы. Внимательно ознакомтесь с выводом всех комутаторов и убедитесь в отсутствии ошибок


Ваш выброр: Vlan ID=555, имя=testing зоны=1
Быстрая команда./start-add-vlan.sh 555 testing

Сохраняем конфигурации коммутаторов? y/n: y

Сохраняем конфигурацию CiscoNexus Nexus-hostname 192.168.0.88

spawn ssh autologin@192.168.0.88

Nexus-hostname# copy running-config startup-config
[########################################] 100%
Copy complete, now saving to disk (please wait)...

Copy complete.
Nexus-hostname#
Nexus-hostname# exit
Connection to 192.168.0.88 closed.
Конфигурация CiscoNexus Nexus-hostname 192.168.0.88 сохранена

Сохраняем конфигурацию Eltex hostname 192.168.0.105

iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2
iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3
iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4
Конфигурация Eltex hostname 192.168.0.105 сохранена

Сохраняем конфигурацию CiscoNexus Nexus-hostname 192.168.0.5

spawn ssh autologin@192.168.0.5

Nexus-hostname# copy running-config startup-config
[########################################] 100%
Copy complete, now saving to disk (please wait)...

Copy complete.
Nexus-hostname#
Nexus-hostname# exit
Connection to 192.168.0.5 closed.
Конфигурация CiscoNexus Nexus-hostname 192.168.0.5 сохранена

Сохраняем конфигурацию Eltex hostname 192.168.0.9

iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2
iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3
iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4
Конфигурация Eltex hostname 192.168.0.9 сохранена

Сохраняем конфигурацию Eltex hostname 192.168.0.34

iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2
iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3
iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4
Конфигурация Eltex hostname 192.168.0.34 сохранена

root@nagios:/usr/libexec/vlans#
 

 

 

 

 

Результат вывода ./start-delete-vlan.sh

 

Цитата

./start-delete-vlan.sh 3456
Быстрое удаление vlan со всех коммутаторов
Выгрузить актуальные конфигурации коммутаторов?
Выгрузить? y/n: n

........
Vlan ID 3456 создан на Eltex switch_name 192.168.0.104  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 создан на Eltex switch_name 192.168.0.105  ///
........
Vlan ID 3456 создан на Eltex switch_name 192.168.0.120  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 создан на Eltex switch_name 192.168.0.121  /// interface vlan 3456 name NAMEE
...........................
Vlan ID 3456 создан на Eltex switch_name 192.168.0.178  /// interface vlan 3456 name NAMEE
................
Vlan ID 3456 создан на Eltex switch_name 192.168.0.31  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 создан на Eltex switch_name 192.168.0.34  /// interface vlan 3456 name NAMEE
.........
Vlan ID 3456 создан на Eltex switch_name 192.168.0.47  /// interface vlan 3456 name NAMEE
..
Vlan ID 3456 создан на Eltex switch_name 192.168.0.49  /// interface vlan 3456 name NAMEE
.........
Vlan ID 3456 создан на Eltex switch_name 192.168.0.64  /// interface vlan 3456 name NAMEE
.....
Vlan ID 3456 создан на Eltex switch_name 192.168.0.73  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 создан на Eltex switch_name 192.168.0.8  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 создан на Eltex switch_name 192.168.0.81  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 создан на Eltex switch_name 192.168.0.85  /// interface vlan 3456 name NAMEE
..
Vlan ID 3456 создан на Eltex switch_name 192.168.0.87  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 создан на Eltex switch_name  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 создан на Eltex switch_name 192.168.0.94  /// interface vlan 3456 name NAMEE
...................................................................................................
Обнаружены следующие имена:
NAMEE

 ./check_settings.sh 2345
Проверка vlan

..........
Vlan ID 2345 создан на Eltex switch_name 192.168.0.104  /// interface vlan 2345 name NAMEE
..............................................................................................
Vlan ID 2345 создан на Eltex switch_name 192.168.0.94  /// interface vlan 2345 name NAMEE
...................................................................................................
Обнаружены следующие имена:
NAMEE
 ^C
 ^C
 ^C
 ^C
 ^C
 ^C
 ^C
 ^C
 ./start-delete-vlan.sh 3456
Быстрое удаление vlan со всех коммутаторов

Выгрузить актуальные конфигурации коммутаторов?
Выгрузить? y/n: n


Vlan ID 3456 присутствует на CiscoNexus Nexus-name 192.168.0.4  /// vlan 3456  name NAMEE
.
Vlan ID 3456 присутствует на CiscoNexus Nexus-name 192.168.0.5  /// vlan 3456  name NAMEE
.
Vlan ID 3456 присутствует на CiscoNexus Nexus-name 192.168.0.6  /// vlan 3456  name NAMEE
........
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.104  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.105  ///
........
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.120  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.121  /// interface vlan 3456 name NAMEE
...........................
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.178  /// interface vlan 3456 name NAMEE
................
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.31  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.34  /// interface vlan 3456 name NAMEE
.........
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.47  /// interface vlan 3456 name NAMEE
..
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.49  /// interface vlan 3456 name NAMEE
.........
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.64  /// interface vlan 3456 name NAMEE
.....
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.73  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.8  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.81  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.85  /// interface vlan 3456 name NAMEE
..
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.87  /// interface vlan 3456 name NAMEE
...
Vlan ID 3456 присутствует на Eltex switch_name  /// interface vlan 3456 name NAMEE
.
Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.94  /// interface vlan 3456 name NAMEE
...................................................................................................

У данного VLAN найдены следующие имена:
NAMEE

Приступить к удалению VLAN?
y/n: y
spawn ssh autologin@192.168.0.4

Nexus-name# show vlan id 3456

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
3456  NAMEE   active    Po1, Eth1/1, Eth1/2, Eth1/11
                                                Eth1/44, Eth1/45, Eth1/46
                                                Eth1/47, Eth1/48

VLAN Type         Vlan-mode
---- -----        ----------
3456  enet         CE

Remote SPAN VLAN
----------------
Disabled

Primary  Secondary  Type             Ports
-------  ---------  ---------------  -------------------------------------------

Nexus-name# show mac address-table vlan 3456
Legend:
        * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
        age - seconds since last seen,+ - primary entry using vPC Peer-Link,
        (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan
   VLAN     MAC Address      Type      age     Secure NTFY Ports
---------+-----------------+--------+---------+------+----+------------------
*  3456     00a6.caea.ebff   dynamic  0         F      F    Eth1/48
Nexus-name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Nexus-name(config)# no vlan 3456
Nexus-name(config)#
Nexus-name(config)#
Nexus-name#
Nexus-name# show vlan id 3456
VLAN 3456 not found in current VLAN database


Nexus-name# exit
Connection to 192.168.0.4 closed.
spawn ssh autologin@192.168.0.5

Nexus-name# show vlan id 3456

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
3456  NAMEE   active    Eth1/1, Eth1/39, Eth1/42
                                                Eth1/43, Eth1/45, Eth1/46
                                                Eth1/47, Eth1/48

VLAN Type         Vlan-mode
---- -----        ----------
3456  enet         CE

Remote SPAN VLAN
----------------
Disabled

Primary  Secondary  Type             Ports
-------  ---------  ---------------  -------------------------------------------

Nexus-name# show mac address-table vlan 3456
Legend:
        * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
        age - seconds since last seen,+ - primary entry using vPC Peer-Link,
        (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan
   VLAN     MAC Address      Type      age     Secure NTFY Ports
---------+-----------------+--------+---------+------+----+------------------
*  3456     00a6.caea.ebff   dynamic  0         F      F    Eth1/1
Nexus-name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Nexus-name(config)# no vlan 3456
Nexus-name(config)#
Nexus-name(config)#
Nexus-name#
Nexus-name# show vlan id 3456
VLAN 3456 not found in current VLAN database


Nexus-name# exit
Connection to 192.168.0.5 closed.
spawn ssh autologin@192.168.0.6

Nexus-name# show vlan id 3456

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
3456  NAMEE   active    Eth1/1, Eth1/44, Eth1/46
                                                Eth1/47, Eth1/48

VLAN Type         Vlan-mode
---- -----        ----------
3456  enet         CE

Remote SPAN VLAN
----------------
Disabled

Primary  Secondary  Type             Ports
-------  ---------  ---------------  -------------------------------------------

Nexus-name# show mac address-table vlan 3456
Legend:
        * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
        age - seconds since last seen,+ - primary entry using vPC Peer-Link,
        (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan
   VLAN     MAC Address      Type      age     Secure NTFY Ports
---------+-----------------+--------+---------+------+----+------------------
*  3456     00a6.caea.ebff   dynamic  0         F      F    Eth1/48
Nexus-name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Nexus-name(config)# no vlan 3456
Nexus-name(config)#
Nexus-name(config)#
Nexus-name#
Nexus-name# show vlan id 3456
VLAN 3456 not found in current VLAN database


Nexus-name# exit
Connection to 192.168.0.6 closed.
spawn telnet 192.168.0.104
Trying 192.168.0.104...
Connected to 192.168.0.104.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:01:33 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.104, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456  name gi1/0/9,gi1/0/24,                            S
       name        te1/0/4

switch_name#show mac address-table vlan 3456

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    gi1/0/9    dynamic

switch_name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456
switch_name(config)#21-Mar-2023 13:01:40 %LINK-W-Down:  Vlan 3456

switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#spawn telnet 192.168.0.105
Trying 192.168.0.105...
Connected to 192.168.0.105.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:04:34 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.105, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456          -             te1/0/2-4                                S

switch_name#show mac address-table vlan 3456

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    te1/0/2    dynamic

switch_name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456

switch_name(config)#
switch_name#
switch_name#show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#spawn telnet 192.168.0.120
Trying 192.168.0.120...
Connected to 192.168.0.120.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:05:41 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.120, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456  name  gi1/0/24,te1/0/4                            S
       name

switch_name#show mac address-table vlan 3456
Flags: I - Internal usage VLAN
Aging time is 300 sec

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    te1/0/4    dynamic

switch_name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456
switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#eConnection closed by foreign host.
spawn telnet 192.168.0.121
Trying 192.168.0.121...
Connected to 192.168.0.121.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:06:37 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.121, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456  name     te1/0/1-3                                S
       name

switch_name#show mac address-table vlan 3456

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    te1/0/1    dynamic
    3456        e4:5a:d4:7a:cf:5c    te1/0/1    dynamic

switch_name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456
switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#eConnection closed by foreign host.
spawn telnet 192.168.0.178
Trying 192.168.0.178...
Connected to 192.168.0.178.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:06:54 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.178, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456  name     te1/0/1-4                                S
       name

switch_name#show mac address-table vlan 3456

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    te1/0/4    dynamic
    3456        a8:f9:4b:30:bd:9a    te1/0/4    dynamic
    3456        a8:f9:4b:30:e6:dc    te1/0/4    dynamic
    3456        e4:5a:d4:7a:cf:5c    te1/0/4    dynamic

switch_name#
!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!


---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456
switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#spawn telnet 192.168.0.31
Trying 192.168.0.31...
Connected to 192.168.0.31.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:06:44 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.31, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456  name     te1/0/3-4                                S
       name

switch_name#show mac address-table vlan 3456

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    te1/0/4    dynamic
    3456        a8:f9:4b:30:12:59    te1/0/4    dynamic
    3456        a8:f9:4b:30:bd:9a    te1/0/4    dynamic
    3456        a8:f9:4b:ff:4a:5b    te1/0/4    dynamic
    3456        e4:5a:d4:7a:cf:5c    te1/0/4    dynamic

switch_name#
!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!


---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456===


User Name:autologin
Password:enable
switch_name#21-Mar-2023 12:59:50 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.81, none ACCEPTED.
show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
3456  name     te1/0/1-4                                S
       name

switch_name#show mac address-table vlan 3456
Flags: I - Internal usage VLAN
Aging time is 300 sec

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    3456        00:a6:ca:ea:eb:ff    te1/0/2    dynamic
    3456        a8:f9:4b:30:12:59    te1/0/2    dynamic
    3456        a8:f9:4b:30:bd:9a    te1/0/2    dynamic
    3456        e4:5a:d4:7a:cf:5c    te1/0/2    dynamic

switch_name#
!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!


---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 3456
switch_name(config)#21-Mar-2023 12:59:57 %LINK-W-Down:  Vlan 3456

switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 3456
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#eConnection closed by foreign host.

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#eConnection closed by foreign host.
Сохраняем конфигурации коммутаторов? y/n: ^C

 ./start-delete-vlan.sh 2345
Быстрое удаление vlan со всех коммутаторов
 

Выгрузить актуальные конфигурации коммутаторов?
Выгрузить? y/n: n

..........
Vlan ID 2345 присутствует на Eltex switch_name 192.168.0.104  /// interface vlan 2345 name NAMEE
..............................................................................................
Vlan ID 2345 присутствует на Eltex switch_name 192.168.0.94  /// interface vlan 2345 name NAMEE
...................................................................................................

У данного VLAN найдены следующие имена:
NAMEE

Приступить к удалению VLAN?
y/n: y
spawn telnet 192.168.0.104
Trying 192.168.0.104...
Connected to 192.168.0.104.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:06:42 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.104, none ACCEPTED.
show vlan tag 2345
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
2345  KrasSet-KTS-for-T  gi1/0/1,gi1/0/9                             S
          elezon

switch_name#show mac address-table vlan 2345

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------

switch_name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 2345
switch_name(config)#21-Mar-2023 13:06:47 %LINK-W-Down:  Vlan 2345

switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 2345
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#eConnection closed by foreign host.
spawn telnet 192.168.0.94
Trying 192.168.0.94...
Connected to 192.168.0.94.
Escape character is '^]'.


User Name:autologin
Password:enable
switch_name#21-Mar-2023 13:09:42 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination  192.168.0.94, none ACCEPTED.
show vlan tag 2345
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------
2345  KrasSet-KTS-for-T    gi1/0/23-24,                              S
          elezon            te1/0/2

switch_name#show mac address-table vlan 2345

    Vlan          Mac Address         Port       Type
------------ --------------------- ---------- ----------
    2345        64:d1:54:8c:9d:26    gi1/0/23   dynamic

switch_name#
---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---

WHEN FINISHED, TYPE "!!!" FOR RETURN

configure terminal
switch_name(config)#no vlan 2345
switch_name(config)#21-Mar-2023 13:09:46 %LINK-W-Down:  Vlan 2345

switch_name(config)#
switch_name(config)#
switch_name#
switch_name#show vlan tag 2345
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by
---- ----------------- ------------------ ------------------ ----------------

switch_name#eConnection closed by foreign host.
Сохраняем конфигурации коммутаторов? y/n: y
Saving Eltex 192.168.0.104

Сохраняем конфигурацию  switch_name 192.168.0.104

iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2
iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3
iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4
Конфигурация  switch_name 192.168.0.104 сохранена
Saving Eltex 192.168.0.94

Сохраняем конфигурацию  switch_name 192.168.0.94

iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2
iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1
iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3
iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4
Конфигурация  switch_name 192.168.0.94 сохранена
 

 

Изменено пользователем neperpbl3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 2013 я явно писал, что expect по боку. Но вы не читали..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну дык а задача-то решилась? Удалось добавить влан в транк?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.