diff options
Diffstat (limited to 'roles/raspios/image/filter_plugins/main.py')
-rw-r--r-- | roles/raspios/image/filter_plugins/main.py | 43 |
1 files changed, 16 insertions, 27 deletions
diff --git a/roles/raspios/image/filter_plugins/main.py b/roles/raspios/image/filter_plugins/main.py index a8086f66..5ac2d5ab 100644 --- a/roles/raspios/image/filter_plugins/main.py +++ b/roles/raspios/image/filter_plugins/main.py @@ -6,42 +6,32 @@ from ansible import errors from urllib.parse import urlparse, urlunparse -def raspios_extract_download_base_url(os_list, variant, codename, arch): - try: - os_name = 'Raspberry Pi OS ' - if variant != 'desktop': - os_name += '%s ' % variant.capitalize() - os_name += {'armhf': '(32-bit)', 'arm64': '(64-bit)'}[arch] +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 - for item in os_list: - if item['os_name'] != os_name: + if 'url' in item: + result = urlparse(item['url']) + if not os.path.basename(result.path).endswith(image_name_suffix): continue - if item['version'] != codename: - continue - result = urlparse(item['os_info']) - result = result._replace(path=os.path.dirname(result.path)) - return urlunparse(result) - except Exception as e: - raise errors.AnsibleFilterError("raspios_extract_download_base_url(): %s" % str(e)) - raise errors.AnsibleFilterError("unable to find base url for: %s / %s / %s" % (variant, codename, arch)) - - -def _raspios_extract_latest_image_download_url_recursive(items, base_url): - base_url = base_url.replace('http://', 'https://') - for item in items: - if 'url' in item and item['url'].replace('http://', 'https://').startswith(base_url): - return item['url'] + return urlunparse(result) if 'subitems' in item: - result = _raspios_extract_latest_image_download_url_recursive(item['subitems'], base_url) + 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, base_url): +def raspios_extract_latest_image_download_url(os_list, variant, codename, arch): try: - result = _raspios_extract_latest_image_download_url_recursive(os_list, base_url) + 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 @@ -54,7 +44,6 @@ def raspios_extract_latest_image_download_url(os_list, base_url): class FilterModule(object): filter_map = { - 'raspios_extract_download_base_url': raspios_extract_download_base_url, 'raspios_extract_latest_image_download_url': raspios_extract_latest_image_download_url, } |