Skip to content

Commit a0ec8e2

Browse files
committed
Use the new DeployFromRepository endpoint if talking to App facade v19
1 parent 034b80c commit a0ec8e2

1 file changed

Lines changed: 47 additions & 22 deletions

File tree

juju/model.py

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)