如何使用 icinga-api 和 groovy 来安排 icinga2 的停机时间?
How to schedule a downtime in icinga2 by using icinga-api with groovy?
我正在寻找一种使用 groovy 脚本在 icinga2 中安排停机时间的方法。
我已经尝试创建一个小 groovy 脚本。尝试使用 icinga 文档中的示例:
curl -u root:icinga -k -s 'https://localhost:5665/v1/actions/schedule-downtime?type=Host&filter=host.vars.os==%22Linux%22' -d '{ "author" : "michi", "comment": "Maintenance.", "start_time": 1441136260, "end_time": 1441137260, "duration": 1000 }' -X POST | python -m json.tool
但是将其改编为我的脚本并没有奏效。我注意到每个属性名称周围的 " 非常重要。
解决方法是这样的:
使用 wslite 作为网络服务客户端。这是最小的例子。
现在我连接到启用了 api 的服务器。该证书是自签名的,为什么需要 "sslTrustAllCerts"。
我 select 来自我的主机的所有服务 "testserver" 并设置停机时间(持续时间以秒为单位)。
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.2')
import wslite.rest.*
import wslite.http.auth.*
def client = new RESTClient("https://myicinga2server:5665/")
client.authorization = new HTTPBasicAuthorization("root", "secret")
def timeFrom = System.currentTimeMillis() / 1000L
def timeDurationSec = 600
def timeTo = timeFrom + timeDurationSec
try
{
def response = client.post(
path: '/v1/actions/schedule-downtime?type=Service&filter=host.name==%22testserver%22',
headers: ["Accept": "application/json"],
sslTrustAllCerts: true)
{
json "author":"mstein", "comment":"Test-Downtime", "start_time": timeFrom, "end_time": timeTo, "duration": timeDurationSec, "fixed": true
}
assert 200 == response.statusCode
print response.text
}
catch (Exception exc)
{
println "Error: " + exc.getClass().toString()
println "Message: " + exc.getMessage()
println "Response: " + exc.getResponse()
System.exit(1)
}
这对我有用!
我正在寻找一种使用 groovy 脚本在 icinga2 中安排停机时间的方法。
我已经尝试创建一个小 groovy 脚本。尝试使用 icinga 文档中的示例:
curl -u root:icinga -k -s 'https://localhost:5665/v1/actions/schedule-downtime?type=Host&filter=host.vars.os==%22Linux%22' -d '{ "author" : "michi", "comment": "Maintenance.", "start_time": 1441136260, "end_time": 1441137260, "duration": 1000 }' -X POST | python -m json.tool
但是将其改编为我的脚本并没有奏效。我注意到每个属性名称周围的 " 非常重要。
解决方法是这样的:
使用 wslite 作为网络服务客户端。这是最小的例子。
现在我连接到启用了 api 的服务器。该证书是自签名的,为什么需要 "sslTrustAllCerts"。
我 select 来自我的主机的所有服务 "testserver" 并设置停机时间(持续时间以秒为单位)。
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.2')
import wslite.rest.*
import wslite.http.auth.*
def client = new RESTClient("https://myicinga2server:5665/")
client.authorization = new HTTPBasicAuthorization("root", "secret")
def timeFrom = System.currentTimeMillis() / 1000L
def timeDurationSec = 600
def timeTo = timeFrom + timeDurationSec
try
{
def response = client.post(
path: '/v1/actions/schedule-downtime?type=Service&filter=host.name==%22testserver%22',
headers: ["Accept": "application/json"],
sslTrustAllCerts: true)
{
json "author":"mstein", "comment":"Test-Downtime", "start_time": timeFrom, "end_time": timeTo, "duration": timeDurationSec, "fixed": true
}
assert 200 == response.statusCode
print response.text
}
catch (Exception exc)
{
println "Error: " + exc.getClass().toString()
println "Message: " + exc.getMessage()
println "Response: " + exc.getResponse()
System.exit(1)
}
这对我有用!