我使用以下方法为盐奴隶提供捆绑的软件项目:
proj-archive:
cmd:
- run
- name: "/bin/tar -zxf /home/myhome/Proj.tgz -C {{ proj_dir }}"
- require:
- file: /home/myhome/Proj.tgz
- {{ proj_dir }}
file:
- managed
- user: someone
- group: someone
- mode: '0600'
- makedirs: True
- name: /home/myhome/Proj.tgz
- source: salt://Proj.tgz
据我所知,它完成了这项工作,但这些规则始终处于活动状态,即使存档未更改也是如此。这带来了不必要的部署延迟。在类似的情况下,例如,在文件上使用watch
子句重新启动服务,可以在文件更改时重新启动。如何告诉salt只有在改变时才通过网络复制文件?有没有自动的方法呢?
salt目录中的 Proj.tgz
是文件位置的符号链接,如果重要的话。
archive.extracted
没有那么有用,因为当文件内部没有更改,档案中没有添加或删除文件时,它不会触发。
一些相关信息https://github.com/saltstack/salt/issues/40484,但我不确定解决方案/解决方法。
答案 0 :(得分:0)
您可以使用salt.states.archive替换这两种状态。它可能看起来像这样:
proj-archive:
archive.extracted:
- name: {{ proj_dir }}
- source: salt://Proj.tgz
- user: someone
- group: someone
- source_hash_update: True
这里的关键功能是source_hash_update
。来自文档:
如果source_hash已更改,则应解压缩归档,将其设置为
True
。无论if_missing
参数如何,都会提取。
我不确定档案是否会在每个state.apply
上转移。但我想它不会。