SaltStack - 如何在版本未更改时重新安装包

SaltStack - How to reinstall package when version did not change

我们正在使用 salt stack 将我们的应用程序部署为 debian 包。该应用程序本身是 Scala 并使用 Java 样式版本控制,例如在开发过程中,版本号保持在例如 1.5.0-SNAPSHOT。但是包本身总是更新的。

问题是salt stack只有在版本更新时才会重新安装。但是对我们来说,版本保持不变,但内容发生了变化。

到目前为止,我们总是首先删除软件包来帮助自己

my-app-removed:   pkg.removed:
  - name: my-app

my-app:   pkg.installed:
  - sources:
    - my-app: salt://my-app-1-5-0-SNAPSHOT.deb

但这总是会重新安装,所以 state.highstate 总是会触发更改。有没有另一种方法,让 debian 上的 dpkg / pkg 也升级相同的版本号,当且仅当内容改变时?

我们还检查了 pkg 状态的验证标志(如果有任何文件更改,它基本上也会安装),但这没有用,文档还说目前只有 yum 支持它。

仅当从属状态发生变化时,onchanges 必要条件才会产生状态 运行。因此,我会保留 .deb 文件的本地缓存,并检测它何时更改,并且仅在文件更改时删除 pkg。 (您也可以从本地缓存文件进行安装。)

snapshot-deb-file:
  file.managed:
    - name: /var/cache/my-app-1-5-0-SNAPSHOT.deb
    - source: salt://my-app-1-5-0-SNAPSHOT.deb

my-app-removed:
  pkg.removed:
    - name: my-app
    - onchanges:
      - file: snapshot-deb-file

my-app:   
  pkg.installed:
    - sources:
      - my-app: /var/cache/my-app-1-5-0-SNAPSHOT.deb