我在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
由于
答案 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进行更改