Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Типичная ситуация которая возникает при запуске в эксплуатацию NOC - добавление новых объектов МО в SA когда объектов в нём нет и автоматическое добавление замонтированного оборудования в процессе эксплуатации сети.

Я не умею программировать, поэтому задачу решал "в лоб" с использованием подручных инструментов:

  1. nmap
  2. bash
  3. команды ./noc csv-import sa.managedobject .....

у NOC есть возможность из консоли импорта специально сформированного csv файла с информацией о объектах МО. Основная цель скрипта - сформировать этот файл и передать его на импорт в систему.

Алгоритм действий такой:

  1. считать из параметров скрипта сканируемый диапазон  IP
  2. передать их nmap  и вывести результат сканирования в файл.
  3. построчно прочитать данный файл и провести проверку через psql , есть ли такой IP в объектах МО
  4. если объекта нет - вывести в текстовый файл специально сформированную строку
  5. сформированный .cvs файл передать на импорт в NOC и отправить на почту для информирования

Обратите внимание на пути:

  1. нок установлен в cd /opt/noc
в переменной BASEDIR - путь где выполняется скрипт
  1. NMAPBIN путь к nmap

 

#!/bin/bash

  1. set -e ?

export LANG="ru_RU.UTF-8"
export LOCALE="ru_RU"

BASEDIR=/opt/scripts/discoverynet

  1. проверяем или по телнету или по пингу.
  2. по пингу должно быть быстрее /16

NMAPBIN="/usr/bin/nmap -sP -oG $BASEDIR/out.hostsscan.txt"
echo $NMAPBIN

  1. заносим параметры по default для формирования csv файла
    #name=address
    is_managed="True"
    administrative_domain="default"
    activator="activatormain"
    collector=""
    profile_name="Generic.Host"
    object_profile="default"
    description=""
    auth_profile=""
    scheme="0"
    address=""
    port=""
    user="admin"
    password="admin"
    super_password="admin"
    remote_path=""
    trap_source_ip=""
    trap_community=""
    snmp_ro="public"
    snmp_rw="public"
    vc_domain=""
    vrf=""
    termination_group=""
    service_terminator=""
    shape="Cisco/router"
    config_filter_rule=""
    config_diff_filter_rule=""
    config_validation_rule=""
    max_scripts="5"
    tags="autoadd"

headcvs="name,is_managed,administrative_domain,activator,collector,profile_name,object_profile,description,auth_profile,scheme,address,port,user,password,super_password,remote_path,trap_source_ip,trap_community,snmp_ro,snmp_rw,vc_domain,vrf,termination_group,service_terminator,shape,config_filter_rule,config_diff_filter_rule,config_validation_rule,max_scripts,tags"

  1. выполняем сканирование сети.
  2. в качестве параметра берём диапазон переданный из консоли.
    if [ "$3" = "scan" ]
    then
  3. очищаем вывод от предыдущего запуска
    cd $BASEDIR && rm result* out*
  1. сканируем сеть
    $NMAPBIN $1 $2
    fi
  1. читаем построчно получившийся файл и начинаем формировать файл для загрузки в бд.

while read -r line

do
profile_name="Generic.Host"
object_profile="1"
snmpcheckresult=""
name=$line

  1. echo $name
    address=`echo $line | grep Host | awk '
    Unknown macro: {print $2}
    '`
  1. проверяем что вывод ненулевой и проверяем есть ли оно в бд
    if [ -n "$address" ]
    then

SQLQUERY="SELECT address FROM sa_managedobject where address = '$address' and name not like 'wiping-%' ;"
SQLRESULT=`echo $SQLQUERY | psql -U noc --dbname noc -X -A -t -q --single-transaction --no-align`

if [ -n "$SQLRESULT" ]
then

  1. хост присутствует в БД и надо проверять для него SNMP для обновления данных
    echo -e $SQLRESULT "есть в БД"
  2. выводим адресс в файл
    echo -e $address >> $BASEDIR/out.hostsbd.txt

else
echo -e $SQLRESULT "нет в БД"

  1. по параметрам default заполняет строку нужными значениями
  2. выводим в файл out.hostsadd.txt так как данного хоста нету в БД
  1. ADDROW="$address,True,default,activatormain,,Huawei.VRP,huawei.fttb,с.Алгай_ул.Новобозарная_13_Ал.Гай ЦАТС,,0,$address,0,admin,admin,admin,,$address,,,,,,,,Cisco/router,,,,5,"
    ADDROW="$address,$is_managed,$administrative_domain,$activator,$collector,$profile_name,$object_profile,$description,$auth_profile,$scheme,$address,$port,$user,$password,$super_password,$remote_path,$trap_source_ip,$trap_community,$snmp_ro,$snmp_rw,$vc_domain,$vrf,$termination_group,$service_terminator,$shape,$config_filter_rule,$config_diff_filter_rule,$config_validation_rule,$max_scripts,$tags"
    echo -e $ADDROW >> $BASEDIR/out.hostsadd.txt
    fi
    fi
    echo -e "\n\n"
    done < $BASEDIR/out.hostsscan.txt
  1. проверяем есть ли новые хосты. если есть то отправляем почту и добавляем в бд
  2. склеиваем CVS из "шапки" и "тела"

if [ -a $BASEDIR/out.hostsadd.txt ]
then
echo $headcvs > $BASEDIR/result.hostsadd.csv
cat out.hostsadd.txt >> $BASEDIR/result.hostsadd.csv

  1. добавление хостов.
    cd /opt/noc && ./noc csv-import sa.managedobject -r skip -v 3 $BASEDIR/result.hostsadd.csv
  2. отправка почты
    /bin/mail -S sendcharsets=utf-8 -s "Найденный новые хосты СПД" -a $BASEDIR/result.hostsadd.csv test@example.com < $BASEDIR/result.hostsadd.csv
    fi
  1. возьмите с полки пирожок, если дочитали до этого места.

 

Step-by-step guide

 

  • No labels