Ошибка предполагает, что вы не завернули свою задачу в игру . Необходимо указать хосты, на которых будут выполняться задачи, и другие необязательные параметры.
loop
предпочтительнее, чем with_items
сейчас. Вы также передавали ему список списков.
Пример книги с заданием:
- hosts: <the-hosts-you-want-to-run-the-playbook-on>
tasks:
- name: Touch
file:
path: "{{ item }}"
state: touch
mode: '0777'
when: item | basename is startedwith '__'
loop: "{{ touch_files }}"
Я создал пользовательский тест startedwith
, чтобы сделать его немного более читабельным:
from ansible.errors import AnsibleFilterError
class TestModule(object):
def tests(self):
return {
'startedwith': self.startedwith,
}
def startedwith(self, text, starts):
if not isinstance(text, basestring):
raise AnsibleFilterError(
'Argument to `startedwith` expected to be a string'
)
return text.startswith(starts)
Есть много мест, где вы можете поместить его, но, вероятно, наиболее подходящим является каталог test_plugins
в том же каталоге, что и ваша книга воспроизведения. Назовите файл startedwith.py
или как вам угодно.
Подробнее см. ansible docs .