Подтвердить что ты не робот

Где я должен организовывать файлы/шаблоны для конкретного хоста?

Я пытаюсь организовать свои плейбуки в соответствии с структурой Directory Layout. В документации нет рекомендации для файлов/шаблонов, специфичных для хоста.

У меня есть 2 игры для одного сайта

  • example.com-provision.yml
  • example.com-deploy.yml

Эти файлы находятся в корне моей структуры. В учебном пособии для обеспечения просто включаются другие роли

---
- hosts: example.com

  roles:
    - common
    - application
    - database

  become: true
  become_method: su
  become_user: root

В playbook для развертывания нет ролей, но есть собственные разделы vars и tasks. У меня есть пара задач template и copy, и мне интересно, что такое "лучшая практика" для размещения этих шаблонов/файлов, специфичных для хоста, в этой структуре каталогов.

В настоящее время я использую их в ./roles/example.com/templates/ и ./roles/example.com/files/, но вам нужно ссылаться на файлы с полным путем из моей учебной программы для развертывания, например

- name: deployment | copy httpd config
  template:
    src: ./roles/example.com/templates/{{ host }}.conf.j2
    # ...

вместо

- name: deployment | copy httpd config
  template:
    src: {{ host }}.conf.j2
    # ...
4b9b3361

Ответ 1

Опираясь на ту же проблему, самый чистый способ выглядит для меня следующей структурой:

В каталоге верхнего уровня (на том же уровне, что и в плей-листах) у меня есть папка files (и если мне нужна также папка templates). В папке files есть папка для каждого хоста с собственными файлами, где имя папки совпадает с именем хоста в инвентаре. (см. структуру ниже: myhost1 myhost2)

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

Теперь в любой роли вы можете обращаться к файлам с файловыми модулями относительно:

# ./roles/first_role/main.yml

- name: Copy any host based file
  copy:
    src={{ inventory_hostname }}/file1
    dest= /tmp

Объяснение

Волшебная переменная inventory_hostname - это получить хост, см. здесь Любой модуль file (как, например, copy) ищет каталог files в соответствующем каталоге ролей и каталоге files на том же уровне, что и вызывающая пьеса. Конечно же, это относится и к шаблонам (но если у вас разные шаблоны для той же роли, вы должны пересмотреть свой дизайн)

Семантически определенный файл хоста не принадлежит роли, а где-то снаружи (например, host_vars).