我有一个目录,其中将添加一系列子目录,并且我只想保留最近的 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
在循环的第一次迭代后正确更新。但由于某种原因,该条件不起作用。任何指导都将不胜感激。
答案1
我今天遇到了同样的问题。我可以通过像这样手动拆分 stdout 来解决这个问题:
until: sources_list.stdout.split()|length <= 5
我认为这是一个错误,因为 stdout_lines 和 stdout.split() 应该给出相同的结果。我在这里提交了一个错误报告: https://github.com/ansible/ansible/issues/10334