我在Icinga中有一个条件规则来执行一个脚本来检查cas authentification。 该脚本使用URL并在返回的页面中grep一个字符串。 URL和字符串被赋予脚本的属性。
这是主持人的定义:
object Host "m" {
address = "1xx.xx7.25"
import "linux-server"
display_name = "m"
vars.curl_casURL = "http://xxx.html"
vars.curl_casGREP = "Returned String"
}
这里是服务的代码,它只在主机中定义了2个变量curl_casURL和curl_casGREP时执行:
apply Service "cas" {
import "generic-service"
check_command = "cas"
assign where (host.vars.curl_casURL && host.vars.curl_casGREP)
}
在网络界面中,没关系,我看到脚本是为服务器而执行的#34; m"。
这是命令:
object CheckCommand "cas" {
import "plugin-check-command"
command = [ PluginDir + "/icinga-curl_cas.sh" ]
command +=[ vars.curl_casURL + vars.curl_casGREP ]
}
但是由于脚本的第一行,脚本从不接收参数并回应关键状态:
if [ ! $1 ]
then
echo "GIVE ME AN URL, PLEASE!"
exit $STATE_CRITICAL
fi
我在文档中找不到答案。谁能帮助我? 谢谢!
答案 0 :(得分:0)
在示例中访问自定义属性作为运行时宏是错误的:
myproject.core.tests.YourTestCase
使用CheckCommand询问如何访问自定义属性作为命令属性,几乎不需要了解运行时宏及其值,当然还有命令参数语法。
由于您使用的是没有任何键的有序参数列表,我只是以丑陋的方式执行此操作,并将自定义属性值作为运行时宏字符串添加到数组中。
object CheckCommand "cas" {
import "plugin-check-command"
command = [ PluginDir + "/icinga-curl_cas.sh" ]
command +=[ vars.curl_casURL + vars.curl_casGREP ]
}
宏解析器将自动查找所需的值,如果它们在CheckCommand,Host对象或使用CheckCommand的服务上被定义为默认值,则无关紧要。
虽然我建议您为脚本使用带有参数和值的GetOpts(更好的可读性以及值的位置对以后的更改无关紧要)。
object CheckCommand "cas" {
import "plugin-check-command"
command = [ PluginDir + "/icinga-curl_cas.sh", "$curl_casURL$", "$curl_casGREP$" ]
}
使用命令参数非常简单。它还允许您添加一个参数描述,以后可以提供帮助(并通过2.4中的API检索)。
while getopts "u:g:" opt; do
case $opt in
u)
URL=$OPTARG
;;
g)
GREP=$OPTARG
;;
[....]
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done