check-mk проверяет, существуют ли уже имя хоста и / или ip - PullRequest
0 голосов
/ 31 марта 2020

мы получили скрипт, который вставляет новые хосты в check_mk через curl

#!/bin/bash

cat file.conf | while read line
do

    HOSTNAME=$(echo $line | cut -d '|' -f1)
    IP=$(echo $line | cut -d '|' -f2)


curl "http://myserver/mysite/check_mk/webapi.py?action=add_host&_username=automation&_secret=myautomationsecret" -d 'request={"hostname":"'"$HOSTNAME"'","folder":"ansible","attributes":{"ipaddress":"'"$IP"'","site":"mysite","tag_agent":"cmk-agent"}}'
done 

файл "file.conf" - это уже обработанный файл из сканирования nmap с помощью xmlstarlet, этот файл не всегда имеет имя хоста, поэтому в качестве имени хоста использовался ip-адрес

file.conf выглядит следующим образом

192.168.30.1|192.168.30.1|os
_gateway|192.168.30.2|Linux 2.6.18 - 2.6.22
...

, поэтому для некоторых хостов ip-адрес передается один раз как имя хоста и логически как ip. теперь сотрудник вводит правильное имя хоста и удаляет ip из поля hostname

, если вышеупомянутый скрипт выполняется снова, он снова создаст хост с ip в качестве имени хоста (поскольку имя хоста не было ), теперь у нас есть хост 2x в check_mk 1x с добавленным вручную именем хоста и один раз с ip в качестве имени хоста

все остальные хосты, где имя хоста было правильно распознано nmap с самого начала, не были приняты как должно быть

теперь нам нужна функция, которая запрашивает IP-адрес имени хоста перед выполнением скрипта, и если он уже существует, хост не должен быть создан снова

с помощью curl вы можете получить только хосты

curl "http://myserver/mysite/check_mk/webapi.py?action=get_all_hosts&_username=automation&_secret=myautomationsecret"  

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

теперь у нас есть другая проблема: я должен включить ОС напрямую. это уже работает с тем же add_host, мне просто нужно было включить еще один атрибут

 curl "http://myserver/mysite/check_mk/webapi.py?action=add_host&_username=automation&_secret=myautomationsecret" -d 'request={"hostname":"'"$HOSTNAME"'","folder":"ansible","attributes":{"ipaddress":"'"$IP"'","tag_os": "'"$OS"'","site":"mysite","tag_agent":"cmk-agent"}}'

, но для того, чтобы вам пришлось вставлять имена ОС вручную в интерфейс checkmk, есть специальная вкладка, где вы можете может определить их

, это уже было сделано с ОС Linux, Windows и LCOS

, но теперь это так, что сканирование nmap не включает os везде, поэтому Время от времени файл file.conf выглядит так:

host1|192.168.30.25|Windows
host2|192.168.30.90|Linux
host3|192.168.30.110|Linux
host4|192.168.30.111|Linux
192.168.30.130|192.168.30.130|
192.168.30.131|192.168.30.131|Android
192.168.30.155|192.168.30.155|Linux
192.168.30.157|192.168.30.157|

вы можете видеть, что на хостах ОС полностью отсутствует или что-то вроде android

, теперь мы хотим хосты, которые НЕ имеют linux, windows или lcos, чтобы иметь "пусто" как tag_os

, но команда curl выдает ошибку для хостов с пустым os и не создает их

{"result": "Check_MK exception: Unknown tag ", "result_code": 1}{"result": "Check_MK exception: No such host", "result_code": 1}
0 голосов
/ 01 апреля 2020

Сначала вам понадобится "jq", поэтому apt-get установите jq. (для чтения json файла bash)

FILE="filename"
getHost="http://myserver/mysite/check_mk/webapi.py?action=get_all_host&_username=automation&_secret=myautomationsecret"

  while IFS='|' read -r host ip description
  do

    checkHost=$( curl -s "$getHost" | 
     jq -r '.result | keys[] as $k | "\(.[$k] | .attributes | select(.ipaddress=="'$ip'") | .ipaddress )"' | uniq )

    if [ "$checkHost" != "$ip" ]
    then
            # here you already know that this ip ( $ip ) not exist in check_mk
            # put your curl command with add_host action here
            echo "Hostname: $ip added to check_mk"
    else
            echo "Hostname: $ip is already exist in check_mk"

    fi


  done <$FILE
...