variables有通往当前正在执行的剧本的path吗?

是否有一个绝对的path到当前正在执行的剧本?

一些编辑…

我想做什么? 我正在运行/创build一个对本地主机的可靠脚本来configuration一个MySQL泊坞窗,并希望相对于安全脚本安装数据卷。

例如,假设我已经检出一个存储库到~/branch1/ ,然后运行ansible-playbook dev.yml我认为它应该将卷保存到~/branch1/.docker_volume/ 。 如果我从~/branch2运行它,那么它应该将卷configuration为~/branch2/.docker_volume/

我还是Ansible的新手。 有没有更好的办法?

你可以使用playbook_dirvariables。

似乎没有一个variables,正是你想要的东西。

但是,引用文档 :

还有, inventory_dir是存放Ansible库存主机文件的目录的path名, inventory_file是指向Ansible库存主机文件的path名和文件名。

playbook_dir包含剧本基本目录。

最后, role_path将返回当前angular色的path名(自1.8开始)。 这只会在一个angular色内部起作用。

这取决于你的设置,这些或基于$ pwd的解决scheme可能就足够了。

我正在使用这样的剧本在本地testing我的angular色:

 --- - hosts: localhost roles: - role: . 

但是这停止了与Ansible v2.2的工作。

我debugging了上述的解决scheme

 --- - 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}}' 

根据上面的解决scheme。

不幸的是没有。 事实上,在Ansible的运行环境中,绝对path是没有意义的(也可能是混淆)。 简而言之,当您调用Playbook时,对于每个任务,Ansible会将与任务关联的模块物理复制到目标机器上的临时目录,然后调用具有必要参数的模块。 所以目标机器上的绝对path只是一个只包含几个临时文件的临时目录,甚至不包含完整的操作手册。 此外,知道Ansible服务器上文件的完整path在目标机器上几乎是无用的,除非您要在目标上复制整个Ansible目录树。

要查看由Ansible定义的所有variables,只需运行以下命令 :

 $ ansible -m setup hostname 

你认为你需要知道手册的绝对path是什么原因?

没有内置variables用于此目的,但是您可以随时通过“pwd”命令查找剧本的绝对path,并将其输出注册到variables。

 - name: Find out playbook's path shell: pwd register: playbook_path_output - debug: debug: var=playbook_path_output.stdout 

现在path在variablesplaybook_path_output.stdout中可用