+ try:
+ image_list = []
+ if filter_dict.get("name"):
+ # name will have the format 'publisher:offer:sku:version'
+ # publisher is required, offer sku and version will be searched if not provided
+ params = filter_dict["name"].split(":")
+ publisher = params[0]
+ if publisher:
+ # obtain offer list
+ offer_list = self._get_offer_list(params, publisher)
+ for offer in offer_list:
+ # obtain skus
+ sku_list = self._get_sku_list(params, publisher, offer)
+ for sku in sku_list:
+ # if version is defined get directly version, else list images
+ if len(params) == 4 and params[3]:
+ version = params[3]
+ image_list = self._get_version_image_list(publisher, offer, sku, version)
+ else:
+ image_list = self._get_sku_image_list(publisher, offer, sku)
+ else:
+ raise vimconn.vimconnAuthException(
+ "List images in Azure must include name param with at least publisher")
+ else:
+ raise vimconn.vimconnAuthException("List images in Azure must include name param with at"
+ " least publisher")
+
+ return image_list
+ except Exception as e:
+ self._format_vimconn_exception(e)
+
+ def _get_offer_list(self, params, publisher):
+ """
+ Helper method to obtain offer list for defined publisher
+ """
+ if len(params) >= 2 and params[1]:
+ return [params[1]]
+ else:
+ try:
+ # get list of offers from azure
+ result_offers = self.conn_compute.virtual_machine_images.list_offers(self.region, publisher)
+ return [offer.name for offer in result_offers]
+ except CloudError as e:
+ # azure raises CloudError when not found
+ self.logger.info("error listing offers for publisher {}, message: {}".format(publisher, e.message))
+ return []