From: Adam Israel Date: Wed, 5 Oct 2016 23:27:19 +0000 (-0700) Subject: Add a "dig" action X-Git-Tag: v2.0.2~7^2~10^2 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=27aa41dde7ecf6f326cce1b1397288aea2b26f9c;hp=3377928d267019b66a219da3bba007618256d2d4;p=osm%2Fdevops.git Add a "dig" action Signed-off-by: Adam Israel --- diff --git a/layers/netutils/actions.yaml b/layers/netutils/actions.yaml index 9995f777..5c99e21c 100644 --- a/layers/netutils/actions.yaml +++ b/layers/netutils/actions.yaml @@ -30,3 +30,18 @@ traceroute: type: string required: - destination +dig: + description: "DNS lookup" + params: + nsserver: + description: "The nameserver to lookup against." + type: string + host: + description: "The host to lookup" + type: string + type: + description: "The DNS record type to lookup" + type: string + required: + - host + diff --git a/layers/netutils/actions/dig b/layers/netutils/actions/dig new file mode 100755 index 00000000..736a4069 --- /dev/null +++ b/layers/netutils/actions/dig @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +import sys +sys.path.append('lib') + +from charms.reactive import main +from charms.reactive import set_state +from charmhelpers.core.hookenv import action_fail + +""" +`set_state` only works here because it's flushed to disk inside the `main()` +loop. remove_state will need to be called inside the action method. +""" +set_state('actions.dig') + +try: + main() +except Exception as e: + action_fail(repr(e)) diff --git a/layers/netutils/reactive/layer_netutils.py b/layers/netutils/reactive/layer_netutils.py index 8f8db268..7043f190 100644 --- a/layers/netutils/reactive/layer_netutils.py +++ b/layers/netutils/reactive/layer_netutils.py @@ -22,6 +22,31 @@ def ready(): status_set('active', 'Ready!') set_flag('netutils.ready') +@when('actions.dig') +def dig(): + err = '' + try: + nsserver = action_get('nsserver') + host = action_get('host') + nstype = action_get('type') + cmd = "dig" + + if nsserver: + cmd += " @{}".format(nsserver) + if host: + cmd += " {}".format(host) + else: + action_fail('Hostname required.') + if nstype: + cmd += " -t {}".format(nstype) + + result, err = _run(cmd) + except: + action_fail('dig command failed:' + err) + else: + action_set({'outout': result}) + finally: + remove_flag('actions.dig') @when('actions.nmap') def nmap():