你可以用 host_vars 要么 group_vars ,可以在单独的文件中,也可以直接在库存中。 我将尝试使用库存文件(以及应用cron的playbook)生成一个符合您描述的简单示例:
host_vars
group_vars
[site1] host1 cron_restart_minute=0 host2 cron_restart_minute=30 host3 cron_restart_minute=15 host4 cron_restart_minute=45 [site2] host5 cron_restart_minute=0 host6 cron_restart_minute=30 host7 cron_restart_minute=15 host8 cron_restart_minute=45
这使用主机变量,如果重复出现问题,您还可以创建其他组并使用组变量。
在剧本或角色中,您可以简单地引用该变量。 在同一台主机上:
- name: Configure the cron job cron: # your other options minute: "{{ cron_restart_minute }}"
在另一台主机上,您可以访问其他主机变量,如下所示: hostvars[host2].cron_restart_minute
hostvars[host2].cron_restart_minute
如果您需要更动态的解决方案,例如因为您不断添加和删除主机,则可以使用在任务中设置变量 register 要么 set_fact ,并计算,例如,当前主机所在的唯一组中的主机数。
register
set_fact
例:
- name: Set fact for cron_restart_minute set_fact: cron_restart_minute: "{{ 60 / groups[group_names[0]].length * (1 + groups[group_names[0]].index(inventory_hostname)) | int }}"
我没有测试过这个表达,但我相信它有效。这是Python / Jinja2。 group_names 给出上面的库存是一个1元素数组,因为没有主机同时在两个组中。 groups 包含组中的所有主机,然后我们通过它查找其长度或当前主机的索引 inventory_hostname ( 0 , 1 , 2 , 3 )。
group_names
groups
inventory_hostname
0
1
2
3
相关文档的链接: 库存 变量 特别是 这部分 。