summaryrefslogtreecommitdiff
path: root/roles/installer/raspios/image/filter_plugins/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'roles/installer/raspios/image/filter_plugins/main.py')
-rw-r--r--roles/installer/raspios/image/filter_plugins/main.py51
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