def extract_metadata(metadata, params): """Examine the maas.meta file for any required metadata. :param metadata: contents of the maas.meta file :param params: A dict of path components for the image (architecture, subarchitecture, kflavor, release and label). :return: a dict of name/value metadata pairs. Currently, only "subarches" is extracted. """ mapping = BootImageMapping.load_json(metadata) subarch = params["subarchitecture"] split_subarch = subarch.split('-') if len(split_subarch) > 2: kflavor = split_subarch[2] else: kflavor = 'generic' image = ImageSpec( os=params["osystem"], arch=params["architecture"], subarch=subarch, kflavor=kflavor, release=params["release"], label=params["label"], ) try: # On upgrade from 1.5 to 1.6, the subarches does not exist in the # maas.meta file . Without this catch boot images will fail to # report until the boot images are imported again. subarches = mapping.mapping[image]['subarches'] except KeyError: return {} return dict(supported_subarches=subarches)
def test_load_json_result_of_old_data_uses_ubuntu_as_os(self): test_meta_file_content = make_maas_meta_without_os() mapping = BootImageMapping.load_json(test_meta_file_content) os = {image.os for image, _ in mapping.items()}.pop() self.assertEqual("ubuntu", os)
def test_load_json_returns_empty_mapping_for_invalid_json(self): bad_json = "" mapping = BootImageMapping.load_json(bad_json) self.assertEqual({}, mapping.mapping)
def test_load_json_result_matches_dump_of_own_data(self): # Loading the test data and dumping it again should result in # identical test data. mapping = BootImageMapping.load_json(make_maas_meta()) dumped = mapping.dump_json() self.assertEqual(make_maas_meta(), dumped)