在 Ansible Jinja2 过滤器中强制使用整数类型

在 Ansible Jinja2 过滤器中强制使用整数类型

我在 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.'"

相关内容