Skip to content

Commit 9598a6e

Browse files
[JUJU-3253] add missing force in bundle deployment (#815)
* Propagate force parameter to resolve function to enable force for remote bundles.
1 parent 2795292 commit 9598a6e

1 file changed

Lines changed: 11 additions & 7 deletions

File tree

juju/model.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ class LocalDeployType:
443443
"""LocalDeployType deals with local only deployments.
444444
"""
445445

446-
async def resolve(self, url, architecture, app_name=None, channel=None, series=None, entity_url=None):
446+
async def resolve(self, url, architecture, app_name=None, channel=None, series=None, entity_url=None, force=False):
447447
"""resolve attempts to resolve a local charm or bundle using the url
448448
and architecture. If information is missing, it will attempt to backfill
449449
that information, before sending the result back.
@@ -500,7 +500,7 @@ def _default_app_name(meta):
500500
suggested_name = meta.get('charm-metadata', {}).get('Name')
501501
return suggested_name or meta.get('id', {}).get('Name')
502502

503-
async def resolve(self, url, architecture, app_name=None, channel=None, series=None, entity_url=None):
503+
async def resolve(self, url, architecture, app_name=None, channel=None, series=None, entity_url=None, force=False):
504504
"""resolve attempts to resolve charmstore charms or bundles. A request
505505
to the charmstore is required to get more information about the
506506
underlying identifier.
@@ -539,7 +539,7 @@ class CharmhubDeployType:
539539
def __init__(self, charm_resolver):
540540
self.charm_resolver = charm_resolver
541541

542-
async def resolve(self, url, architecture, app_name=None, channel=None, series=None, entity_url=None):
542+
async def resolve(self, url, architecture, app_name=None, channel=None, series=None, entity_url=None, force=False):
543543
"""resolve attempts to resolve charmhub charms or bundles. A request to
544544
the charmhub API is required to correctly determine the charm url and
545545
underlying origin.
@@ -561,7 +561,9 @@ async def resolve(self, url, architecture, app_name=None, channel=None, series=N
561561
app_name = url.name
562562

563563
if series:
564-
if series in supported_series:
564+
# Check whether the charm supports this series
565+
# or we force it
566+
if series in supported_series or force:
565567
origin.series = series
566568
charm_url.series = series
567569
else:
@@ -1603,7 +1605,7 @@ async def deploy(
16031605
if str(url.schema) not in self.deploy_types:
16041606
raise JujuError("unknown deploy type {}, expected charmhub, charmstore or local".format(url.schema))
16051607

1606-
res = await self.deploy_types[str(url.schema)].resolve(url, architecture, application_name, channel, series, entity_url)
1608+
res = await self.deploy_types[str(url.schema)].resolve(url, architecture, application_name, channel, series, entity_url, force)
16071609

16081610
if res.identifier is None:
16091611
raise JujuError('unknown charm or bundle {}'.format(entity_url))
@@ -1705,7 +1707,8 @@ async def deploy(
17051707
num_units=num_units,
17061708
placement=parse_placement(to),
17071709
devices=devices,
1708-
charm_origin=charm_origin
1710+
charm_origin=charm_origin,
1711+
force=force,
17091712
)
17101713

17111714
async def _add_charm(self, charm_url, origin):
@@ -1922,7 +1925,7 @@ async def add_local_resources(self, application, entity_url, metadata, resources
19221925
async def _deploy(self, charm_url, application, series, config,
19231926
constraints, endpoint_bindings, resources, storage,
19241927
channel=None, num_units=None, placement=None,
1925-
devices=None, charm_origin=None):
1928+
devices=None, charm_origin=None, force=False):
19261929
"""Logic shared between `Model.deploy` and `BundleHandler.deploy`.
19271930
"""
19281931
log.info('Deploying %s', charm_url)
@@ -1949,6 +1952,7 @@ async def _deploy(self, charm_url, application, series, config,
19491952
storage=storage,
19501953
placement=placement,
19511954
devices=devices,
1955+
force=force,
19521956
)
19531957
result = await app_facade.Deploy(applications=[app])
19541958
errors = [r.error.message for r in result.results if r.error]

0 commit comments

Comments
 (0)