2014-11-25 34 views

回答

2

經過一些研究和試驗/錯誤。我發現Ansible不能檢查角色之間是否存在文件。這是由於角色依賴關係(哪些角色本身)會擴展到需要的角色依賴關係的方式,使其成爲劇本的一部分。沒有任何任務可以讓您區分my_role/files/my_file.txtrequired_role/files/my_file.txt

一個解決問題的方法(就是我發現的最簡單和乾淨的)是:

  1. 變量與路徑添加到my_role到我想用(覆蓋默認的)文件
  2. 添加來檢查,如果上述變量被定義和使用它

運行任務的任務(等同於使用默認文件中的一個)

required_role

# Existing task 
- name: some task 
    copy: src=roles_file.txt dest=some/directory/file.txt 
    when: my_file_path is not defined 

# My custom task 
- name: my custom task (an alteration of the above task) 
    copy: src={{ my_file_path }} dest=/some/directory/file.txt 
    when: my_file_path is defined 

my_role

#... existing code 
my_file_path: "path/to/my/file" 

正如提到拉蒙·德拉富恩特:該解決方案被接受了入zzet.rbenv repo :)

+1

這工作,但它會如果您所依賴的角色中的任務也使用該文件,則會成爲問題。你的解決方案是一個可靠的解決方案,但我建議向角色所有者發送拉取請求,以便原始角色可以具有可變路徑名稱。它以這種方式爲更靈活的星系角色服務。 – 2014-11-26 10:44:20

+1

哦,我現在看到這個角色支持這個:https://github.com/andradei/ansible-rbenv-role/commit/434602710d8dbd047ad70f24cdc950971a0bdafc好的:-) – 2014-11-26 10:48:09