Ansible-如何在命令中循环项,直到注册的变量相等?

Ansible-如何在命令中循环项,直到注册的变量相等?,ansible,tail,Ansible,Tail,我正在尝试查找文件在过去15秒内是否有写入操作 - name: 'Check File for Writes' shell: tail -n 50 /path/to/some/file | sha1sum loop: - 1 - 2 register: file_writes loop_control: pause: 15 until: file_writes.results[0].stdout == file_writes.results[1].st

我正在尝试查找文件在过去15秒内是否有写入操作

- name: 'Check File for Writes'
  shell: tail -n 50 /path/to/some/file | sha1sum
  loop:
    - 1
    - 2
  register: file_writes
  loop_control:
    pause: 15
  until: file_writes.results[0].stdout == file_writes.results[1].stdout
预期的行为如下所示:
1.)此任务将运行一次“tail”命令
2.)然后它将等待15秒
3.)然后再次运行“tail”命令
4.)两个tail命令的输出都将在“文件_写入”中注册。结果
5.)步骤1到4将循环,直到第一个“tail”命令的哈希值与第二个“tail”命令的哈希值匹配


实际结果:

'dict object'没有属性结果。

可以将所有逻辑放入脚本中

- shell: "hash0=$(tail -n 50 /path/to/some/file | sha1sum);
          sleep 15;
          hash1=$(tail -n 50 /path/to/some/file | sha1sum);
          while [ \"$hash0\" != \"$hash1\" ]; do
               sleep 15;
               hash0=$hash1;
               hash1=$(tail -n 50 /path/to/some/file | sha1sum);
          done;"

可以将所有逻辑放入脚本中

- shell: "hash0=$(tail -n 50 /path/to/some/file | sha1sum);
          sleep 15;
          hash1=$(tail -n 50 /path/to/some/file | sha1sum);
          while [ \"$hash0\" != \"$hash1\" ]; do
               sleep 15;
               hash0=$hash1;
               hash1=$(tail -n 50 /path/to/some/file | sha1sum);
          done;"

tail-n有什么用?如果行数少于50行怎么办?我也这么认为,你应该使用时间戳电流-15秒进行比较。这将是一个好的简单方法。有一个ansible模块
stat
,它可以为您提供file@error404-如果文件少于50行,tail只返回文件中的所有行。暂停时间只是在计算第二个哈希值进行比较之前等待新的文件写入的时间量。虽然,你是对的,它不需要等待15秒两次?如果行数少于50行怎么办?我也这么认为,你应该使用时间戳电流-15秒进行比较。这将是一个好的简单方法。有一个ansible模块
stat
,它可以为您提供file@error404-如果文件少于50行,tail只返回文件中的所有行。暂停时间只是在计算第二个哈希值进行比较之前等待新的文件写入的时间量。不过,您是对的,它不需要等待15秒两次。我希望能够确定该文件是否是纯用Ansible写入的。在任务完成之前,我似乎无法检索“注册”结果。我试着写了3个任务:一个用于第一个文件哈希,一个用于中间的暂停,另一个用于第二个哈希。我希望用这三个任务制作一个剧本,然后使用'until'函数运行剧本,直到两个散列相等,但显然'includes'函数尚未实现。我希望能够确定是否纯粹使用Ansible写入文件。在任务完成之前,我似乎无法检索“注册”结果。我试着写了3个任务:一个用于第一个文件哈希,一个用于中间的暂停,另一个用于第二个哈希。我希望用这三个任务制作一个剧本,然后使用'until'函数运行剧本,直到两个散列相等,但显然'includes'还没有实现'until'函数。