Merge "Update status messages to fix bug 49"
[osm/devops.git] / vpe-router / reactive / vpe_router.py
index de1e024..e2be327 100644 (file)
@@ -8,6 +8,7 @@ from charmhelpers.core.hookenv import (
 )
 
 from charms.reactive import (
+    hook,
     when,
     when_not,
     helpers,
@@ -21,15 +22,13 @@ import subprocess
 cfg = config()
 
 
-@when('config.changed')
+@hook('config-changed')
 def validate_config():
     try:
         """
         If the ssh credentials are available, we'll act as a proxy charm.
         Otherwise, we execute against the unit we're deployed on to.
         """
-        status_set('maintenance', 'configuring ssh connection')
-        remove_state('vpe.configured')
         if all(k in cfg for k in ['pass', 'vpe-router', 'user']):
             routerip = cfg['vpe-router']
             user = cfg['user']
@@ -40,6 +39,8 @@ def validate_config():
                 out, err = router.ssh(['whoami'], routerip,
                                       user, passwd)
                 if out.strip() != user:
+                    remove_state('vpe.configured')
+                    status_set('blocked', 'vpe is not configured')
                     raise Exception('invalid credentials')
 
                 # Set the router's hostname
@@ -57,15 +58,18 @@ def validate_config():
                                                ],
                                               routerip,
                                               user, passwd)
-
+                        set_state('vpe.configured')
+                        status_set('active', 'ready!')
+                    else:
+                        remove_state('vpe.configured')
+                        status_set('blocked', 'vpe is not configured')
                 except subprocess.CalledProcessError as e:
+                    remove_state('vpe.configured')
+                    status_set('blocked', 'validation failed: %s' % e)
                     log('Command failed: %s (%s)' %
                         (' '.join(e.cmd), str(e.output)))
                     raise
 
-                set_state('vpe.configured')
-                status_set('active', 'ready!')
-
     except Exception as e:
         log(repr(e))
         remove_state('vpe.configured')