Pass through event loop
[osm/N2VC.git] / juju / controller.py
index cf7c2ce..b3d2ac1 100644 (file)
@@ -2,9 +2,9 @@ import asyncio
 import logging
 
 from . import tag
+from . import utils
 from .client import client
 from .client import connection
-from .client import watcher
 from .model import Model
 
 log = logging.getLogger(__name__)
@@ -98,6 +98,20 @@ class Controller(object):
             region,
         )
 
+        # Add our ssh key to the model, to work around
+        # https://bugs.launchpad.net/juju/+bug/1643076
+        try:
+            ssh_key = await utils.read_ssh_key(loop=self.loop)
+            await utils.execute_process(
+                'juju', 'add-ssh-key', '-m', model_name, ssh_key, log=log,
+                loop=self.loop)
+        except Exception:
+            log.exception(
+                "Could not add ssh key to model. You will not be able "
+                "to ssh into machines in this model. "
+                "Manually running `juju add-ssh-key <key>` in the cli "
+                "may fix this problem.")
+
         model = Model()
         await model.connect(
             self.connection.endpoint,
@@ -106,6 +120,7 @@ class Controller(object):
             self.connection.password,
             self.connection.cacert,
             self.connection.macaroons,
+            loop=self.loop,
         )
 
         return model
@@ -140,7 +155,7 @@ class Controller(object):
         :param list models: Models to which the user is granted access
 
         """
-        pass
+        raise NotImplementedError()
 
     def change_user_password(self, username, password):
         """Change the password for a user in this controller.
@@ -149,7 +164,7 @@ class Controller(object):
         :param str password: New password
 
         """
-        pass
+        raise NotImplementedError()
 
     def destroy(self, destroy_all_models=False):
         """Destroy this controller.
@@ -158,7 +173,7 @@ class Controller(object):
             controller.
 
         """
-        pass
+        raise NotImplementedError()
 
     def disable_user(self, username):
         """Disable a user.
@@ -166,20 +181,20 @@ class Controller(object):
         :param str username: Username
 
         """
-        pass
+        raise NotImplementedError()
 
     def enable_user(self):
         """Re-enable a previously disabled user.
 
         """
-        pass
+        raise NotImplementedError()
 
     def kill(self):
         """Forcibly terminate all machines and other associated resources for
         this controller.
 
         """
-        pass
+        raise NotImplementedError()
 
     async def get_cloud(self):
         """
@@ -200,7 +215,7 @@ class Controller(object):
         :param str username: User for which to list models (admin use only)
 
         """
-        pass
+        raise NotImplementedError()
 
     def get_payloads(self, *patterns):
         """Return list of known payloads.
@@ -218,7 +233,7 @@ class Controller(object):
             - payload status
 
         """
-        pass
+        raise NotImplementedError()
 
     def get_users(self, all_=False):
         """Return list of users that can connect to this controller.
@@ -226,13 +241,13 @@ class Controller(object):
         :param bool all_: Include disabled users
 
         """
-        pass
+        raise NotImplementedError()
 
     def login(self):
         """Log in to this controller.
 
         """
-        pass
+        raise NotImplementedError()
 
     def logout(self, force=False):
         """Log out of this controller.
@@ -241,7 +256,7 @@ class Controller(object):
             with a password
 
         """
-        pass
+        raise NotImplementedError()
 
     def get_model(self, name):
         """Get a model by name.
@@ -249,7 +264,7 @@ class Controller(object):
         :param str name: Model name
 
         """
-        pass
+        raise NotImplementedError()
 
     def get_user(self, username):
         """Get a user by name.
@@ -257,4 +272,4 @@ class Controller(object):
         :param str username: Username
 
         """
-        pass
+        raise NotImplementedError()