如何在盐变化时传输文件?

时间:2017-07-27 17:39:19

标签: salt-stack

我使用以下方法为盐奴隶提供捆绑的软件项目:

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,但我不确定解决方案/解决方法。

1 个答案:

答案 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上转移。但我想它不会。

相关问题