我正在开发一个自定义 Ansible 动作插件。从那里我想从 CIDR 计算网关和子网掩码。使用ipaddr 过滤器已经可以做到这一点。有没有办法从动作插件内部调用 ipaddr 过滤器,而不是复制代码?
我知道您可以像这样从动作插件调用模块:
self._execute_module(...)
像这样的东西可用于过滤器吗?
我查看了 Ansible 的源代码并找到了filter_loader
该类,但还没有弄清楚如何使用它。
from ansible.errors import AnsibleError, AnsibleFilterError
from ansible.plugins import filter_loader
...
ipaddr = filter_loader.get('ipaddr')
这会导致一个错误,我想如果不对 ipaddr 过滤器本身进行修改,我就无法避免,这当然是没有选择的。
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/queues.py", line 266, in _feed
send(obj)
PicklingError: Can't pickle <class '/usr/lib/python2.7/site-packages/ansible/plugins/filter/ipaddr.FilterModule'>: import of module /usr/lib/python2.7/site-packages/ansible/plugins/filter/ipaddr failed