【发布时间】:2020-07-12 06:59:07
【问题描述】:
我们有一个脚本,通过 curl 在 check_mk 中插入新主机
#!/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 看起来像这样
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 只能获取主机
curl "http://myserver/mysite/check_mk/webapi.py?action=get_all_hosts&_username=automation&_secret=myautomationsecret"
【问题讨论】:
-
不幸的是,我没有任何 check_mk 可供检查,但在他们的官方网站上,您还可以找到“get_host”而不是“get_all_host”。然后您将能够获得有关特定主机(包括 IP)的更多信息。在这里查看checkmk.com/cms_web_api_references.html 如果您输入一个示例的问题输出,那么我们将知道下一步该做什么。
-
如果我这样做: curl "myserver/mysite/check_mk/…" -d 'request={"hostname":"192.168.30.1"}' 我明白了:{"result": {"attributes “:{“tag_agent”:“cmk-agent”,“ipaddress”:“192.168.30.1”,“site”:“mysite”,“meta_data”:{“created_at”:1585659776.593514,“created_by”:“自动化”} },“主机名”:“192.168.30.1”,“路径”:“ansible”},“result_code”:0}
-
但是你能把这部分 "request={"hostname":"192.168.30.1"}" 改成 "request={"ipaddress":"192.168.30.1"}" 并显示结果吗?
-
是的,但是像这样他只能搜索以 ip 地址作为主机名的“主机名”,因为 curl 命令是 action:get_host,而你无法将其更改为 get_ip
-
知道了,我会用我们现有的为你准备一些例子