我有一个用例,我需要根据Ansible playbook中的主机名分配不同的服务器,如果它是奇数或偶数。例如,如果服务器是奇数:
host: myhost-001.example.com server: myserver-003.example.com
如果它不奇怪,那么它必须是偶数,所以我会分配一个不同的服务器:
host: myhost-002.example.com server: myserver-002.example.com
有什么想法吗?
答案 0 :(得分:2)
有趣的问题。您可以使用jinja过滤器执行此操作:
{{ 'myhost-002.example.com'|regex_replace('(myhost-)(?P<id>\d\d\d)(\.example\.com)', '\\g<id>')|int is divisibleby 2 }}
让我们分解一下来解释一下:
'myhost-002.example.com'
首先,我假设主变量的格式如上所示。
|regex_replace('(myhost-)(?P<id>\d\d\d)(\.example\.com)', '\\g<id>')
我使用命名参数进行正则表达式替换,仅保留id
参数,在上面的示例中我假设为三个数字\d\d\d
。这应该返回'002'
。
|int is divisibleby 2
然后我检查上面的整数是否可被2整除,以确定是奇数还是偶数。
测试:
ansible localhost -m debug -a "msg={{ 'myhost-002.example.com'|regex_replace('(myhost-)(?P<id>\d\d\d)(\.example\.com)', '\\g<id>')|int is divisibleby 2 }}"
localhost | SUCCESS => {
"msg": true
}
有用的链接:Ansible Jinja2 filters