2017-07-27 50 views
0

我使用以下方式提供捆綁的軟件項目,鹽爪牙:如何僅在鹽中改變文件時才傳輸文件?

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只有在網絡發生變化時才通過網絡複製文件?有沒有自動的方法來做到這一點?

Proj.tgz在鹽目錄中是一個符號鏈接文件的位置,如果它很重要。

archive.extracted不是很有用,因爲它不會在文件內發生更改時觸發,也不會在存檔中添加或刪除文件。

一些相關信息https://github.com/saltstack/salt/issues/40484,但我不確定分辨率/解決方法。

回答

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上傳輸。但我猜這不會。

+0

不錯!但是,這需要'source_hash'才能工作。那麼,我是否應該維護一些散列文件呢? –

+0

難道他們不是自己計算哈希值嗎?也許和'keep'參數一起不要刪除本地存檔? – dahrens

+0

我加了'source_hash'和'skip_verify'。似乎唯一的變化是現在正在更新所有權... –

相關問題