У меня есть роль ansible с простой задачей поиска файлов по разным путям и оператором отладки, показывающим, что он нашел, выглядит так:
- name: "find smth"
find:
paths: "{{ search_path }}"
file_type: file
patterns: "*.gz"
recurse: no
loop_control:
loop_var: search_path
loop: "{{ search_paths }}"
register: find_result
- debug:
msg: "{{ file_path }}"
loop_control:
loop_var: file_path
loop: "{{ find_result.results | map(attribute='files') | sum(start=[]) | map(attribute='path') | list }}"
Это работает, когда я использую playbook, НО он не работает, когда я вызываю роль через командную строку следующим образом:
ansible HOST -u REMOTE_USER -m include_role -a name=ROLE_NAME -e '{"include": {"step1": "06_test"}}' -e '{"search_paths":["/tmp","/opt/tmp"]}'
main.yml (просто для объяснения включения step1):
- include: "{{ item.value }}.yml"
loop: "{{ lookup('dict', include, wantlist=True) }}"
В этом случае задача отладки всегда печатает:
HOST | SUCCESS => {
"msg": "All items completed"
}
Это сообщение результата l oop, зарегистрированная структура find_result присутствует, но я не могу получить к ней доступ через l oop в задаче отладки. Однако доступ к значению работает (например, msg: "{{find_result.results [0] .files [0] .path}}").
Я использую ansible в версии 2.9.9 с python 3.5.7 на debian stretch. Вышеуказанные задачи представляют собой лишь частичную проверку реального сценария.