繁体   English   中英

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

[英]Ansible convert subnet mask to wildcard mask

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

我知道我将需要对此使用set_fact,但是我不确定如何分割掩码并转换每个八位位组。

255.255.255.224

255-255 = 0255-224 = 31

所以等于0.0.0.31

谢谢

使用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进行更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM