+++ /dev/null
-from charmhelpers.core.hookenv import (
- action_get,
- action_fail,
- action_set,
- config,
- log,
- status_set,
-)
-
-from charms.reactive import (
- remove_state as remove_flag,
- set_state as set_flag,
- when,
- when_not,
-)
-import charms.sshproxy
-from subprocess import CalledProcessError
-
-
-@when_not('netutils.ready')
-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 = charms.sshproxy._run(cmd)
- except:
- action_fail('dig command failed:' + err)
- else:
- action_set({'outout': result})
- finally:
- remove_flag('actions.dig')
-
-
-@when('actions.nmap')
-def nmap():
- err = ''
- try:
- result, err = charms.sshproxy._run(
- 'nmap {}'.format(action_get('destination'))
- )
- except:
- action_fail('nmap command failed:' + err)
- else:
- action_set({'outout': result})
- finally:
- remove_flag('actions.nmap')
-
-
-@when('actions.ping')
-def ping():
- err = ''
- try:
- result, err = charms.sshproxy._run('ping -qc {} {}'.format(
- action_get('count'), action_get('destination'))
- )
-
- except:
- action_fail('ping command failed:' + err)
- else:
- # Here you can send results back from ping, if you had time to parse it
- action_set({'output': result})
- finally:
- remove_flag('actions.ping')
-
-
-@when('actions.traceroute')
-def traceroute():
- try:
- result, err = charms.sshproxy._run(
- 'traceroute -m {} {}'.format(
- action_get('hops'),
- action_get('destination')
- )
- )
- except:
- action_fail('traceroute command failed')
- else:
- # Here you can send results back from ping, if you had time to parse it
- action_set({'output': result})
- finally:
- remove_flag('actions.traceroute')
-
-
-@when('actions.iperf3')
-def iperf3():
- err = ''
- try:
- # TODO: read all the flags via action_get and build the
- # proper command line to run iperf3
- host = action_get('host')
-
- cmd = 'iperf3 -c {} --json'.format(host)
- result, err = charms.sshproxy._run(cmd)
- except CalledProcessError as e:
- action_fail('iperf3 command failed:' + e.output)
- else:
- action_set({'outout': result})
- finally:
- remove_flag('actions.iperf3')
-
-
-@when('config.changed')
-def config_changed():
- """ Handle configuration changes """
- cfg = config()
- if cfg.changed('iperf3'):
- if cfg['iperf3']:
- # start iperf in server + daemon mode
- cmd = "iperf3 -s -D"
- else:
- cmd = "killall iperf3"
- try:
- charms.sshproxy._run(cmd)
- log("iperf3 stopped.")
- except CalledProcessError:
- log("iperf3 not running.")
- else:
- log("iperf3 started.")