Ansible 与主机特定文件兼容,但回退到默认文件
我目前正在尝试适应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
角色/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"