- 21, Oct 2024
- #1
Я новичок в ansible и думаю, что мне не хватает чего-то базового, чего я не нашел в примерах или на github, относительно структуры каталогов и ее использования.
Я настроил структуру каталогов, используя документ с лучшими практиками Ansible, расположенный здесь:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
Но в документации неясно, как эту структуру следует использовать на практике. У меня есть несколько клиентов, у которых запасы должны храниться отдельно. Моя структура каталогов настроена следующим образом:
cat ./inventory/client1/all client=client1 extra_vars=~/inventory/{{ client }}/credentials.yml
Файлы хостов содержат маршрутизаторы, коммутаторы и межсетевые экраны (сгруппированные следующим образом):
ansible-playbook -i hosttarget ../../myplaybook.yml
В group_vars есть файлы маршрутизатора, коммутатора и брандмауэра с соответствующими переменными. В каталоге ./inventory/client name/group_vars имеется файл Creedition.yml, который зашифрован и должен быть загружен для каждой книги воспроизведения. Я понимаю приоритет, и у меня нет никаких проблем.
Если я запустил ansible-playbook -i /путь к файлу хоста/, как мне выбрать конкретный хост, с которым я хочу работать?
ansible-playbook -i inventory/client1/hosts myplaybook.yml
<--where can I put the specific host that is in the hosts file? I have tried several different methods and none seem to work. My guess is that I am running the ansible-playbook command from the wrong directory.
Если я запускаю ansible-playbook в правильной папке инвентаря (./inventory/client1/), я могу выбрать хост, но как мне указать на книги воспроизведения, которые находятся в корневой папке, без резервного копирования каталогов каждый раз, например:
[router]
router1 ansible_host=1.2.3.4
[switch]
switch1 ansible_host=5.6.7.8
[firewall]
firewall1 ansible_host=9.10.11.12
Кажется плохим тоном каждый раз выходить из каталога только для того, чтобы запустить книгу сценариев. Если я просто укажу имя playbook, он не найдет его, поэтому я думаю, что запуск ansible-playbook таким образом также не был намерением.
Как загрузить дополнительные файлы учетных данных или групповые переменные? Было бы неплохо, если бы был способ вытащить это из каталога, содержащего инвентарь, но я не могу этого понять. Я думал о том, чтобы загрузить extra_vars в playbook и установить значение для переменной с именем «client» в файле «all», но это кажется неуклюжим и подверженным ошибкам. Я надеялся, что существует какой-то тип автоматического извлечения, который можно выполнить, например загрузку group_vars и host_vars, но, возможно, я что-то упускаю.
inventory/
client1/
group_vars/
all
credentials.yml <encrypted>
router
switch
firewall
host_vars/
router1
switch1
firewall1
hosts
client2/
group_vars/
all
credentials.yml <encrypted>
router
switch
firewall
host_vars/
router1
switch1
firewall1
hosts
roles/
role1/
tasks/
main.yml
role2/
tasks/
main.yml
Я думаю, что, поскольку макет инвентаря показан в качестве лучших практик Ansible, возможно, я не совсем понимаю, как мне следует использовать сборники сценариев.
Мне казалось, что я должен иметь возможность запустить ansible-playbook в корневом каталоге, содержащем все мои пьесы, и легко указать его на файл инвентаря. Книги воспроизведения должны быть многоразовыми для всех клиентов без необходимости внесения изменений, и должен быть простой способ загрузки файлов переменных без необходимости указывать их каждый раз в командной строке. Ansible уже очень хорошо справляется с этим с group_vars и host_vars, поэтому я думаю, что мне просто не хватает чего-то простого.
Теперь у меня есть обходной путь, используя следующую командную строку:
ansible-playbook -i инвентарь/atcog ecats_l2l.yml --extra-vars @inventory/atcog/group_vars/credentials.yml
При этом запускается сценарий конфигурации, который запускает задачу создания VPN. Этот VPN создан для клиента atcog. Мне нужно добавить очень длинный --extra-vars @inventory/atcog/group_vars/credentials.yml для доступа к файлу учетных данных для клиента «atcog». Мне также придется вручную изменить книгу воспроизведения, чтобы она запускала игру только на одном хосте, добавив - hosts: atcogfirewall-1. Кажется, должен быть лучший способ.
Допустим, теперь я хочу передать этот VPN другому клиенту. Теперь мне нужно отредактировать playbook и изменить -hosts: krifirewall-6, затем мне нужно отправить эту команду, чтобы убедиться, что используется правильный файл учетных данных:
ansible-playbook -i инвентарь/kri ecats_l2l.yml --extra-vars @inventory/kri/group_vars/credentials.yml
Похоже, во многих местах опечатка или забывание обновить запись хоста playbook могут привести к тому, что это запустится на неправильном устройстве или будет запущено с неправильными учетными данными.
Итак, если я добавлю что-то вроде