diff options
Diffstat (limited to 'roles/installer/raspios/image/filter_plugins/main.py')
-rw-r--r-- | roles/installer/raspios/image/filter_plugins/main.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/roles/installer/raspios/image/filter_plugins/main.py b/roles/installer/raspios/image/filter_plugins/main.py new file mode 100644 index 00000000..5ac2d5ab --- /dev/null +++ b/roles/installer/raspios/image/filter_plugins/main.py @@ -0,0 +1,51 @@ +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import os +from ansible import errors +from urllib.parse import urlparse, urlunparse + + +def _raspios_extract_latest_image_download_url_recursive(items, image_name_suffix): + for item in items: + if not item['name'].startswith('Raspberry Pi OS '): + continue + + if 'url' in item: + result = urlparse(item['url']) + if not os.path.basename(result.path).endswith(image_name_suffix): + continue + + return urlunparse(result) + if 'subitems' in item: + result = _raspios_extract_latest_image_download_url_recursive(item['subitems'], image_name_suffix) + if result: + return result + return None + + +def raspios_extract_latest_image_download_url(os_list, variant, codename, arch): + try: + image_name_suffix = 'raspios-%s-%s' % (codename, arch) + if variant != 'desktop': + image_name_suffix += '-%s' % variant + image_name_suffix += '.img.xz' + + result = _raspios_extract_latest_image_download_url_recursive(os_list, image_name_suffix) + if result: + return result + + except Exception as e: + raise errors.AnsibleFilterError("raspios_extract_latest_image_download_url: %s" % str(e)) + + raise errors.AnsibleFilterError("unable to find latest image url for: %s" % (base_url)) + + +class FilterModule(object): + + filter_map = { + 'raspios_extract_latest_image_download_url': raspios_extract_latest_image_download_url, + } + + def filters(self): + return self.filter_map |