我目前正试图习惯Ansible,但我未能实现似乎是一个常见的用例:
让我们说我在nginx
中扮演roles/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路径更改为src: "{{ inventory_hostname }}/index.html"
,但是它将仅在特定于主机的目录中搜索。
是否可以更改搜索路径,以便Ansible首先在主机特定目录中查找文件,而后退到公用目录?
我不想决定编写角色时文件是否需要特定于主机。我想覆盖角色默认文件,而根本不更改基本角色。
答案 0 :(得分:1)
Q:“ Is there a way to alter the search paths so that Ansible will look for files in host-specific directories first but fall-back to common directories?
”
A:通常,无法以这种方式更改搜索路径。但是,使用first_found可以定义如何搜索特定文件。例如
- 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"