使用 Ansible Do-Until 循环管理过时的目录

使用 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_listrm -rf然后输出其余目录的列表。它将一直执行此操作,直到列表中的目录不超过 5 个。

相反,我收到这个错误信息:

error while evaluating conditional: sources_list.stdout_lines|length <= 5

我已经确认确实sources_list.stdout_lines|length评估了目录中的文件数量,并且sources_list在循环的第一次迭代后正确更新。但由于某种原因,该条件不起作用。任何指导都将不胜感激。

答案1

我今天遇到了同样的问题。我可以通过像这样手动拆分 stdout 来解决这个问题:

until: sources_list.stdout.split()|length <= 5

我认为这是一个错误,因为 stdout_lines 和 stdout.split() 应该给出相同的结果。我在这里提交了一个错误报告: https://github.com/ansible/ansible/issues/10334

相关内容