2015-07-19 58 views
5

salt.states.file.managed需要source_hash作爲驗證下載文件的參數。這阻止我使用file.managed作爲我無法控制的在線服務器上的文件。該文件也會定期更改。我的配置看起來像這樣。使用file.managed在Salt中下載文件

download_stuff: 
    file.managed: 
    - name: localfile.tar.gz 
    - source: http://someserver.net/onlinefile.tar.gz 
    - source_hash: ??? 

我不想使用cmd.runCurlwget,因爲這將始終下載該文件,甚至當它已經在本地機器上。

我想知道,如果下面的選項之一是可能的/存在:

  • 在線MD5計算服務。有沒有辦法通過免費的網絡服務獲得文件的md5散列?我正在考慮像http://md5service.net?url={url-to-file}
  • salt-internal conversion or workaround。 Salt可以處理這個問題嗎?也許通過不知何故退出source_hash
  • 替代狀態。 Salt中是否有另一個國家做這樣的事情,而不會失去只在需要時下載文件的好處?
+0

你爲什麼不添加爲糧食下載的軟件包的散列的當前值和下一次?將哈希與新包進行比較? – tudoricc

+0

@tudoricc我想下載([Craft](http://buildwithcraft.com))的最新版本。鏈接始終保持不變,但一旦發佈,它就會重定向到新版本。 – cdMinix

+0

@tudoricc同時感謝您的提問,我補充說這個文件偶爾會改變這個問題。 – cdMinix

回答

5

如果您無法控制其他服務器,請確保您可以信任它下載其內容。不使用散列會阻止您檢測部分或損壞的下載。也無法處理遠程服務器上已更改的文件。

不過,你可以使用這樣的狀態來規避哈希碼。該creates部分將防止一旦文件被下載的第二下載:您希望只下載

bootstrap: 
    cmd.run: 
    - name: curl -L https://bootstrap.saltstack.com -o /etc/salt/cloud.deploy.d/bootstrap-salt.sh 
    - creates: /etc/salt/cloud.deploy.d/bootstrap-salt.sh 
+0

我不想使用''curl''或''wget'',因爲這將永遠下載並安裝/解壓縮文件,即使它沒有改變。 – cdMinix

+2

@cdMinix - 此狀態將只下載一次該文件。 'creates'阻止第二次下載。有關詳細信息,請參閱http://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html。 – ahus1