@@ -1892,7 +1892,8 @@ async def _resolve_charm(self, url, origin, force=False, series=None, model_conf
18921892 if result .error :
18931893 raise JujuError (f'resolving { url } : { result .error .message } ' )
18941894
1895- supported_series = result .supported_series
1895+ # TODO (cderici) : supported_bases
1896+ supported_series = result .get ('supported_series' , result .unknown_fields ['supported-series' ])
18961897 resolved_origin = result .charm_origin
18971898 charm_url = URL .parse (result .url )
18981899
@@ -2068,33 +2069,57 @@ async def _deploy(self, charm_url, application, series, config,
20682069 """
20692070 log .info ('Deploying %s' , charm_url )
20702071
2072+ trust = config .get ('trust' , False )
20712073 # stringify all config values for API, and convert to YAML
20722074 config = {k : str (v ) for k , v in config .items ()}
20732075 config = yaml .dump ({application : config },
20742076 default_flow_style = False )
20752077
2076- app_facade = client .ApplicationFacade .from_connection (
2077- self .connection ())
2078+ app_facade = client .ApplicationFacade .from_connection (self .connection ())
20782079
2079- app = client .ApplicationDeploy (
2080- charm_url = charm_url ,
2081- application = application ,
2082- series = series ,
2083- channel = channel ,
2084- charm_origin = charm_origin ,
2085- config_yaml = config ,
2086- constraints = parse_constraints (constraints ),
2087- endpoint_bindings = endpoint_bindings ,
2088- num_units = num_units ,
2089- resources = resources ,
2090- storage = storage ,
2091- placement = placement ,
2092- devices = devices ,
2093- attach_storage = attach_storage ,
2094- force = force ,
2095- )
2096- result = await app_facade .Deploy (applications = [app ])
2097- errors = [r .error .message for r in result .results if r .error ]
2080+ if client .ApplicationFacade .best_facade_version (self .connection ()) >= 19 :
2081+ # Call DeployFromRepository
2082+ app = client .DeployFromRepositoryArg (
2083+ applicationname = application ,
2084+ attachstorage = attach_storage ,
2085+ charmname = charm_url ,
2086+ configyaml = config ,
2087+ cons = parse_constraints (constraints ),
2088+ devices = devices ,
2089+ dryrun = False ,
2090+ placement = placement ,
2091+ storage = storage ,
2092+ trust = trust ,
2093+ base = charm_origin .base ,
2094+ channel = channel ,
2095+ endpoint_bindings = endpoint_bindings ,
2096+ force = force ,
2097+ num_units = num_units ,
2098+ resources = resources ,
2099+ revision = charm_origin .revision ,
2100+ )
2101+ result = await app_facade .DeployFromRepository ([app ])
2102+ errors = [[e .message for e in r .errors ] for r in result .results if r .errors ]
2103+ else :
2104+ app = client .ApplicationDeploy (
2105+ charm_url = charm_url ,
2106+ application = application ,
2107+ series = series ,
2108+ channel = channel ,
2109+ charm_origin = charm_origin ,
2110+ config_yaml = config ,
2111+ constraints = parse_constraints (constraints ),
2112+ endpoint_bindings = endpoint_bindings ,
2113+ num_units = num_units ,
2114+ resources = resources ,
2115+ storage = storage ,
2116+ placement = placement ,
2117+ devices = devices ,
2118+ attach_storage = attach_storage ,
2119+ force = force ,
2120+ )
2121+ result = await app_facade .Deploy (applications = [app ])
2122+ errors = [r .error .message for r in result .results if r .error ]
20982123 if errors :
20992124 raise JujuError ('\n ' .join (errors ))
21002125 return await self ._wait_for_new ('application' , application )
0 commit comments