Ansible将子网掩码转换为通配符掩码

时间:2016-01-12 22:13:30

标签: python jinja2 ansible

我在ansible中有一个子网掩码,我想将它转换为每个八位字节的通配符掩码(255 - 当前),因此 http://wintelguy.com/2009/20090410_subnets.html

我知道我需要使用set_fact,但我不确定如何拆分掩码并转换每个八位字节。

255.255.255.224

255 - 255 = 0 255 - 224 = 31

所以它等于0.0.0.31

由于

1 个答案:

答案 0 :(得分:2)

使用Ansible任务执行此操作会变得非常复杂。在模板中,它会变得更容易。但您可以做的最好的事情是创建自定义查找插件。

这样的事情:

import ansible.errors as errors

class LookupModule(object):

    def __init__(self, basedir=None, **kwargs):
        self.basedir = basedir

    def run(self, terms, inject=None, **kwargs):

        if not isinstance(terms, basestring):
            raise errors.AnsibleError("lookup expects a string (IP address)")

        parts = terms.split(".")
        l = map(lambda x: str(255-int(x)), parts)
        return [".".join(l)]

将其作为plugins/lookup/wildcard_mask.py保存在项目中,然后将其命名为

{{ lookup('wildcard_mask', '255.255.255.224') }}

应该与Ansible 1.x一起使用 - 可能需要对Ansible 2.x进行更改