2015-11-27 2 views
1

Je cherche un moyen de planifier un temps d'arrêt dans icinga2 avec un script groovy.Comment planifier un temps d'arrêt dans icinga2 en utilisant icinga-api avec groovy?

J'ai déjà essayé de créer un petit script groovy. Essayé en utilisant les exemples de documentation 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 

mais l'adaptant à mon script ne fonctionne pas. Très important sont les "autour de chaque nom d'attribut, je l'ai noté

Répondre

2

solution a été ainsi:...

En utilisant wslite comme client webservice C'est l'exemple minimal

Maintenant, je me connecte à mon serveur avec api activé. le certificat est auto-signé, pourquoi « sslTrustAllCerts » était nécessaire.

je sélectionne tous les services de mon hôte « testserver » et réglez le temps d'arrêt (durée en secondes).

@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) 
} 

Ça a marché pour moi!

+1

Il est également raisonnable de passer l'attribut "filter" dans le corps de la requête POST, et d'utiliser également "filter_vars" pour spécifier, par exemple, le nom d'hôte à la demande. Quelques exemples peuvent être trouvés dans les exemples programmatiques dans les docs, qui utilisent GET avec X-HTTP-Method-Override, mais le principe de passer des filtres dans le corps de la requête est le même. – dnsmichi