variables有通往当前正在执行的剧本的path吗?
是否有一个绝对的path到当前正在执行的剧本?
一些编辑…
我想做什么? 我正在运行/创build一个对本地主机的可靠脚本来configuration一个MySQL泊坞窗,并希望相对于安全脚本安装数据卷。
例如,假设我已经检出一个存储库到~/branch1/
,然后运行ansible-playbook dev.yml
我认为它应该将卷保存到~/branch1/.docker_volume/
。 如果我从~/branch2
运行它,那么它应该将卷configuration为~/branch2/.docker_volume/
。
我还是Ansible的新手。 有没有更好的办法?
你可以使用playbook_dir
variables。
似乎没有一个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中可用