我们正在使用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支持它。
答案 0 :(得分:2)
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