@@ -239,7 +239,7 @@ def get_local_charm_data(path, yaml_file):
239239
240240 :patam str path: Path of charm directory or .charm file
241241 :patam str yaml_file: name of the yaml file, can be either
242- "metadata.yaml", or "manifest.yaml"
242+ "metadata.yaml", or "manifest.yaml", or "charmcraft.yaml"
243243
244244 :return: Object of charm metadata
245245 """
@@ -249,6 +249,8 @@ def get_local_charm_data(path, yaml_file):
249249 else :
250250 entity_path = Path (path )
251251 metadata_path = entity_path / yaml_file
252+ if not metadata_path .exists ():
253+ return {}
252254 metadata = yaml .load (metadata_path .read_text (), Loader = yaml .FullLoader )
253255
254256 return metadata
@@ -262,6 +264,10 @@ def get_local_charm_manifest(path):
262264 return get_local_charm_data (path , 'manifest.yaml' )
263265
264266
267+ def get_local_charm_charmcraft_yaml (path ):
268+ return get_local_charm_data (path , 'charmcraft.yaml' )
269+
270+
265271PRECISE = "precise"
266272QUANTAL = "quantal"
267273RARING = "raring"
@@ -376,6 +382,12 @@ def get_local_charm_base(series, channel_from_arg, charm_metadata,
376382 if 'bases' in charm_manifest :
377383 channel_for_base = charm_manifest ['bases' ][0 ]['channel' ]
378384 os_name_for_base = charm_manifest ['bases' ][0 ]['name' ]
385+ else :
386+ # Also check the charmcraft.yaml
387+ charmcraft_yaml = get_local_charm_charmcraft_yaml (charm_path )
388+ if 'bases' in charmcraft_yaml :
389+ channel_for_base = charmcraft_yaml ['bases' ][0 ]['run-on' ][0 ]['channel' ]
390+ os_name_for_base = charmcraft_yaml ['bases' ][0 ]['run-on' ][0 ]['name' ]
379391
380392 if channel_for_base == '' :
381393 raise errors .JujuError ("Unable to determine base for charm : %s" %
0 commit comments