У меня есть каталог, в который будет добавлен ряд подкаталогов, и я хочу поддерживать только самые последние 5. Вот две задачи, которые, как мне кажется, должны выполнить это:
- name: Get directory listing
shell: ls -tr1 chdir={{ project_root}}/sources
register: sources_list
- name: Pare directories
shell: rm -rf {{ sources_list.stdout_lines[0] }}; ls -tr1 chdir={{ project_root}}/sources
register: sources_list
until: sources_list.stdout_lines|length <= 5
retries: 10
Я думаю, что первая задача создаст упорядоченный список имен каталогов и зарегистрирует его в sources_list
. Вторая задача получит имя самого старого каталога (первая строка в sources_list
, rm -rf
его, затем выведите список остальных каталогов. Он будет делать это до тех пор, пока в списке не будет 5 или менее каталогов.
Вместо этого я получаю это сообщение об ошибке:
error while evaluating conditional: sources_list.stdout_lines|length <= 5
Я уже подтвердил это sources_list.stdout_lines|length
оценивает количество файлов в каталоге, и это sources_list
правильно обновляется после первой итерации цикла. Но по какой-то причине это условие не работает. Любое руководство будет оценено.
Сегодня я столкнулся с этой же проблемой. Мне удалось обойти это, разделив stdout вручную следующим образом:
until: sources_list.stdout.split()|length <= 5
Я думаю, что это ошибка, так как stdout_lines и stdout.split () должны давать одинаковый результат. Я отправил сюда отчет об ошибке: https://github.com/ansible/ansible/issues/10334