2015-11-25 1 views
0

J'ai une règle conditionnelle dans Icinga pour exécuter un script pour vérifier l'authentification cas. Le script utilise une URL et grep une chaîne dans la page retournée. L'URL et la chaîne ont des attributs pour le script.icinga, comment passer l'attribut à vérifier Commande

Voici le défintion d'un hôte:

object Host "m" { 
    address = "1xx.xx7.25" 
    import "linux-server" 
    display_name = "m"  
    vars.curl_casURL = "http://xxx.html" 
    vars.curl_casGREP = "Returned String" 
} 

Voici le code pour le service, il est seulement exécuté lorsque les 2 variables curl_casURL et curl_casGREP sont définies dans l'hôte:

apply Service "cas" { 
    import "generic-service" 
    check_command = "cas" 
    assign where (host.vars.curl_casURL && host.vars.curl_casGREP) 
} 

Dans le Interface Web, c'est OK, j'ai vu que le script est exécuté pour le serveur "m".

est ici la commande:

object CheckCommand "cas" { 
    import "plugin-check-command" 
    command = [ PluginDir + "/icinga-curl_cas.sh" ] 
    command +=[ vars.curl_casURL + vars.curl_casGREP ] 
} 

Mais le script ne reçoit jamais les arguments et les échos d'un état critique en raison de la première ligne du script:

if [ ! $1 ] 
then 
    echo "GIVE ME AN URL, PLEASE!" 
    exit $STATE_CRITICAL 
fi 

Je n'ai pas trouvé dans le documenter la réponse. Quelqu'un pourrait-il m'aider? Merci!

Répondre

0

Accéder aux attributs personnalisés comme des macros d'exécution ne va pas dans votre exemple:

object CheckCommand "cas" { 
    import "plugin-check-command" 
    command = [ PluginDir + "/icinga-curl_cas.sh" ] 
    command +=[ vars.curl_casURL + vars.curl_casGREP ] 
} 

Utilisation de votre CheckCommand demander comment accéder à des attributs personnalisés comme des attributs de commande nécessite peu de connaissances sur les macros d'exécution et leurs valeurs, et bien sûr la commande arguments syntaxe.

Puisque vous utilisez une liste ordonnée de paramètres sans aucune clé, je ferais juste la manière laide et ajouterais les valeurs d'attribut personnalisées comme chaînes de macro d'exécution au tableau.

object CheckCommand "cas" { 
    import "plugin-check-command" 
    command = [ PluginDir + "/icinga-curl_cas.sh", "$curl_casURL$", "$curl_casGREP$" ] 
} 

Le résolveur macro rechercher automatiquement les valeurs requises, et il n'a pas d'importance si elles sont définies comme valeur par défaut sur le CheckCommand, l'objet d'hôte ou le service à l'aide du CheckCommand. Bien que je vous recommande d'utiliser GetOpts avec des paramètres et des valeurs pour votre script (une meilleure lisibilité et les positions des valeurs n'auront aucune importance sur les changements ultérieurs).

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 

L'utilisation d'arguments de commande est plutôt simple. Il vous permet également d'ajouter une description d'argument qui peut être utile plus tard (et récupérée via l'API en 2.4).

object CheckCommand "cas" { 
    import "plugin-check-command" 
    command = [ PluginDir + "/icinga-curl_cas.sh" ] 

    arguments = { 
    "-u" = { 
     value = "$curl_casURL$" 
     description = "URL for curl" 
    } 
    "-g" = { 
     value = "$curl_casGREP$" 
     description = "GREP for curl" 
    } 
    } 
} 
+0

Merci. Vous économisez mon temps! Je vais utiliser la deuxième façon. J'ai regardé dans la documentation de icinga et n'ai pas trouvé la bonne syntaxe de la manière laide! –

+0

La bonne syntaxe pour while getopts dans ce cas est: 'while getopts" u: g: "opt; faire –