在Ansible中获取父目录?

时间:2016-02-08 13:54:47

标签: path yaml ansible

有没有办法在Ansible中评估相对路径?

tasks:
  - name: Run docker containers
    include: tasks/dockerup.yml src_code='..'

基本上我有兴趣将源代码路径传递给我的任务。恰好源代码是{{ansible_inventory}}的父路径,但似乎没有任何东西可以实现开箱即用。

----进一步信息----

项目结构:

myproj
  app
  deploy
    deploy.yml

因此,我尝试从app访问deploy.yml

3 个答案:

答案 0 :(得分:22)

我刚看了一眼来源,发现了一个我不知道的过滤器。忘记以前的字符串操作,这很简单:

{{ inventory_dir | dirname }}

Other Useful Filters

上一个回答:

这应该这样做:

{{ inventory_dir.split("/")[0:-1]|join("/") }}

上一个回答:

{{ inventory_dir }}能做你想做的吗?

  

同样可用,inventory_dir是持有Ansible库存主机文件的目录的路径名

或者,如果您的意思是"父目录"你的任务所在角色的路径,{{ role_path }}可能会成功。

  

最后,role_path将返回当前角色的路径名(自1.8起)。这只适用于角色。

来自http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts

答案 1 :(得分:2)

您可以使用{{playbook_dir}}作为当前playbook运行的绝对路径。 对我来说这是最好的方式,因为你通常知道你的剧本在哪里。

答案 2 :(得分:0)

好的,解决方法是仅为此使用单独的任务:

tasks:
  - name: Get source code absolute path
    shell: dirname '{{inventory_dir}}'
    register: dirname
  - name: Run docker containers
    include: tasks/dockerup.yml src_code={{dirname.stdout}}

感谢udondan在inventory_dir上暗示我。