Ansible 与主机特定文件兼容,但回退到默认文件

Ansible 与主机特定文件兼容,但回退到默认文件,ansible,Ansible,我目前正在尝试适应Ansible,但我未能实现一个常见的用例: 假设我在角色/nginx中有一个角色nginx,其中一项任务是设置自定义默认页面: - name: install nginx default page copy: src: "index.html" dest: /var/www/html/ owner: root mode: 0644 Ansible将在以下位置查找文件: roles/nginx/files roles/nginx roles

我目前正在尝试适应Ansible,但我未能实现一个常见的用例:

假设我在
角色/nginx
中有一个角色
nginx
,其中一项任务是设置自定义默认页面:

- name: install nginx default page
  copy:
    src: "index.html"
    dest: /var/www/html/
    owner: root
    mode: 0644
Ansible将在以下位置查找文件:

roles/nginx/files
roles/nginx
roles/nginx/tasks/files
roles/nginx/tasks
files
./
现在由于某种原因,单个主机应该接收一个完全不同的文件。 我知道我可以将文件src path更改为
src:{{inventory\u hostname}}/index.html“
,但它将只在特定于主机的目录中搜索

有没有一种方法可以改变搜索路径,以便Ansible首先在特定于主机的目录中查找文件,然后返回到公共目录

我不想决定在编写角色时文件是否需要特定于主机。我更希望覆盖角色默认文件,而不改变基本角色。

Q:“
有没有办法改变搜索路径,以便Ansible首先在特定于主机的目录中查找文件,然后返回到公共目录?

答:一般来说,没有办法以这种方式更改搜索路径。但是,使用它可以定义如何搜索特定文件。比如说

- copy:
    src: "{{ lookup('first_found', findme) }}"
    dest: /scratch/tmp/
    owner: root
    mode: 0644
  vars:
    findme:
      - "{{ inventory_hostname }}/index.html"
      - "{{ role_path }}/files/index.html"
      - "{{ role_path }}/files/defaults/index.html"