问题描述
在运行Ansible Playbook时,希望在本地(控制主机为localhost)运行Playbook,并在Playbook内部获取调用ansible-playbook
命令时所在的工作目录。然而,当用户在Playbook的任务中读取当前工作目录时,却得到了Playbook本身所在的目录。用户想知道是否有任何变量可以用来获取控制主机(本地主机)中的工作目录。
解决方案
请注意以下操作可能受版本差异影响,或需要先备份数据。
最佳解决方案
您可以使用env
查找插件来实现这个需求。查找插件始终在控制主机上的”父”Ansible进程上下文中进行评估。
以下是在Ansible Playbook中获取控制主机工作目录的步骤:
1. 在Playbook任务中使用debug
模块。
2. 使用lookup
函数和'env'
参数来调用env
查找插件,获取控制主机的当前工作目录。
以下是一个示例Playbook任务:
---
- name: Get Current Working Directory
hosts: localhost
tasks:
- name: Debug Current Working Directory
debug:
msg: "{{ lookup('env', 'PWD') }}"
在上面的示例中,我们定义了一个名为Get Current Working Directory
的Playbook任务,该任务在localhost
主机上执行。在任务内部,我们使用了debug
模块,并在msg
属性中调用了lookup
函数来获取控制主机的当前工作目录。
使用以上步骤,您将能够在Playbook任务中获取到控制主机的工作目录。
请注意,Ansible还提供了其他查找插件,您可以在这里查看更多的插件:Ansible官方文档 – 查找插件
备选方案
使用
shell
模块或setup
事实收集方法来实现获取工作目录的需求可能会受限于环境和系统配置。
另一种方法是使用shell
模块或setup
事实收集方法来获取工作目录。下面是这些方法的示例:
使用shell
模块
您可以使用shell
模块来运行pwd
命令,并使用register
选项来捕获结果。然后,您可以在Playbook的其他任务中重用该结果。
以下是一个示例Playbook任务:
---
- name: Get Current Working Directory
hosts: localhost
tasks:
- name: Run pwd command
shell: pwd
register: current_working_directory
- name: Debug Current Working Directory
debug:
var: current_working_directory.stdout
使用setup
事实收集方法
您还可以使用setup
事实收集方法来获取有关主机的信息,其中包括控制主机的当前工作目录。请注意,这可能需要确保setup
已经在目标主机上运行过。
以下是一个示例Playbook任务:
---
- name: Get Current Working Directory
hosts: localhost
tasks:
- name: Debug Current Working Directory
debug:
var: ansible_env.PWD
请注意,以上备选方案可能会受到系统环境和配置的影响,具体取决于您的使用情况。
结论
通过使用env
查找插件或其他备选方案,您可以在Ansible Playbook中获取控制主机的工作目录。根据您的实际需求和系统配置,选择适合您的方法来获取这个信息,以便在Playbook中使用。