text: 
  import subprocess
  import paramiko
  
  from charmhelpers.core.hookenv import (
      config,
      status_set,
      action_get,
      action_set,
      action_fail,
  )
  
  from charms.reactive import (
      when,
      when_not,
      set_state as set_flag,
      remove_state as remove_flag,
  )
  
  
  @when('config.changed')
  def test_connection():
      status_set('maintenance', 'configuring ssh connection')
      remove_flag('rtfw-proxy.ready')
      try:
          who, _ = run('whoami')
      except MgmtNotConfigured as e:
          remove_flag('rtfw-proxy.configured')
          status_set('blocked', str(e))
      except subprocess.CalledProcessError as e:
          remove_flag('rtfw-proxy.configured')
          status_set('blocked', e.output)
      else:
          set_flag('rtfw-proxy.configured')
  
  
  @when('rtfw-proxy.configured')
  @when_not('rtfw-proxy.ready')
  def rtfw_proxy_ready():
      status_set('active', 'ready')
      set_flag('rtfw-proxy.ready')
  
  
  @when('actions.ping')
  @when_not('rtfw-proxy.configured')
  def pingme():
      action_fail('proxy is not ready')
  
  
  @when('actions.ping')
  @when('rtfw-proxy.configured')
  def pingme_forreal():
      try:
          result, err = run('ping -qc {} {}'.format(action_get('count'), action_get('destination')))
      except:
          action_fail('ping command failed')
      finally:
          remove_flag('actions.ping')
  
      # Here you can send results back from ping, if you had time to parse it
      action_set({'output': result})
  
  
  
  class MgmtNotConfigured(Exception):
      pass
  
  
  def run(cmd):
      ''' Suddenly this project needs to SSH to something. So we replicate what
          _run was doing with subprocess using the Paramiko library. This is
          temporary until this charm /is/ the VPE Router. '''
  
      cfg = config()
  
      hostname = cfg.get('hostname')
      password = cfg.get('pass')
      username = cfg.get('user')
  
      if not (username and password and hostname):
          raise MgmtNotConfigured('incomplete remote credentials')
  
      client = paramiko.SSHClient()
      client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  
      try:
          client.connect(cfg.get('hostname'), port=22,
                         username=cfg.get('user'), password=cfg.get('pass'))
      except paramiko.ssh_exception.AuthenticationException:
          raise MgmtNotConfigured('invalid credentials')
  
      stdin, stdout, stderr = client.exec_command(cmd)
      retcode = stdout.channel.recv_exit_status()
      client.close()  # @TODO re-use connections
      if retcode > 0:
          output = stderr.read().strip()
          raise subprocess.CalledProcessError(returncode=retcode, cmd=cmd,
                                              output=output)
      return (''.join(stdout), ''.join(stderr))
  