Skip to end of metadata
Go to start of metadata

(Canned BeefNOC-1429)

Есть у меня в использовании несколько коммутаторов DLink DGS-3100-24TG.

Они чуть более исключительные, чем остальные DES-DGS, и для них сделан отдельный профиль DGS3100.

Я допилил для указанного профиля обработку портчэналов, доработка коснулась скриптов get_portchannel и get_interfaces.

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

В NOC'е для этого реализован механизм работы с "тушенкой", возможность собрать данные с коммутатора и затем тестировать работу скриптов в отсутствии самого железа.

Обновим "тушенку" из публичного репо:

noc@noc:/opt/noc$ ./noc beef --pull
[sa_public]
pulling from https://bitbucket.org/nocproject/noc-sa-beef-public
searching for changes
no changes found

Тестируем скрипты:

noc@noc:/opt/noc$ ./noc test --beef-filter=DLink.DGS3100.get_portchannel noc.stop
Ran 0 tests in 0.000s
OK
noc@noc:/opt/noc$ ./noc test --beef-filter=DLink.DGS3100.get_interfaces noc.stop
Ran 0 tests in 0.000s
OK

Ноль тестов? Проверяем, есть ли "тушенка" для наших скриптов.

Данные лежат в /opt/noc/local/

noc@noc:/opt/noc/local/repos/sa/sa_public/DLink/DGS3100$ ls -l
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_chassis_id
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_dom_status
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_interface_status
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_lldp_neighbors
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_mac_address_table
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_version
drwxrwxr-x 2 noc noc 4096 Oct 20 14:41 get_vlans

Видим, что для get_portchannel и get_interfaces нет каталогов.

Значит сделаем локальный репо и протестируем на своих данных.

Пишем где будет наш репо:

etc/beef.conf

[my_repo]
enabled = true
type = sa
private = true
repo = /srv/noc/my_repo

Проверяем:

noc@noc:/opt/noc$ ./noc beef --list-repo
E P T  Name                 Repo
+ N sa sa_public            https://bitbucket.org/nocproject/noc-sa-beef-public
+ N sa my_repo              /srv/noc/my_repo

Готовим "тушенку":

./noc debug-script get_portchannel router1 -o output.json
./noc debug-script get_interfaces  router1 -o output.json
 я делал это так

(DLink DGS-3100 — предварительно сделанный селектор)

 

./noc shell
from noc.sa.models import *
SELECTOR = "DLink DGS-3100"
mos = ManagedObjectSelector.objects.filter(name=SELECTOR)[0]
if mos is not None:
    for m in mos.managed_objects:
        #print m.name, m.platform, m.get_attr("version","")
        txt  = "./noc debug-script get_portchannel " 
        txt += m.name + " -o /home/noc/" 
        txt += m.name.split(".")[0] + "_get_portchannel_" 
        txt += m.get_attr("version","") + ".json"
        print txt
if mos is not None:
    for m in mos.managed_objects:
        txt  = "./noc debug-script get_interfaces " 
        txt += m.name + " -o /home/noc/" 
        txt += m.name.split(".")[0] + "_get_interfaces_" 
        txt += m.get_attr("version","") + ".json"
        print txt
quit()

получаю строки вида:
./noc debug-script get_portchannel router1 -o /home/noc/s2-5-8_get_portchannel_3.60.44.json
./noc debug-script get_interfaces router1 -o /home/noc/s2-5-8_get_interfaces_3.60.44.json

затем кучей вываливаю их в консоль и через некоторое время получаю "тушенку" в /home/noc/

 


Делаем каталоги  get_portchannel и get_interfaces в /srv/noc/my_repo, копируем в них полученные файлы json. (json в репо помещается не совсем так, буду корректировать)

Тестируем на наших данных:

noc@noc:/opt/noc$ ./noc test --beef=/srv/noc/my_repo/ noc.stop
Ran 28 tests in 0.014s
OK

Или так:

./noc test --beef=/srv/noc/my_repo/ --beef-filter=DLink.DGS3100.get_portchannel noc.stop
./noc test --beef=/srv/noc/my_repo/ --beef-filter=DLink.DGS3100.get_interfaces noc.stop

Или так, на всей доступной тушенке: и нашей и публичной:

./noc test --beef-filter=DLink.DGS3100.get_portchannel noc.stop
./noc test --beef-filter=DLink.DGS3100.get_interfaces noc.stop

 

Ура, скрипты корректно работают на всех DGS-3100, которые есть у меня в NOC`е.

 

P.S.

Бывает, что "test" ругается на данные, а мы видим, что скрипт корректно отдает данные. В моем случае ругалось на ответ скрипта "[]".

Корректируем данные так:

./noc test --beef=/srv/noc/my_repo/ --fixed-beef-base=/srv/noc/fixed-beef yes

в /srv/noc/fixed-beef будут сформированы файлы, в которых найдена и поправлена ошибка. Копируем эти файлы в репо (нужно угадать какие файлы были ошибочные) и снова тестируемся.


Файлы "тушенки" отправляем на beef@nocproject.org и если все корректно, то их разместят в публичном репо.

 

 

1 Comment

  1. Unknown User (tsergey) AUTHOR

    похоже, что я не до конца понимаю как работает "тест"

    http://habrahabr.ru/post/121162/