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

Way*_*ner 5 command-line amazon-s3 amazon-web-services salt-stack

我在 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?"
Run Code Online (Sandbox Code Playgroud)

我试过--dry-run“这里有什么?” 但是无论是否有要同步的文件,aws s3 sync 都会返回 0。

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

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

Way*_*ner 4

事实证明,这个奇妙的grep实用程序完全可以满足我的需要:

- onlyif: "aws s3 sync --dryrun s3://my-bucket /path/to/my/dir" | grep download"
Run Code Online (Sandbox Code Playgroud)

如果有事情要做,awscli 将输出download: <filename>,但如果目录已同步,则不会有输出。

  • 这是一个很好的解决方案,但我建议使用 grep 模式更加精确,以避免误报。`^download:` 会更安全。 (3认同)