如何检查 AWS S3 同步是否有任何更改?

How can I check if AWS S3 sync has any changes?

我在 Amazon S3 存储桶中有一些文件,我正在使用 SaltStack 将所有这些文件复制到 minion 上的一个目录中。

不幸的是,SaltStack 还不能从 S3 复制整个目录(目前),所以我求助于使用 awscli。它几乎完美地工作。

它可以同步 S3 存储桶和我的目录(万岁!),它甚至有一个 --dryrun 标志(甚至更好!),但不幸的是我想不出办法让它做到 我可以用 Salt 捕获的东西 说没有变化。

我的 Salt 状态如下所示:

copy-my-dir:
  file.directory:
    - name: /path/to/my/dir
    - makedirs: True
  cmd.run:
    - name: "aws s3 sync s3://my-bucket/ /path/to/my/dir"
    - unless: "What goes here?"

我已经尝试 --dry-run for "what goes here?" 但是 aws s3 sync returns 0 无论是否有文件要同步。

我尝试了 aws --output json s3 sync --dry-run 但这甚至没有做任何有用的事情(即它没有输出 JSON 我可以告诉,至少在 运行通过 salt 'minion' cmd.run "aws...".

那么我如何判断我的 Amazon S3 存储桶和我的目录之间是否存在任何差异,以便我可以有条件地执行 SaltStack 状态?

事实证明,出色的 grep 实用程序可以满足我的需要:

- onlyif: "aws s3 sync --dryrun s3://my-bucket /path/to/my/dir" | grep download"

如果有事情要做,awscli 会输出download: <filename>,但如果目录同步了,就没有输出。