Назад | Перейти на главную страницу

Использование цикла Ansible Do-until для управления устаревшими каталогами

У меня есть каталог, в который будет добавлен ряд подкаталогов, и я хочу поддерживать только самые последние 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