@@ -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