У меня есть следующий YAML в пьесе Ansible:
offset: "{{ publicip | regex_replace('^.*\\.([0-9]+)$', '\\\\1') | int % (step-1) + 1 }}"
cron_minute_list: "{% for i in range(offset, 60, step) %}{{ i }},{% endfor %}"
Но когда я запускаю playbook, я получаю эту ошибку:
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, поэтому мне не нужно об этом беспокоиться, это тоже будет хорошим ответом.
Насколько я могу судить, вы пытаетесь ввести случайное отображение в минуту своего cron, используя IP-адрес машины. В Ansible есть простой random
фильтр, который, я думаю, идеально подойдет. Соедините это с cron
модуль и ваш playbook должны быть радикально проще.
http://docs.ansible.com/ansible/cron_module.html http://docs.ansible.com/ansible/playbooks_filters.html#random-number-filter
cron_minute: {{ 59 | random(step=10) }}
...
- cron: name="do something" minute="{{ cron_minute }}" job="echo 'I am but a lowly cron job.'"