2
0

helpers.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from cloudbridge.cloud.interfaces.exceptions import InvalidValueException
  2. # def filter_by_tag(list_items, filters):
  3. # """
  4. # This function filter items on the tags
  5. # :param list_items:
  6. # :param filters:
  7. # :return:
  8. # """
  9. # filtered_list = []
  10. # if filters:
  11. # for obj in list_items:
  12. # for key in filters:
  13. # if obj.tags and filters[key] in obj.tags.get(key, ''):
  14. # filtered_list.append(obj)
  15. #
  16. # return filtered_list
  17. # else:
  18. # return list_items
  19. def parse_url(template_urls, original_url):
  20. """
  21. In Azure all the resource IDs are returned as URIs.
  22. ex: '/subscriptions/{subscriptionId}/resourceGroups/' \
  23. '{resourceGroupName}/providers/Microsoft.Compute/' \
  24. 'virtualMachines/{vmName}'
  25. This function splits the resource ID based on the template urls passed
  26. and returning the dictionary.
  27. The only exception to that format are image URN's which are used for
  28. public gallery references:
  29. https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cli-ps-findimage
  30. """
  31. if not original_url:
  32. raise InvalidValueException(template_urls, original_url)
  33. original_url_parts = original_url.split('/')
  34. if len(original_url_parts) == 1:
  35. original_url_parts = original_url.split(':')
  36. for each_template in template_urls:
  37. template_url_parts = each_template.split('/')
  38. if len(template_url_parts) == 1:
  39. template_url_parts = each_template.split(':')
  40. if len(template_url_parts) == len(original_url_parts):
  41. break
  42. if len(template_url_parts) != len(original_url_parts):
  43. raise InvalidValueException(template_urls, original_url)
  44. resource_param = {}
  45. for key, value in zip(template_url_parts, original_url_parts):
  46. if key.startswith('{') and key.endswith('}'):
  47. resource_param.update({key[1:-1]: value})
  48. return resource_param
  49. def generate_urn(gallery_image):
  50. """
  51. This function takes an azure gallery image and outputs a corresponding URN
  52. :param gallery_image: a GalleryImageReference object
  53. :return: URN as string
  54. """
  55. reference_dict = gallery_image.as_dict()
  56. return ':'.join([reference_dict['publisher'],
  57. reference_dict['offer'],
  58. reference_dict['sku'],
  59. reference_dict['version']])