Ad Widget

Collapse

Скрипт автоприсвоении имени

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • alexeq2
    Junior Member
    • Jul 2013
    • 22

    #1

    Скрипт автоприсвоении имени

    Здравствуйте, у кого то есть рабочий скрипт с изменением имени хоста в базе данных mysql или в любой другой базе данных?
  • DeeZ
    Member
    • Aug 2015
    • 82

    #2
    Сеть 10.0/16 по этому обнаруженые через LLD узлы имеют ip 10.0.*.
    Пользую этот (скрипт запрашивает по SNMP имя узла и обновляет базу):
    Code:
    #!/bin/bash                     
    MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e"               
    
    $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line                                                    
    do                                                                                                                            
    arr=($line)                                                                                                                   
    x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -F'"' '{print$2}'`                      
    echo $x                                                                                                                       
    [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'"                                                  
    done

    Comment

    • alexeq2
      Junior Member
      • Jul 2013
      • 22

      #3
      Originally posted by DeeZ
      Сеть 10.0/16 по этому обнаруженые через LLD узлы имеют ip 10.0.*.
      Пользую этот (скрипт запрашивает по SNMP имя узла и обновляет базу):
      Code:
      #!/bin/bash                     
      MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e"               
      
      $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line                                                    
      do                                                                                                                            
      arr=($line)                                                                                                                   
      x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -F'"' '{print$2}'`                      
      echo $x                                                                                                                       
      [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'"                                                  
      done
      Ты его с командной строки запускаешь или добавляешь в скрипты zabbix'а ?
      При запуске это скрипта он мне выводит пустые строки и ничего в базе данных не заменяет
      Last edited by alexeq2; 09-09-2015, 15:03.

      Comment

      • DeeZ
        Member
        • Aug 2015
        • 82

        #4
        Originally posted by alexeq2
        Ты его с командной строки запускаешь или добавляешь в скрипты zabbix'а ?
        При запуске это скрипта он мне выводит пустые строки и ничего в базе данных не заменяет
        Из ком.строки.
        Community на свое сменил? sysName у коммутаторов заданы?

        покажи что выводит (подставь свои IP и комьюнити)
        snmpget -Ou -Oq -v2c -c public 10.0.0.1 .1.3.6.1.2.1.1.5.0

        Comment

        • alexeq2
          Junior Member
          • Jul 2013
          • 22

          #5
          Originally posted by DeeZ
          Из ком.строки.
          Community на свое сменил? sysName у коммутаторов заданы?

          покажи что выводит (подставь свои IP и комьюнити)
          snmpget -Ou -Oq -v2c -c public 10.0.0.1 .1.3.6.1.2.1.1.5.0
          ввел
          snmpget -Ou -Oq -v2c -c public 192.168.0.234 .1.3.6.1.2.1.1.5.0
          выдало корректно
          system.sysname.0 Stack7

          я думаю проблема с самим скриптом, так как при команде echo $x должен выдавать построчно имена хостов, которые он нашел, но выдает пустые строки

          Comment

          • DeeZ
            Member
            • Aug 2015
            • 82

            #6
            Originally posted by alexeq2
            ввел
            я думаю проблема с самим скриптом, так как при команде echo $x должен выдавать построчно имена хостов, которые он нашел, но выдает пустые строки
            Да, со скриптом. у меня snmpget Отдает в кавычках, по этому я режу по кавычкам.

            Поправьте в скрипте строку:

            x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`

            Comment

            • alexeq2
              Junior Member
              • Jul 2013
              • 22

              #7
              Originally posted by DeeZ
              Да, со скриптом. у меня snmpget Отдает в кавычках, по этому я режу по кавычкам.

              Поправьте в скрипте строку:

              x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`
              Ввел команду в строку
              snmpget -Ou -Oq -v2c -c public 192.168.0.235 .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'
              и выдал корректный ответ
              Так что копать надо дальше, вариантов у меня нету в чем конкретно проблема

              Comment

              • DeeZ
                Member
                • Aug 2015
                • 82

                #8
                Originally posted by alexeq2
                Ввел команду в строку
                snmpget -Ou -Oq -v2c -c public 192.168.0.235 .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'
                и выдал корректный ответ
                Так что копать надо дальше, вариантов у меня нету в чем конкретно проблема
                Так я вам дал решение ))) замените в скрипте строку

                Code:
                x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -F'"' '{print$2}'`
                на строку

                Code:
                x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`
                и у вас все сработает.

                Comment

                • alexeq2
                  Junior Member
                  • Jul 2013
                  • 22

                  #9
                  Originally posted by deez
                  Так я вам дал решение ))) замените в скрипте строку

                  Code:
                  x=`snmpget -ou -oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -f'"' '{print$2}'`
                  на строку

                  Code:
                  x=`snmpget -ou -oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`
                  и у вас все сработает.
                  Я пробовал такой вариант, предложенный тобой, и скрипт не сработал, выдаёт пустые строки.
                  Last edited by alexeq2; 10-09-2015, 18:59.

                  Comment

                  • DeeZ
                    Member
                    • Aug 2015
                    • 82

                    #10
                    Originally posted by alexeq2
                    Ввел команду в строку
                    snmpget -Ou -Oq -v2c -c public 192.168.0.235 .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'
                    и выдал корректный ответ
                    Originally posted by alexeq2
                    Я пробовал такой вариант, предложенный тобой, и скрипт не сработал, выдаёт пустые строки.
                    Противоречащие друг другу выражения
                    Проверьте что скрипт выглядит так:
                    Code:
                    #!/bin/bash                     
                    MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e"
                    
                    $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line
                    do                                                                                                     
                    arr=($line)
                    x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`                      
                    echo $x
                    [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'"                                                  
                    done

                    Comment

                    • pzabortsev
                      Senior Member
                      • Dec 2012
                      • 338

                      #11
                      Видимо товарищу нужно что-то делать с конструкцией name like '10.0.%'" в sql запросе.
                      Например заменить на name like '192.168.0.%'"
                      Как минимум один хост из этой сети есть в наличии - 192.168.0.235

                      Comment

                      • alexeq2
                        Junior Member
                        • Jul 2013
                        • 22

                        #12
                        Originally posted by DeeZ
                        Противоречащие друг другу выражения
                        Проверьте что скрипт выглядит так:
                        Code:
                        #!/bin/bash                     
                        MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e"
                        
                        $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line
                        do                                                                                                     
                        arr=($line)
                        x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`                      
                        echo $x
                        [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'"                                                  
                        done

                        Скидываю свой скрипт , который не работает
                        Code:
                        #!/bin/bash
                        
                        MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password= 12345678 --skip-column-names -B -e"
                        
                        $MYSQL "SELECT host FROM hosts where name like '192.168.0.%'" | while read line
                        do
                        arr=($line)
                        x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} 1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`
                        echo $x
                        [[ -n $x ]] && $MYSQL "UPDATE hosts SET name ='$x' WHERE host ='${arr[0]}'"
                        
                        done
                        Он мне выдает пустые строки в ответе
                        Но если отдельно вбивать команду на mysql
                        SELECT host FROM hosts where name like '192.168.0.%;
                        То он выдает список хостов с таким ip
                        Если в терминале вписать запрос sysname конкретного хоста
                        snmpget -Ou -Oq -v2c -c public 192.168.0.237 1.3.6.1.2.1.1.5.0 2
                        выдает корректный ответ
                        Last edited by alexeq2; 11-09-2015, 08:05.

                        Comment

                        • alexeq2
                          Junior Member
                          • Jul 2013
                          • 22

                          #13
                          Все, я разобрался со своей проблемой. Суть в том, что при задании пароля нельзя использовать символ $ , а не то возникают подобные ошибки, сменил пароль и все заработало

                          Comment

                          • sersad
                            Senior Member
                            • May 2009
                            • 518

                            #14
                            Писать в базу руками зло!
                            Есть же API, который прекрасно работает.
                            Есть решение на языке python по авто переименованию железок при их обнаружении и добавлении в систему, если интересно то запилю пост об этом.

                            Comment

                            • DeeZ
                              Member
                              • Aug 2015
                              • 82

                              #15
                              Originally posted by sersad
                              Писать в базу руками зло!
                              Есть же API, который прекрасно работает.
                              Есть решение на языке python по авто переименованию железок при их обнаружении и добавлении в систему, если интересно то запилю пост об этом.
                              Да интересно.

                              Пишу в базу много, тк способ этот лучше знаю.
                              Через базу включают инвентори после lld, там же переименовываю и добавляю ссылку telnet://$ip в url_a

                              Если научните через апи делать это - буду благодарен.

                              Comment

                              Working...