在我的剧本中,我运行一个执行脚本的local_action并存储该值以供将来使用:
- local_action: command python release.py
register: release_url
这很好用,直到我将我的剧本移到子目录中。事实证明,该命令从您当前的工作目录(您运行ansible)运行,因此路径需要如下所示:
- local_action: command python roles/ghost/release.py
我有一个目录结构如下:
然而,角色/ ghost 文件夹名称可以更改(并且硬编码不会让您从另一个目录运行该剧本。)
如何获取tasks / main.yml(发出local_action命令)的目录路径,以便给出相对路径?
答案 0 :(得分:6)
答案 1 :(得分:2)
您可以将release.py脚本放在roles / ghost / files /中,然后将其与local_action一起使用
- name: local scrpt
local_action: script release.py
这样你可能不需要获取目录路径
这引用了在目录布局部分http://www.ansibleworks.com/docs/playbooks_best_practices.html
中这样做答案 2 :(得分:0)
在我看到这个问题之前我提交了pull request,但这是它的要点。
由于我们无法知道脚本将在哪条路径中,因此请将其复制到/ tmp:
- name: copy ghost release script to tmp
local_action: copy src=release.py dest=/tmp/release.py
sudo: no
然后我们可以运行脚本
- name: get ghost release version
local_action: command python /tmp/release.py
register: ghost_release
sudo: no
如果外部剧本将其全局设置为sudo: no
,我们选择on
。我们不需要root用于此操作,如果需要输入密码,它可能会破坏ansible运行。
通过使用事实以某种方式随机化文件名,然后在我们运行脚本后的额外步骤中删除文件,可能还有更好的方法来执行第2步。这可以最大程度地降低可能存在名为/tmp/release.py
的文件所涉及的风险。