icinga,如何传递属性来检查命令

时间:2015-11-25 10:43:14

标签: service attributes conditional icinga

我在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

我在文档中找不到答案。谁能帮助我? 谢谢!

1 个答案:

答案 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