Python 中的 Ansible 过滤器 (ipaddr)

Ansible filters (ipaddr) in Python

我正在尝试在 python 中使用 ansible 过滤器 (ipaddr)。

from ansible.plugins.filter import ipaddr
import jinja2

env = jinja2.Environment()
tmpl_string = """test : {{ '10.124.0.0'| ipaddr(-1) }}"""
tmpl = env.from_string(tmpl_string)
print(tmpl.render())

我可以导入 ipaddr 过滤器,没有任何问题,但是当我执行代码时,我收到以下错误:

jinja2.exceptions.TemplateAssertionError: No filter named 'ipaddr'.

您需要在 Jinja 注册一个过滤器才能在模板中使用;请参阅文档的 Custom Filters 部分。你想要:

from ansible.plugins.filter import ipaddr
import jinja2

env = jinja2.Environment()

# tell jinja about the ipaddr filter
env.filters['ipaddr'] = ipaddr

tmpl_string = """test : {{ '10.124.0.0'| ipaddr(-1) }}"""
tmpl = env.from_string(tmpl_string)
print(tmpl.render())