2013-10-15 181 views
6

在我的劇本我運行執行的腳本和存儲以備將來使用值local_action一個任務文件的目錄:獲取的相對路徑

- local_action: command python release.py 
    register: release_url 

這偉大的工作,直到我動了我的劇本成子目錄。事實證明,從當前工作目錄的命令運行(即您從ansible),因此該路徑必須是這樣的:

- local_action: command python roles/ghost/release.py 

我有如下的目錄結構:

  • group_vars/
  • 角色/
    • 鬼/
      • 任務/
        • main.yml
      • 模板/
      • release.py
  • site.yml

但是角色/ 文件夾的名稱可以改變(並且對此進行硬編碼不會讓您從另一個目錄運行該手冊)。

如何獲得任務/ main.yml(發出local_action命令)的目錄路徑,所以我可以給它一個相對路徑?

回答

0

在我看到這個SO問題之前,我提交了一個pull request,但這是它的要點。

  1. 移動腳本在「文件」目錄中的角色
  2. 中。由於我們無法知道該腳本會在哪條路,把它複製到/ tmp:

    - name: copy ghost release script to tmp 
        local_action: copy src=release.py dest=/tmp/release.py 
        sudo: no 
    
  3. 然後我們就可以運行該腳本

    - name: get ghost release version 
        local_action: command python /tmp/release.py 
        register: ghost_release 
        sudo: no 
    

我們選擇外部劇本將全局設置爲on時爲。我們不需要root來執行此操作,並且如果需要密碼,它可能會破壞正確的運行。

也可能有更好的方法來做第2步,通過使用事實以某種方式隨機化文件名,然後在我們運行腳本後在額外的步驟中刪除文件。這可以最大限度地降低可能存在名爲/tmp/release.py的文件所涉及的風險。