Deploying a Local Charm
-----------------------
-To deploy a local charm, first upload it to the model, then
-deploy it using the returned charm url.
+To deploy a local charm, pass the charm directory path to
+`Model.deploy()`.
.. code:: python
model = Model()
await model.connect_current()
- # Upload local charm to the model.
- # The returned 'local:' url can be used to deploy the charm.
- charm_url = await model.add_local_charm_dir(
- '/home/tvansteenburgh/src/charms/ubuntu', 'trusty')
-
- # Deploy the charm using the 'local:' charm.
+ # Deploy a local charm using a path to the charm directory
await model.deploy(
- charm_url,
+ '/home/tvansteenburgh/src/charms/ubuntu',
application_name='ubuntu',
+ series='trusty',
)
model = Model()
await model.connect_current()
- # Upload local charm to the model.
- # The returned 'local:' url can be used to deploy the charm.
- charm_url = await model.add_local_charm_dir(
- '/home/tvansteenburgh/src/charms/ubuntu', 'trusty')
-
- # Deploy the charm using the 'local:' charm.
+ # Deploy a local charm using a path to the charm directory
await model.deploy(
- charm_url,
+ '/home/tvansteenburgh/src/charms/ubuntu',
application_name='ubuntu',
+ series='trusty',
)
await model.disconnect()
if not is_local:
await client_facade.AddCharm(channel, entity_id)
+ elif not entity_id.startswith('local:'):
+ # We have a local charm dir that needs to be uploaded
+ charm_dir = os.path.abspath(
+ os.path.expanduser(entity_id))
+ series = series or get_charm_series(charm_dir)
+ if not series:
+ raise JujuError(
+ "Couldn't determine series for charm at {}. "
+ "Pass a 'series' kwarg to Model.deploy().".format(
+ charm_dir))
+ entity_id = await self.add_local_charm_dir(charm_dir, series)
+
app = client.ApplicationDeploy(
application=application_name,
channel=channel,
# If we have apps to update, spawn all the coroutines concurrently
# and wait for them to finish.
charm_urls = await asyncio.gather(*[
- asyncio.ensure_future(self.model.add_local_charm_dir(*params))
+ self.model.add_local_charm_dir(*params)
for params in args
])
# Update the 'charm:' entry for each app with the new 'local:' url.