我有一个目录,将有一系列的子目录添加到它,我只想维护最新的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个或更less的目录。
相反,我得到这个错误消息:
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