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

时间:2019-06-29 14:10:03

标签: ansible

我目前正试图习惯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首先在主机特定目录中查找文件,而后退到公用目录?

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

1 个答案:

答案 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"