Essayez d'utiliser le Python On-box de Junos #Bonus 1 Quelque chose comme ChatOps / Commit et publiez sur Slack

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.)

code

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()

Résultat d'exécution

Cela fonctionne comme ça.

slack-junos-post2.png

Commentaire

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

Essayez d'utiliser le Python On-box de Junos #Bonus 1 Quelque chose comme ChatOps / Commit et publiez sur Slack
Essayez d'utiliser le script de validation Python # 2 On-box de Junos
Essayez d'utiliser le script d'opération Python # 1 On-box de Junos
Texte de l'image et publication sur slack (python slackbot)
publier sur vim → Python → Slack
Publiez sur Slack avec Python 3
Publier sur Twitter en utilisant Python
Publier sur Slack en Python
Essayez de le faire avec GUI, PyQt en Python
De Python à l'utilisation de MeCab (et CaboCha)
Connectez-vous à Slack à l'aide de requêtes en Python
Essayez d'utiliser Excel en utilisant Python (Xlwings)
Essayez quelque chose comme Python for-else dans Ruby
Essayez de créer quelque chose comme C # LINQ
Essayez d'utiliser tensorflow ① Créez un environnement python et introduisez tensorflow
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
(Python) Essayez de développer une application Web en utilisant Django
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Essayez d'extraire des mots à haute fréquence en utilisant NLTK (python)
J'ai vu ce commit et j'ai pensé que je voulais quelque chose comme la version rake: bump en Python aussi