--- /dev/null
+"""
+This example:
+
+1. Creates a model on the current controller
+2. Deploys a charm to it.
+3. Attempts to ssh into the charm
+
+"""
+from juju import loop
+from juju import utils
+from juju.controller import Controller
+import asyncio
+from logging import getLogger
+import uuid
+
+LOG = getLogger(__name__)
+
+
+async def main():
+ controller = Controller()
+ print("Connecting to controller")
+ # connect to current controller with current user, per Juju CLI
+ await controller.connect()
+
+ try:
+ model_name = "addmodeltest-{}".format(uuid.uuid4())
+ print("Adding model {}".format(model_name))
+ model = await controller.add_model(model_name)
+
+ print('Deploying ubuntu')
+ application = await model.deploy(
+ 'ubuntu-10',
+ application_name='ubuntu',
+ series='trusty',
+ channel='stable',
+ )
+
+ print('Waiting for active')
+ await asyncio.sleep(10)
+ await model.block_until(
+ lambda: all(unit.workload_status == 'active'
+ for unit in application.units))
+
+ print("Verifying that we can ssh into the created model")
+ ret = await utils.execute_process(
+ 'juju', 'ssh', '-m', model_name, 'ubuntu/0', 'ls /', log=LOG)
+ assert ret
+
+ print('Removing ubuntu')
+ await application.remove()
+
+ print("Destroying model")
+ await controller.destroy_model(model.info.uuid)
+
+ except Exception:
+ LOG.exception(
+ "Test failed! Model {} may not be cleaned up".format(model_name))
+
+ finally:
+ print('Disconnecting from controller')
+ if model:
+ await model.disconnect()
+ await controller.disconnect()
+
+
+if __name__ == '__main__':
+ loop.run(main())