Ansible 中的搜索路径

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

配置路径

默认情况下,这些路径应相对于配置文件。有些路径专门相对于当前工作目录或 playbook,并且应在其描述中进行说明。诸如 SSH 密钥之类的内容保留使用当前工作目录,因为它反映了底层工具将如何使用它。

任务路径

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

解析本地相对路径

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

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

  1. 在当前角色中。

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

    2. 直接在其目录中。

  2. 与 1 类似,在使用 include_roleimport_role 或角色依赖项调用此当前角色的父角色中。如果父角色有自己的父角色,Ansible 将对此角色重复此步骤。

  3. 与 1 类似,在当前任务文件的目录中。

  4. 与 1 类似,在当前 playbook 文件的目录中。

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

注意

  • 当前工作目录可能因连接插件以及操作是本地还是远程而异。对于远程操作,它通常是登录 shell 将用户置于其中的目录。对于本地操作,它要么是您从其中执行 Ansible 的目录,要么在某些情况下是 playbook 目录。

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

搜索路径故障排除

当您执行 Ansible 时,变量 ansible_search_path 将包含已搜索的路径,按照搜索顺序排列,但不列出其子目录。如果您通过传递 -vvvvv 参数以详细程度 5 运行 Ansible,Ansible 将在搜索时报告每个目录,但搜索任务文件时除外。