在Ansible Playbook中获取控制主机的工作目录

639次阅读
没有评论

问题描述

在运行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中使用。

正文完