Where should I be organizing host-specific files/templates?

前端 未结 1 1920
南方客
南方客 2021-01-31 08:28

I\'m trying to organize my playbooks according to the Directory Layout structure. The documentation doesn\'t seem to have a recommendation for host-specific files/templates.

相关标签:
1条回答
  • 2021-01-31 08:54

    Facing the same problem the cleanest way seems for me the following structure:

    In the top-level directory (same level as playbooks) I have a files folder (and if I needed also a templates folder). In the files folder there is a folder for every host with it's own files where the folder's name is the same as the host name in inventory. (see the structure below: myhost1 myhost2)

    .
    ├── files
    │   ├── common
    │   ├── myhost1
    │   ├── myhost2
    |
    ├── inventory
    │   ├── group_vars
    │   └── host_vars
    ├── roles
    │   ├── first_role
    │   └── second_role
    └── my_playbook.yml
    

    Now in any role you can access the files with files modules relatively:

    # ./roles/first_role/main.yml
    
    - name: Copy any host based file
      copy:
        src={{ inventory_hostname }}/file1
        dest= /tmp
    

    Explanation:

    The magic variable inventory_hostname is to get the host, see here The any file module (as for example copy) looks up the files directory in the respective role directory and the files directory in the same level as the calling playbook. Of course same applies to templates (but if you have different templates for the same role you should reconsider your design)

    Semantically a host specific file does not belong into a role, but somewhere outside (like host_vars).

    0 讨论(0)
提交回复
热议问题