2013-10-15 142 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的文件所涉及的风险。