首页 新闻 会员 周边 捐助

ansible中的路径

0
[已解决问题] 解决于 2025-07-18 14:33

ansible中的路径,都是基于yml文件所在的路径?
1、验证实验:
cd ../
ansible-playbook project/test.yml
在 test.yml 中:

  • hosts: localhost
    vars_files:
    • "vars/common.yml" # 解析为 project/vars/common.yml
      tasks:
    • include_vars:
      file: "config/settings.yml" # 解析为 project/config/settings.yml
    • import_tasks: "tasks/setup.yml" # 解析为 project/tasks/setup.yml
      所有路径都是相对于 project/ 目录解析,与命令在哪个目录运行无关

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

  1. 特殊目录的自动映射
    模块/指令 实际查找路径 示例
    copy src role/files/ 目录下 src: app.conf → roles/my_role/files/app.conf
    template src role/templates/ 目录下 src: nginx.conf.j2 → roles/my_role/templates/nginx.conf.j2
    role 的 defaults/main.yml 自动加载 无需指定路径
    role 的 vars/main.yml 自动加载 无需指定路径
_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-07-17 10:10
< >
分享
最佳答案
0

为什么需要 playbook_dir 和 role_path
虽然路径是相对于 YAML 文件位置解析的,但在复杂场景中我们仍需要这些变量:

{{ playbook_dir }} 使用场景
当需要绝对路径时:

yaml

  • name: 加载项目级配置
    include_vars: "{{ playbook_dir }}/global_config.yml"
    跨 Playbook 引用文件:

yaml

  • name: 使用共享脚本
    script: "{{ playbook_dir }}/../shared_scripts/deploy_helper.py"
    {{ role_path }} 使用场景
    安全加载 Role 内变量文件:

yaml

  • name: 加载加密变量
    include_vars: "{{ role_path }}/vars/secrets.yml"
    no_log: true
    引用 Role 内的非标准资源:

yaml

  • name: 使用特殊模板
    template:
    src: "{{ role_path }}/templates/special/config.xml.j2"
    dest: /etc/app/config.xml

为什么在 tasks/main.yml 里可以直接写变量名 ({{ my_var }}) 就能访问的原因! Ansible 在初始化 Role 时就扫描并加载了这些文件里的变量,不需要你在任务里显式 include_vars。这不是基于“当前任务文件”的路径扫描,而是 Role 机制本身预定义了从哪里加载这些变量文件。

注意:defaults/ 和 vars/ 下的其他文件 (如 db.yml) 不会自动加载!你需要用 include_vars 显式加载它们

_java_python | 小虾三级 |园豆:984 | 2025-07-17 10:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册