L'autre jour, j'ai présenté le script de validation de Junos par On-box Python. En cela, j'ai écrit quelque chose de pelucheux comme "Quelque chose comme ChatOps" comme exemple de ce qui peut être réalisé avec Commit Script.
C'est pourquoi (?), Cette fois, c'est quelque chose comme ChatOps, j'ai donc écrit un script de validation à publier sur Slack après la validation avec le routeur Junos. (Vous pouvez vous fâcher si vous appelez ce genre de chose ChatOps, mais pardonnez-le à titre d'exemple simple.)
Le script ressemble à ceci: L'URL doit être remplacée de manière appropriée.
post-slack.py
from junos import Junos_Context
import json
import urllib
import urllib2
def post_slack(_username, _text):
url = 'https://hooks.slack.com/services/************'
headers = {'Content-Type': 'application/json'}
params = json.dumps({"username": _username, "text": _text})
req = urllib2.Request(url, params, headers)
res = urllib2.urlopen(req)
if res.getcode() != 200:
message = '{0} {1} failed: {2}'.format(method, uri, res.getcode())
raise SlackPostError(message)
def main():
login_name = Junos_Context['user-context']['login-name']
host_name = Junos_Context['hostname']
product_name = Junos_Context['product']
name = 'Junos Router({0})'.format(host_name)
type = 'commit'
if Junos_Context['commit-context'].has_key('commit-check'):
type = 'commit check'
elif Junos_Context['commit-context'].has_key('commit-confirm'):
type = 'commit confirmed'
elif Junos_Context['commit-context'].has_key('commit-boot'):
print 'boot-time commit should be ignored'
sys.exit()
comment = ''
if Junos_Context['commit-context'].has_key('commit-comment'):
comment = ' with comment: {0}'.format(Junos_Context['commit-context']['commit-comment'])
text = 'User {0} trying {1} to {2}({3}){4}.'.format(login_name, type, host_name, product_name, comment)
post_slack(name, text)
if __name__ == '__main__':
main()
Cela fonctionne comme ça.
C'est un script simple, donc si vous le lisez, vous le comprendrez, mais je vais l'expliquer brièvement.
Ce script crée un message lorsqu'un événement Commit se produit, en fonction du type d'événement Commit dont il s'agit, et le publie sur Slack.
Dans le script de validation, vous pouvez obtenir des informations sur qui a exécuté l'événement de validation et pourquoi il a été exécuté en vous référant à la variable Junos_Context
.
Par exemple, vous pouvez obtenir l'entrée suivante:
junos_context.json
{
"product": "vmx",
"user-context": {
"login-name": "root",
"user": "root",
"class-name": "super-user",
"uid": "0"
},
"routing-engine-name": "re0",
"script-type": "commit",
"re-master": null,
"hostname": "vmx1",
"pid": "17688",
"tty": "/dev/pts/1",
"commit-context": {
"database-path": "/var/run/db/juniper.db",
"commit-check": null
},
"chassis": "others",
"localtime": "Tue Dec 27 19:36:45 2016",
"localtime-iso": "2016-12-27 19:36:45 UTC"
}
Si vous lisez ce résultat, vous pouvez voir que le produit "vmx" avec le nom d'hôte "vmx1" a été validé par l'utilisateur "root". Le type de paramètres inclus est le [Document officiel](https://www.juniper.net/techpubs/en_US/junos16.1/topics/reference/general/junos-script-automation-junos-xsl-global- Puisqu'il est résumé dans params-and-var.html), le message est généré en fonction des conditions telles que s'il s'agit d'un contrôle de validation, s'il s'agit d'une validation confirmée et s'il y a un commentaire.
La partie à publier sur Slack est découpée en tant que méthode post_slack, mais il s'agit simplement de générer le paramètre comprenant le contenu que vous souhaitez publier au format JSON et de le POSTER à l'aide d'Urllib2.
À propos, le script de validation ne sait pas si la validation a réussi ou non, donc même si la validation échoue, elle sera publiée sur Slack.
Recommended Posts