2014-03-26 41 views
9

我想要做這樣的事情:檢查文件是否存在,並創建一個符號鏈接

如果文件A存在或不存在的符號連接B,我想創建一個符號乙 - > A.

現在我有:

B: 
    file: 
    - symlink: 
     - target: A 
    - exists: 
     - name: A 

但是,這是不好的,它不檢查我想要的東西。我怎樣才能在鹽中實現這個簡單的東西?

+1

注意,有一個機會,你的狀態會不一致。我們不能有來自同一個狀態模塊的多個函數調用。 (例如'文件')。在標識符B下,不能有'file.symlink'和'file.exists',因爲這兩個函數都是同一個狀態模塊的一部分。這是由Salt在內部處理列表的方式引起的,它最終只剩下一個。 – renoirb

回答

35

我們可以使用file.directory_exists

{% if not salt['file.directory_exists' ]('/symlink/path/A') %} 
symlink: 
    file.symlink: 
    - name: /path/to/A 
    - target: /symlink/path/A 
{% endif %} 
+7

...或用於檢查文件存在的'file_exists'。 – Ztyx

+1

這應該是被接受的答案,它更清晰易讀。 –

+1

我會很喜歡這個,除非我需要一個變量{%if ....'/ symlink/{{here}}/A' – GerardJP

9

你應該使用Dan Garthwaite的優秀答案here作爲如何檢查文件存在的基礎。我修改了他的解決方案來回答你的問題。

{% if 1 == salt['cmd.retcode']('test -f /path/to/A') %} 
/path/to/A: 
    file.symlink: 
    - target: /symlink/path/A 
{% endif %} 
+0

請參閱其他答案以獲得更好的解決方案:http://stackoverflow.com/a/30454953/13713 – Joel

+0

此解決方案的缺點是,儘管您不會因此發生任何失敗狀態,但您可能會有一些當文件/路徑/ to/A不存在時,會在salt輸出中附加錯誤消息。 – Pedreiro

相關問題