python - 从 Action 插件调用过滤器插件

标签 python ansible pickle ansible-2.x ansible-api

我正在开发一个自定义 Ansible 操作插件。我想从那里计算 CIDR 的网关和子网掩码。这已经可以通过 ipaddr filter 实现。 。有没有办法从操作插件内部调用 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

最佳答案

如果你只需要使用 ipaddr 模块,为什么不直接导入它呢?

>>> from ansible.plugins.filter import ipaddr
>>> dir(ipaddr)
['FilterModule', '_6to4_query', '__builtins__', '__doc__', '__file__', '__metaclass__', '__name__', '__package__', '_bare_query', '_bool_hwaddr_query', '_bool_ipaddr_query', '_broadcast_query', '_cidr_lookup_query', '_cidr_query', '_cisco_query', '_empty_hwaddr_query', '_empty_ipaddr_query', '_gateway_query', '_host_query', '_hostmask_query', '_int_query', '_ip_query', '_ipv4_query', '_ipv6_query', '_link_local_query', '_linux_query', '_loopback_query', '_multicast_query', '_need_netaddr', '_net_query', '_netmask_query', '_network_query', '_postgresql_query', '_prefix_query', '_private_query', '_public_query', '_revdns_query', '_size_query', '_subnet_query', '_type_query', '_unicast_query', '_unix_query', '_version_query', '_win_query', '_wrap_query', 'absolute_import', 'division', 'errors', 'hwaddr', 'ipaddr', 'ipsubnet', 'ipv4', 'ipv6', 'ipwrap', 'macaddr', 'netaddr', 'nthhost', 'partial', 'print_function', 'slaac', 'types']

关于python - 从 Action 插件调用过滤器插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322691/

相关文章:

python - pymongo 集合对象序列化 __getnewargs__ 方法

Python 序列化 - 为什么pickle?

python - 如何从服务器运行程序访问fb访问 token (python)

python - 在 Python 中查找最接近的值并返回数组的索引

Ansible权限问题

ansible - ssl : auth method ssl requires a password

python - 如何使用 Python 对列表中的单词进行笛卡尔积

python - 针对峰值需求优化 django 和 mysql

python - Ansible:如何迭代 `stat` 提供的字典中的路径?

python - 如何比 cPickle 更快地将 1GB 的对象反序列化为 Python?