From 3ab9dddb3ad142c3587197f30f082371ec4ff9aa Mon Sep 17 00:00:00 2001 From: Abhijit Menon-Sen Date: Thu, 25 Aug 2016 22:32:45 +0530 Subject: [PATCH] Make the extract filter return Undefined on KeyError MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit groups['x']|map('extract', hostvars, 'somevar') would break if any host didn't have 'somevar' set. With this change, it will return Undefined instead. This change permits |map('extract', …)|map('default', 42) to set a default value in such cases. --- lib/ansible/plugins/filter/core.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py index 6190cbe9af..5ea24bcd5c 100644 --- a/lib/ansible/plugins/filter/core.py +++ b/lib/ansible/plugins/filter/core.py @@ -363,7 +363,10 @@ def extract(item, container, morekeys=None): if not isinstance(morekeys, list): morekeys = [morekeys] - value = reduce(lambda d, k: d[k], morekeys, value) + try: + value = reduce(lambda d, k: d[k], morekeys, value) + except KeyError: + value = Undefined() return value