是否有一个ansible变量,它具有正在执行的当前ansible-playbook的绝对路径?
某些背景信息:
我正在运行/创建一个针对localhost
的ansible脚本来配置一个mysql docker并希望相对于ansible脚本挂载数据卷。
例如,假设我已将存储库签出到~/branch1/
,然后我运行ansible-playbook dev.yml
我认为它应该将卷保存到~/branch1/.docker_volume/
。如果我从~/branch2
运行它,则应将卷配置为~/branch2/.docker_volume/
。
答案 0 :(得分:137)
您可以使用playbook_dir
变量。
答案 1 :(得分:36)
似乎没有一个变量可以保存你想要的东西。
但是,引用the docs:
同样可用,
inventory_dir
是目录保存的路径名 Ansible的库存主机文件inventory_file
是路径名和 文件名指向Ansible的库存主机文件。playbook_dir包含playbook基目录。
最后,
role_path
将返回当前角色的路径名(因为 1.8)。这只适用于角色。
根据您的设置,这些或基于$ pwd
的解决方案可能就足够了。
答案 2 :(得分:1)
不幸的是没有。实际上,在Ansible如何运行的上下文中,绝对路径有点无意义(并且可能令人困惑)。简而言之,当您调用一个剧本然后为每个任务时,Ansible将与该任务相关联的模块物理复制到目标机器上的临时目录,然后使用必要的参数调用该模块。所以目标机器上的绝对路径只是一个临时目录,其中只包含一些临时文件,甚至不包括完整的剧本。此外,知道Ansible服务器上文件的完整路径在目标计算机上几乎没用,除非您在目标上复制整个Ansible目录树。
要查看Ansible定义的所有变量,您只需运行the following command:
$ ansible -m setup hostname
您认为需要知道剧本的绝对路径的原因是什么?
答案 3 :(得分:1)
我正在使用这样的剧本来测试我在当地的角色:
---
- hosts: localhost
roles:
- role: .
但是这已停止使用Ansible v2.2。
我调试了前面提到的
解决方案---
- hosts: all
tasks:
- name: Find out playbooks path
shell: pwd
register: playbook_path_output
- debug: var=playbook_path_output.stdout
它产生了我的主目录,而不是"当前工作目录"
我和
结算了---
- hosts: all
roles:
- role: '{{playbook_dir}}'
根据上述解决方案。
答案 4 :(得分:0)
没有用于此目的的内置变量,但您总是可以使用“pwd”命令找出playbook的绝对路径,并将其输出注册到变量。
- name: Find out playbook's path
shell: pwd
register: playbook_path_output
- debug:
debug: var=playbook_path_output.stdout
现在路径在变量playbook_path_output.stdout
中可用