blob: 5ac2d5ab0ca87180983f15415da3f6c563fc034c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
|