首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >check-mk检查主机名和/或ip是否已存在

check-mk检查主机名和/或ip是否已存在
EN

Stack Overflow用户
提问于 2020-04-01 00:33:39
回答 2查看 562关注 0票数 0

我们有一个脚本可以通过curl在check_mk中插入新主机

代码语言:javascript
复制
#!/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“是使用xmlstarlet进行nmap扫描时已处理的文件,此文件并不总是具有主机名,因此使用ip地址作为主机名

file.conf如下所示

代码语言:javascript
复制
192.168.30.1|192.168.30.1|os
_gateway|192.168.30.2|Linux 2.6.18 - 2.6.22
...

因此,对于某些主机,ip地址作为主机名传递一次,逻辑上作为ip传递一次。现在,员工可以输入正确的主机名,并从主机名字段中删除ip

如果再次执行上述脚本,它将使用ip作为主机名再次创建主机(因为未指定主机名),因此现在我们在check_mk 1x中使用手动添加的主机名创建主机2x,并使用ip作为主机名创建一次

nmap从启动时就已正确识别主机名的所有其他主机都没有像正常情况下那样被接管

我们现在需要一个函数,该函数在执行脚本之前询问主机名的ip地址,如果该地址已经存在,则不应再次创建主机

使用curl只能获取主机

代码语言:javascript
复制
curl "http://myserver/mysite/check_mk/webapi.py?action=get_all_hosts&_username=automation&_secret=myautomationsecret"  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-01 18:17:18

首先你需要" jq ",所以apt-get install jq。(用于通过bash读取json文件)

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2020-04-02 19:14:56

现在我们有了另一个问题:我必须直接包含操作系统。到目前为止,这已经对相同的add_host起作用了,我只需要包含另一个属性

代码语言:javascript
复制
 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有时看起来像这样:

代码语言:javascript
复制
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”设置为"empty“。

但是curl命令会给具有空os的主机一个错误,并且不会创建它们

代码语言:javascript
复制
{"result": "Check_MK exception: Unknown tag ", "result_code": 1}{"result": "Check_MK exception: No such host", "result_code": 1}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60955439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档