+ model_facade = client.ModelManagerFacade.from_connection(
+ self.connection)
+
+ owner = owner or self.connection.info['user-info']['identity']
+ cloud_name = cloud_name or await self.get_cloud()
+
+ if credential_name:
+ credential = tag.credential(
+ cloud_name,
+ tag.untag('user-', owner),
+ credential_name
+ )
+ else:
+ credential = None
+
+ log.debug('Creating model %s', model_name)
+
+ model_info = await model_facade.CreateModel(
+ tag.cloud(cloud_name),
+ config,
+ credential,
+ model_name,
+ owner,
+ 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)
+
+ if self.controller_name:
+ model_name = "{}:{}".format(self.controller_name, model_name)
+
+ cmd = ['juju', 'add-ssh-key', '-m', model_name, ssh_key]
+
+ await utils.execute_process(*cmd, 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,
+ model_info.uuid,
+ self.connection.username,
+ self.connection.password,
+ self.connection.cacert,
+ self.connection.macaroons,
+ loop=self.loop,
+ )
+
+ return model
+
+ async def destroy_models(self, *uuids):
+ """Destroy one or more models.
+
+ :param str \*uuids: UUIDs of models to destroy