检测inventory_hostname的最后三个字符是奇数还是偶数

时间:2016-04-12 22:04:44

标签: ansible

我有一个用例,我需要根据Ansible playbook中的主机名分配不同的服务器,如果它是奇数或偶数。例如,如果服务器是奇数:

host: myhost-001.example.com server: myserver-003.example.com

如果它不奇怪,那么它必须是偶数,所以我会分配一个不同的服务器:

host: myhost-002.example.com server: myserver-002.example.com

有什么想法吗?

1 个答案:

答案 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