Versuchen Sie es mit Junos 'On-Box Python #Bonus 1 So etwas wie ChatOps / Commit und posten Sie es bei Slack

Neulich habe ich Junos 'Commit Script von On-Box Python eingeführt. Darin habe ich etwas Flauschiges wie "Etwas wie ChatOps" als Beispiel dafür geschrieben, was mit Commit Script realisiert werden kann.

Also (?), Dieses Mal ist es so etwas wie ChatOps, also habe ich ein Commit-Skript geschrieben, um es nach dem Commit mit dem Junos-Router an Slack zu senden. (Sie können wütend werden, wenn Sie so etwas ChatOps nennen, aber bitte verzeihen Sie es als einfaches Beispiel.)

Code

Das Skript sieht folgendermaßen aus: Die URL sollte entsprechend ersetzt werden.

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

Ausführungsergebnis

Es funktioniert so.

slack-junos-post2.png

Kommentar

Es ist ein einfaches Skript. Wenn Sie es also lesen, werden Sie es verstehen, aber ich werde es kurz erklären.

Dieses Skript erstellt eine Nachricht, wenn ein Commit-Ereignis auftritt, je nachdem, um welche Art von Commit-Ereignis es sich handelt, und sendet sie an Slack. Im Commit-Skript können Sie auf eine Variable namens "Junos_Context" verweisen, um Informationen darüber zu erhalten, wer das Commit-Ereignis ausgeführt hat und warum. Beispielsweise können Sie folgende Eingabe erhalten:

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"
}

Wenn Sie dieses Ergebnis lesen, können Sie sehen, dass das Produkt "vmx" mit dem Hostnamen "vmx1" vom Benutzer "root" Commit Checked wurde. Welche Parameter enthalten sind, ist [Offizielles Dokument](https://www.juniper.net/techpubs/en_US/junos16.1/topics/reference/general/junos-script-automation-junos-xsl-global- Da es in params-and-var.html zusammengefasst ist, wird die Nachricht basierend auf den Bedingungen generiert, z. B. ob es sich um eine Festschreibungsprüfung handelt, ob es sich um eine bestätigte Festschreibung handelt und ob ein Kommentar vorliegt.

Der Teil, der an Slack gesendet werden soll, wird als post_slack-Methode ausgeschnitten. Es wird jedoch lediglich ein Parameter generiert, der den Inhalt enthält, den Sie im JSON-Format veröffentlichen möchten, und mit Urllib2 POST.

Das Commit-Skript weiß übrigens nicht, ob das Commit erfolgreich war oder nicht. Selbst wenn das Commit fehlschlägt, wird es an Slack gesendet.

Recommended Posts

Versuchen Sie es mit Junos 'On-Box Python #Bonus 1 So etwas wie ChatOps / Commit und posten Sie es bei Slack
Versuchen Sie es mit Junos 'On-Box Python # 2 Commit Script
Versuchen Sie es mit Junos 'On-Box Python # 1 Op Script
Bildtext und Post to Slack (Python Slackbot)
poste an vim → Python → Slack
Post to Slack mit Python 3
Mit Python auf Twitter posten
Post an Slack in Python
Versuchen Sie es mit GUI, PyQt in Python
Von Python bis zur Verwendung von MeCab (und CaboCha)
Melden Sie sich mit Anforderungen in Python bei Slack an
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Versuchen Sie etwas wie Python für-else in Ruby
Versuchen Sie etwas wie C # LINQ zu machen
Versuchen Sie es mit Tensorflow. ① Erstellen Sie eine Python-Umgebung und führen Sie Tensorflow ein
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Versuchen Sie, hochfrequente Wörter mit NLTK (Python) zu extrahieren.
Ich sah dieses Commit und dachte, ich wollte so etwas wie eine Rake-Version: Bump auch in Python