Создать инвентарь
оболочка> кошачьи хосты
[site_nfs_servers]
ansibletarget1
ansibletarget2
и положить акции в host_vars
оболочка> кошка host_vars/ansibletarget1.yml
акции:
- путь: "/мой/первый/общий/путь"
клиент: "*"
опции: "rw,синхронизировать"
- путь: "/моя/вторая/доля/путь"
клиент: "*"
опции: "rw,sync,root_squash"
оболочка> кошка host_vars/ansibletarget2.yml
акции:
- путь: "/другой/общий/путь/другой/сервер"
клиент: "*"
опции: "ро,синхронизировать"
Создайте упрощенную роль для тестирования
оболочка> дерево ролей/my_nfs_role/
роли/my_nfs_role/
ââ задачи
âââ main.yml
ââ шаблоны
âââ экспорт.j2
2 каталога, 2 файла
оболочка> cat roles/my_nfs_role/tasks/main.yml
- шаблон:
источник: экспорт.j2
место назначения: /etc/exports.test
оболочка> cat roles/my_nfs_role/templates/exports.j2
{% для доли в акциях %}
{{share.path}} {{share.client}} {{share.options}}
{% конец для %}
Затем используйте группу инвентаризации и роль в плейбуке.
оболочка> cat playbook.yml
- хосты: site_nfs_servers
роли:
- my_nfs_role
Запустите playbook и создайте файлы
shell> ansible-playbook -i hosts playbook.yml
ИГРАТЬ [site_nfs_servers] **************************************************** **
ЗАДАЧА [my_nfs_role : шаблон] ************************************************
изменено: [ansibletarget1]
изменено: [ansibletarget2]
...
оболочка> ssh admin@ansibletarget1 cat /etc/exports.test
/мой/первый/общий/путь * rw,sync
/my/second/share/path * rw,sync,root_squash
оболочка> ssh admin@ansibletarget2 cat /etc/exports.test
/другой/общий/путь/другой/сервер * ро, синхронизировать
Видеть Пример установки Ansible.
Если вы хотите сохранить доли в одном объекте, поместите список в groups_vars. Чтобы упростить код, преобразуйте список в словарь. Ты можешь использовать community.general.groupby_as_dict Например
оболочка> cat group_vars/all.yml
экспорт:
- сервер: "ansibletarget1"
акции:
- путь: "/мой/первый/общий/путь"
клиент: "*"
опции: "rw,синхронизировать"
- путь: "/моя/вторая/доля/путь"
клиент: "*"
опции: "rw,sync,root_squash"
- сервер: "ansibletarget2"
акции:
- путь: "/другой/общий/путь/другой/сервер"
клиент: "*"
опции: "ро,синхронизировать"
exports_dict: "{{ exports|community.general.groupby_as_dict('сервер') }}"
дает
экспорт_дикт:
доступная цель1:
сервер: ansibletarget1
акции:
- клиент: '*'
опции: RW, синхронизация
путь: /мой/первый/доля/путь
- клиент: '*'
варианты: rw, синхронизация, root_squash
путь: /моя/вторая/доля/путь
доступная цель2:
сервер: ansibletarget2
акции:
- клиент: '*'
опции: ro, синхронизация
путь: /другой/общий/путь/другой/сервер
Затем измените шаблон. Это должно создать те же файлы, что и раньше.
оболочка> cat roles/my_nfs_role/templates/exports.j2
{% для доли в exports_dict[inventory_hostname]['shares'] %}
{{share.path}} {{share.client}} {{share.options}}
{% конец для %}