@@ -441,7 +441,7 @@ class LocalDeployType:
441441 """LocalDeployType deals with local only deployments.
442442 """
443443
444- async def resolve (self , url , architecture , app_name = None , channel = None , series = None , revision = None , entity_url = None ):
444+ async def resolve (self , url , architecture , app_name = None , channel = None , series = None , revision = None , entity_url = None , force = False ):
445445 """resolve attempts to resolve a local charm or bundle using the url
446446 and architecture. If information is missing, it will attempt to backfill
447447 that information, before sending the result back.
@@ -485,7 +485,6 @@ async def resolve(self, url, architecture, app_name=None, channel=None, series=N
485485 is_bundle = is_bundle ,
486486 )
487487
488-
489488class CharmhubDeployType :
490489 """CharmhubDeployType defines a class for resolving and deploying charmhub
491490 charms and bundles.
@@ -494,7 +493,7 @@ class CharmhubDeployType:
494493 def __init__ (self , charm_resolver ):
495494 self .charm_resolver = charm_resolver
496495
497- async def resolve (self , url , architecture , app_name = None , channel = None , series = None , revision = None , entity_url = None ):
496+ async def resolve (self , url , architecture , app_name = None , channel = None , series = None , revision = None , entity_url = None , force = False ):
498497 """resolve attempts to resolve charmhub charms or bundles. A request to
499498 the charmhub API is required to correctly determine the charm url and
500499 underlying origin.
@@ -530,7 +529,9 @@ async def resolve(self, url, architecture, app_name=None, channel=None, series=N
530529 app_name = url .name
531530
532531 if series :
533- if series in supported_series :
532+ # Check whether the charm supports this series
533+ # or we force it
534+ if series in supported_series or force :
534535 origin .series = series
535536 charm_url .series = series
536537 else :
@@ -1687,7 +1688,7 @@ async def deploy(
16871688 if str (url .schema ) not in self .deploy_types :
16881689 raise JujuError ("unknown deploy type {}, expected charmhub or local" .format (url .schema ))
16891690
1690- res = await self .deploy_types [str (url .schema )].resolve (url , architecture , application_name , channel , series , revision , entity_url )
1691+ res = await self .deploy_types [str (url .schema )].resolve (url , architecture , application_name , channel , series , revision , entity_url , force )
16911692
16921693 if res .identifier is None :
16931694 raise JujuError ('unknown charm or bundle {}' .format (entity_url ))
@@ -1784,6 +1785,7 @@ async def deploy(
17841785 devices = devices ,
17851786 charm_origin = charm_origin ,
17861787 attach_storage = attach_storage ,
1788+ force = force ,
17871789 )
17881790
17891791 async def _add_charm (self , charm_url , origin ):
@@ -1968,7 +1970,8 @@ async def add_local_resources(self, application, entity_url, metadata, resources
19681970 async def _deploy (self , charm_url , application , series , config ,
19691971 constraints , endpoint_bindings , resources , storage ,
19701972 channel = None , num_units = None , placement = None ,
1971- devices = None , charm_origin = None , attach_storage = []):
1973+ devices = None , charm_origin = None , attach_storage = [],
1974+ force = False ):
19721975 """Logic shared between `Model.deploy` and `BundleHandler.deploy`.
19731976 """
19741977 log .info ('Deploying %s' , charm_url )
@@ -1996,6 +1999,7 @@ async def _deploy(self, charm_url, application, series, config,
19961999 placement = placement ,
19972000 devices = devices ,
19982001 attach_storage = attach_storage ,
2002+ force = force ,
19992003 )
20002004 result = await app_facade .Deploy (applications = [app ])
20012005 errors = [r .error .message for r in result .results if r .error ]
0 commit comments