我想在本地运行一个Ansible Playbook(主机是localhost,例如-i "localhost,"),并且在Playbook内获取从中调用ansible-playbook命令的工作目录。

但是,当我读出当前的工作目录时在剧本任务中,我获得了剧本本身的目录。

我是否可以引用任何变量来获取控制主机(本地主机)上的工作目录?

我可以通过变量-e进行注入,但是我宁愿回退,如果未设置该变量,我可以从[[local] host)环境中获取它。

评论

我能想到的唯一方法是通过-e选项传递$ PWD,您的剧本不应该从运行命令的位置知道(与shell脚本相同)

目前正与shell脚本中的-e project_dir =“ $(pwd -P)”类似的东西,希望能够摆脱这种情况。

我不得不问,但是为什么您需要在您的剧本中使用该路径?

我想将Ansible用于一些本地任务,也许主要是b / c我很懒。情况是,我有大量的Git存储库,所有的存储库都代表某种项目/角色,我希望随着时间的推移对它们进行通用操作,并为此类过渡编写Ansible剧本是个主意。因此,我要管理的不是本地主机,而是远程主机,但是也许可以将Ansible SSH集成到Git服务器中,并在远程侧进行维护。但是目前这是本地的。如果我可以获得工作目录,则可以直接应用该剧本。

#1 楼

您可以使用env查找插件。总是在控制主机上的“父” ansible进程的上下文中评估插件。

- debug:
    msg: "{{ lookup('env', 'PWD') }}"


可以在这里找到更多查找插件:http://docs.ansible .com / ansible / latest / user_guide / playbooks_lookups.html

评论


正是我想要的。可以将其与任务结合以提供文件输出的当前工作目录。目的地:“ {{lookup('env','PWD')}} / file.txt”

– GameSalutes
19年11月8日在20:03

如docs.ansible.com/ansible/latest/user_guide/…所示,这也是思想事实收集。需要确保安装程序已运行。

–费德里科
20年6月2日,下午4:06

#2 楼

我将使用shell模块运行一个简单的pwd,然后使用寄存器捕获该

然后可以在任何地方重用此


评论


正如OP所说,这将返回剧本目录,而不是执行命令的目录。

–风暴
18-3-28在14:25



是的,这将返回剧本的路径,该路径也可以作为变量使用:playbook_dir。

– hakre
18 Mar 28 '18 at 14:40