![在 Ansible Jinja2 过滤器中强制使用整数类型](https://linux22.com/image/667046/%E5%9C%A8%20Ansible%20Jinja2%20%E8%BF%87%E6%BB%A4%E5%99%A8%E4%B8%AD%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8%E6%95%B4%E6%95%B0%E7%B1%BB%E5%9E%8B.png)
我在 Ansible 剧本中有以下 YAML:
offset: "{{ publicip | regex_replace('^.*\\.([0-9]+)$', '\\\\1') | int % (step-1) + 1 }}"
cron_minute_list: "{% for i in range(offset, 60, step) %}{{ i }},{% endfor %}"
但是当我运行剧本时,出现此错误:
fatal: [default] => Failed to template */{{ cron_minute_list | regex_replace('.$', '') }}:
Failed to template {% for i in range(int_offset, 60, step) %}{{ i }},{% endfor %}:
an unexpected type error occurred. Error was an integer is required
当我尝试int(offset)
在range
语句中使用时,我遇到了其他错误。| int
在声明末尾附加一个offset
没有任何区别。
似乎没有办法将 的类型设置offset
为整数而不是字符串。我该如何解决这个问题?
如果有另一种方法来制定这样的 cron 计划,那么我就不必担心这个问题,这也是一个很好的答案。
答案1
我能说的是,你正在尝试使用机器的 IP 向你的 cron 分钟引入随机扩展。Ansible 有一个简单的random
过滤器,我认为它非常适合。将它与模块结合起来cron
,你的剧本应该会变得简单得多。
http://docs.ansible.com/ansible/cron_module.html http://docs.ansible.com/ansible/playbooks_filters.html#随机数过滤器
cron_minute: {{ 59 | random(step=10) }}
...
- cron: name="do something" minute="{{ cron_minute }}" job="echo 'I am but a lowly cron job.'"