Ansible 中的搜索路径

您可以控制 Ansible 搜索以在您的控制节点上查找资源的路径(包括配置、模块、角色、ssh 密钥等),以及您正在管理的远程节点上的资源。尽可能使用绝对路径告诉 Ansible 在哪里查找资源。但是,绝对路径并不总是实用的。此页面介绍了 Ansible 如何解释相对搜索路径,以及在 Ansible 无法找到您需要的资源时进行故障排除的方法。

配置路径

默认情况下,这些路径应相对于配置文件。有些路径是专门相对于当前工作目录或剧本的,并在其描述中注明。例如 SSH 密钥会使用当前工作目录,因为它与底层工具的使用方式一致。

任务路径

在任务中使用的相对路径通常指的是托管节点上的远程文件和目录。但是,传递给查找插件的路径以及在动作插件中使用的一些路径(例如 templatecopy 模块的“src”路径)指的是控制节点上的本地文件和目录。

解析本地相对路径

当您为本地文件指定相对路径时,Ansible 将首先尝试在当前任务的角色中找到该文件,然后在包含或依赖当前角色的其他角色中查找该文件,然后相对于定义任务的文件查找该文件,最后相对于当前剧本查找该文件。它将找到的第一个匹配文件。这样,如果存在多个具有相同文件名的文件,Ansible 将找到最接近当前任务的文件,该文件最有可能就是您要找的文件。

具体来说,Ansible 按以下顺序尝试查找文件

  1. 在当前角色中。

    1. 在适当的子目录中:“files”、“vars”、“templates”或“tasks”;取决于 Ansible 正在搜索的文件类型。

    2. 直接在它的目录中。

  2. 像 1 一样,在使用 include_roleimport_role 或角色依赖关系调用到当前角色的父角色中。如果父角色有自己的父角色,Ansible 将对该角色重复此步骤。

  3. 像 1 一样,在当前任务文件的目录中。

  4. 像 1 一样,在当前剧本文件的目录中。

Ansible 不会在当前工作目录中搜索本地文件;换句话说,就是您执行 Ansible 的目录。

注意

  • 当前工作目录可能会根据连接插件以及操作是本地还是远程而有所不同。对于远程,它通常是登录 shell 将用户放入的目录。对于本地,它是您执行 Ansible 的目录,或者在某些情况下是剧本目录。

  • 搜索路径上下文是累加的,这意味着 Ansible 在解析文件路径时使用一个“堆栈”上下文。在解析任务中文件的本地相对路径时,使用 include_roleimport_role 语句包含任务的角色的上下文在堆栈中具有最高优先级。如果您使用 include_taskimport_task 语句导入任务,Ansible 将使用导入文件的上下文。

搜索路径故障排除

当您执行 Ansible 时,变量 ansible_search_path 将包含搜索的路径,按搜索顺序排列,但不会列出其子目录。如果您通过传递 -vvvvv 参数在冗余级别 5 中运行 Ansible,Ansible 将在搜索时报告每个目录,除非它正在搜索任务文件。