diff --git a/ansible/plugins/filter/filters.py b/ansible/plugins/filter/filters.py index 26222e1b4..0f65a0f90 100644 --- a/ansible/plugins/filter/filters.py +++ b/ansible/plugins/filter/filters.py @@ -29,13 +29,11 @@ def match_key(value, dictionary, raise_error=True, feedback_name='os'): for key, val in dictionary.items(): - # yes, yes; we can lambda this but my old self in - # two years will cry having to understand - if type(val) is list: - for list_key in val: - if value.startswith(list_key): - return key - elif value.startswith(val): + if isinstance(val, str) and value.startswith(val): + return key + # `val` can be a simple list in Ansible <=11, + # or a `_AnsibleLazyTemplateList` in Ansible >=12. + if not isinstance(val, str) and value.startswith(tuple(val)): return key if raise_error: raise AnsibleFilterError( diff --git a/ansible/roles/baselayout/tasks/main.yml b/ansible/roles/baselayout/tasks/main.yml index 08f1d558f..30908fb9c 100644 --- a/ansible/roles/baselayout/tasks/main.yml +++ b/ansible/roles/baselayout/tasks/main.yml @@ -69,10 +69,10 @@ notify: package updated with_items: # ansible doesn't like empty lists - - "{{ packages[os+'_'+arch]|default('[]') }}" - - "{{ packages[os]|default('[]') }}" - - "{{ packages[os|stripversion]|default('[]') }}" - - "{{ common_packages|default('[]') }}" + - "{{ packages[os+'_'+arch]|default([]) }}" + - "{{ packages[os]|default([]) }}" + - "{{ packages[os|stripversion]|default([]) }}" + - "{{ common_packages|default([]) }}" # Currently does not work on the DTK for 11.0 - The unsupported warnings cause the task to fail - name: install packages (macos) @@ -83,10 +83,10 @@ loop_var: package with_items: # ansible doesn't like empty lists - - "{{ packages[os+'_'+arch]|default('[]') }}" - - "{{ packages[os]|default('[]') }}" - - "{{ packages[os|stripversion]|default('[]') }}" - - "{{ common_packages|default('[]') }}" + - "{{ packages[os+'_'+arch]|default([]) }}" + - "{{ packages[os]|default([]) }}" + - "{{ packages[os|stripversion]|default([]) }}" + - "{{ common_packages|default([]) }}" - name: ubuntu1604 | update package alternatives when: os == "ubuntu1604" diff --git a/ansible/roles/docker/tasks/main.yml b/ansible/roles/docker/tasks/main.yml index 071793131..c9992bd3a 100644 --- a/ansible/roles/docker/tasks/main.yml +++ b/ansible/roles/docker/tasks/main.yml @@ -36,9 +36,9 @@ loop_var: package with_items: # ansible doesn't like empty lists - - "{{ packages[os]|default('[]') }}" - - "{{ packages[os|stripversion]|default('[]') }}" - - "{{ common_packages|default('[]') }}" + - "{{ packages[os]|default([]) }}" + - "{{ packages[os|stripversion]|default([]) }}" + - "{{ common_packages|default([]) }}" - name: remove fortune from login shells when: os|stripversion == 'freebsd' diff --git a/ansible/roles/gn/tasks/partials/rhel8.yml b/ansible/roles/gn/tasks/partials/rhel8.yml index 5363dc5e6..990363fa0 100644 --- a/ansible/roles/gn/tasks/partials/rhel8.yml +++ b/ansible/roles/gn/tasks/partials/rhel8.yml @@ -11,6 +11,6 @@ notify: package updated with_items: # ansible doesn't like empty lists - - "{{ packages[os+'_'+arch]|default('[]') }}" - - "{{ packages[os]|default('[]') }}" - - "{{ packages[os|stripversion]|default('[]') }}" \ No newline at end of file + - "{{ packages[os+'_'+arch]|default([]) }}" + - "{{ packages[os]|default([]) }}" + - "{{ packages[os|stripversion]|default([]) }}" \ No newline at end of file diff --git a/ansible/roles/ninja-build/tasks/partials/rhel8.yml b/ansible/roles/ninja-build/tasks/partials/rhel8.yml index c3856bc66..ff808e4d9 100644 --- a/ansible/roles/ninja-build/tasks/partials/rhel8.yml +++ b/ansible/roles/ninja-build/tasks/partials/rhel8.yml @@ -11,6 +11,6 @@ notify: package updated with_items: # ansible doesn't like empty lists - - "{{ packages[os+'_'+arch]|default('[]') }}" - - "{{ packages[os]|default('[]') }}" - - "{{ packages[os|stripversion]|default('[]') }}" + - "{{ packages[os+'_'+arch]|default([]) }}" + - "{{ packages[os]|default([]) }}" + - "{{ packages[os|stripversion]|default([]) }}"