Ansible 中的搜索路径
您可以控制 Ansible 搜索的路径,以查找控制节点上的资源(包括配置、模块、角色、ssh 密钥等)以及您正在管理的远程节点上的资源。尽可能使用绝对路径来告诉 Ansible 在哪里查找资源。但是,绝对路径并非总是实用的。本页介绍了 Ansible 如何解释相对搜索路径,以及在 Ansible 找不到您需要的资源时如何进行故障排除。
配置路径
默认情况下,这些路径应该相对于配置文件。有些路径是专门相对于当前工作目录或 playbook 的,并且应该在其描述中注明。诸如 SSH 密钥之类的东西会被保留为使用当前工作目录,因为它反映了底层工具的使用方式。
任务路径
任务中使用的相对路径通常指的是受管节点上的远程文件和目录。但是,传递给 lookup 插件的路径以及在操作插件中使用的一些路径(例如 template 和 copy 模块的 “src” 路径)指的是控制节点上的本地文件和目录。
解析本地相对路径
当您为本地文件指定相对路径时,Ansible 将首先尝试在当前任务的角色中查找该文件,然后在包含或依赖于当前角色的其他角色中查找,然后相对于定义任务的文件查找,最后相对于当前剧本查找。它将采用它找到的第一个匹配文件。这样,如果存在多个具有相同文件名的文件,Ansible 将找到最接近当前任务并且最有可能成为您想要的文件。
具体来说,Ansible 会按照以下顺序查找文件:
在当前角色中。
在其相应的子目录中:“files”、“vars”、“templates” 或 “tasks”;具体取决于 Ansible 正在搜索的文件类型。
直接在其目录中。
与 1 类似,在通过
include_role
、import_role
或角色依赖项调用此当前角色的父角色中。如果父角色有自己的父角色,Ansible 将对该角色重复此步骤。与 1 类似,在当前任务文件的目录中。
与 1 类似,在当前剧本文件的目录中。
Ansible 不会在当前工作目录中搜索本地文件;换句话说,您执行 Ansible 的目录。
注意
当前工作目录可能会因连接插件以及操作是本地还是远程而有所不同。对于远程连接,它通常是登录 shell 将用户放置的目录。对于本地连接,它要么是您执行 Ansible 的目录,要么在某些情况下是 playbook 目录。
搜索路径上下文是累加的,这意味着 Ansible 在解析文件路径时使用“堆栈”上下文。当解析任务中文件的本地相对路径时,使用
include_role
或import_role
语句包含任务的角色的上下文在堆栈中具有最高优先级。如果您使用include_task
或import_task
语句导入任务,则 Ansible 将使用导入文件的上下文。
搜索路径故障排除
当您执行 Ansible 时,变量 ansible_search_path
将包含搜索的路径,按搜索的顺序排列,但不列出其子目录。如果您通过传递 -vvvvv
参数在详细级别 5 中运行 Ansible,Ansible 将报告它搜索的每个目录,但在搜索任务文件时除外。