Skip to content

Commit 67852c1

Browse files
committed
Fix application.refresh to point to the correct charm origin
1 parent 6a1e2e0 commit 67852c1

1 file changed

Lines changed: 44 additions & 17 deletions

File tree

juju/application.py

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from .errors import JujuError, JujuApplicationConfigError
2626
from .bundle import get_charm_series
2727
from .placement import parse as parse_placement
28+
from .origin import Channel
2829

2930
log = logging.getLogger(__name__)
3031

@@ -643,6 +644,7 @@ async def refresh(
643644
raise ValueError("switch and revision are mutually exclusive")
644645

645646
resources_facade = client.ResourcesFacade.from_connection(self.connection)
647+
646648
app_facade = self._facade()
647649

648650
charm_url = self.data['charm-url']
@@ -657,6 +659,30 @@ async def refresh(
657659
# Charmhub charms
658660
charmhub = self.model.charmhub
659661
charm_resources = await charmhub.list_resources(charm_name)
662+
663+
res = await app_facade.GetCharmURLOrigin(application=charm_name)
664+
charm_url = res.url
665+
origin = res.charm_origin
666+
667+
if channel:
668+
ch = Channel.parse(channel).normalize()
669+
origin.risk = ch.risk
670+
origin.track = ch.track
671+
672+
charms_facade = client.CharmsFacade.from_connection(self.connection)
673+
resolved_charm = await charms_facade.ResolveCharms(resolve=[client.ResolveCharmWithChannel(
674+
charm_origin=origin,
675+
switch_charm=False,
676+
reference=charm_url,
677+
)])
678+
# TODO: error check here
679+
dest_origin = resolved_charm.results[0].charm_origin
680+
charm_url = resolved_charm.results[0].url
681+
682+
await charms_facade.AddCharm(url=charm_url,
683+
force=force,
684+
charm_origin=dest_origin)
685+
660686
else:
661687
charms_facade = client.CharmsFacade.from_connection(self.connection)
662688
charmstore = self.model.charmstore
@@ -687,7 +713,6 @@ async def refresh(
687713
charm_resources = charmstore_entity['Meta']['resources']
688714

689715
# Update resources
690-
691716
request_data = [client.Entity(self.tag)]
692717
response = await resources_facade.ListResources(entities=request_data)
693718
existing_resources = {
@@ -697,31 +722,33 @@ async def refresh(
697722

698723
resources_to_update = [
699724
resource for resource in charm_resources
700-
if resource['Name'] not in existing_resources or
701-
existing_resources[resource['Name']].origin != 'upload'
725+
if resource.get('Name', resource.get('name')) not in existing_resources or
726+
existing_resources[resource.get('Name', resource.get('name'))].origin != 'upload'
702727
]
703728

704729
if resources_to_update:
705-
request_data = [
706-
client.CharmResource(
707-
description=resource.get('Description'),
708-
fingerprint=resource['Fingerprint'],
709-
name=resource['Name'],
710-
path=resource['Path'],
711-
revision=resource['Revision'],
712-
size=resource['Size'],
713-
type_=resource['Type'],
730+
request_data = []
731+
for resource in resources_to_update:
732+
request_data.append(client.CharmResource(
733+
description=resource.get('Description', resource.get('description')),
734+
fingerprint=resource.get('Fingerprint', resource.get('fingerprint')),
735+
name=resource.get('Name', resource.get('name')),
736+
path=resource.get('Path', resource.get('filename')),
737+
# revision=-1,
738+
revision=resource.get('Revision', resource.get('revision', -1)),
739+
size=resource.get('Size', resource.get('size')),
740+
type_=resource.get('Type', resource.get('type')),
714741
origin='store',
715-
) for resource in resources_to_update
716-
]
742+
))
717743
response = await resources_facade.AddPendingResources(
718744
application_tag=self.tag,
719745
charm_url=charm_url,
720-
resources=request_data
746+
resources=request_data,
747+
charm_origin=dest_origin,
721748
)
722749
pending_ids = response.pending_ids
723750
resource_ids = {
724-
resource['Name']: id
751+
resource.get('Name', resource.get('name')): id
725752
for resource, id in zip(resources_to_update, pending_ids)
726753
}
727754
else:
@@ -730,8 +757,8 @@ async def refresh(
730757
# Update application
731758
await app_facade.SetCharm(
732759
application=self.entity_id,
733-
channel=channel,
734760
charm_url=charm_url,
761+
charm_origin=dest_origin,
735762
config_settings=None,
736763
config_settings_yaml=None,
737764
force=force,

0 commit comments

Comments
 (0)