ansible中的路径,都是基于yml文件所在的路径?
1、验证实验:
cd ../
ansible-playbook project/test.yml
在 test.yml 中:
2、role路径
基准路径: 当前任务文件所在的目录(通常是 tasks/ 目录)
include_tasks: "db/setup.yml" # 解析为 roles/my_role/tasks/db/setup.yml
include_vars:
file: "../vars/secrets.yml" # 解析为 roles/my_role/vars/secrets.yml
为什么需要 playbook_dir 和 role_path
虽然路径是相对于 YAML 文件位置解析的,但在复杂场景中我们仍需要这些变量:
{{ playbook_dir }} 使用场景
当需要绝对路径时:
yaml
yaml
yaml
yaml
为什么在 tasks/main.yml 里可以直接写变量名 ({{ my_var }}) 就能访问的原因! Ansible 在初始化 Role 时就扫描并加载了这些文件里的变量,不需要你在任务里显式 include_vars。这不是基于“当前任务文件”的路径扫描,而是 Role 机制本身预定义了从哪里加载这些变量文件。
注意:defaults/ 和 vars/ 下的其他文件 (如 db.yml) 不会自动加载!你需要用 include_vars 显式加载它们