# place me int filter_plugins dir next to your playbook from __future__ import (absolute_import, division, print_function) __metaclass__ = type from ansible.errors import AnsibleError, AnsibleFilterError from ansible.utils.display import Display display = Display() try: import _jsonnet HAS_LIB = True except ImportError: HAS_LIB = False def jsonnet_mixin(data, mixin): '''Evaluates Jsonnet '+ mixin' for a given input. Example: - debug: msg="{{ '{a: 10}' | jsonnet_mixin('{b: self.a}') }}" ''' if not HAS_LIB: raise AnsibleError('You need to install "jsonnet" from pypi') try: return _jsonnet.evaluate_snippet("filter_input", data + '+' + mixin) except Exception as e: # For older jmespath, we can get ValueError and TypeError without much info. raise AnsibleFilterError('Error in jsonnet_mixing filter plugin:\n%s' % e) class FilterModule(object): ''' Query filter ''' def filters(self): return { 'jsonnet_mixin': jsonnet_mixin }