Yaml — Невозможно Запустить Плейбуки С Использованием Макета Лучших Практик Ansible.

  • Автор темы Uaworker
  • Обновлено
  • 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 могут привести к тому, что это запустится на неправильном устройстве или будет запущено с неправильными учетными данными. yaml — невозможно запустить плейбуки с использованием макета лучших практик Ansible.

Итак, если я добавлю что-то вроде

Uaworker


Рег
04 Oct, 2016

Тем
71

Постов
193

Баллов
568
  • 25, Oct 2024
  • #2

Вообще Ansible очень гибкий и часто есть более «правильные» решения.

Начните, например, с вопроса «Откуда берутся данные конфигурации?», поместите в роли данные по умолчанию и решите, какие переменные следует настроить в «group_vars/host_vars», в ролях, а которые в пьесах. Обзор Приоритет переменной: куда следует поместить переменную?. Чтобы установить пути к инвентарю, ролям и т. д., см. Настройки конфигурации Ansible.

Чтобы ответить на ваши вопросы:

Вопрос 1. Если я запустил ansible-playbook -i /path to hostfile/, как мне выбрать конкретный хост, с которым я хочу работать? ...где я могу поместить конкретный хост, указанный в файле хостов?

Выбрать например"маршрутизатор1"начните игру с:

 
 # ANSIBLE_HOSTS=$PWD/inventory/client1/hosts ansible-playbook myplaybook.yml
 

Вопрос 2. Как указать плейбуки, находящиеся в корневой папке, не создавая каждый раз резервные копии каталогов, например: «ansible-playbook -i hosttarget ../../myplaybook.yml»

Настроить DEFAULT_HOST_LIST. Например:

- hosts: router1

Вопрос 3. Как загрузить дополнительные файлы учетных данных или групповые переменные?

Там описано много вариантов Приоритет переменной: куда следует поместить переменную?. Например "include_vars" может быть полезно для загрузки дополнительных учетных данных. Для "групповых переменных" выберите параметры.

 

AddiliKer10


Рег
06 May, 2007

Тем
79

Постов
192

Баллов
627
Похожие темы Дата
Похожие темы
Имена Хостов Docker Не Разрешаются В Пользовательской Сети
Amazon Ecs – Как Топография Влияет На Составное Соглашение Об Уровне Обслуживания?
Базы Данных – Имитировать Шаблон Использования Базы Данных Sql Типичного Облачного Веб-Приложения С Помощью Sysbench?
Ошибки Работоспособности Сайта Wordpress При Использовании Docker И Nginx
Дженкинс Возвращает «Ошибка Проверки Информации О Репозитории. Учетные Данные В Порядке». При Проверке Url-Адреса Репо С Использованием Аутентификации Приложения Github
Веб-Сервисы Amazon — Terraform Создает Один Sg, Но Несколько Блоков Cidr
Локальные Установки Prometheus И Grafana Для Мониторинга Кластера Kubernetes
Веб-Сервисы Amazon — Как Добавить Проверку Работоспособности Группы Aws Auto Scaling Group На Экземпляр, Не Являющийся Веб-Сайтом
Дженкинс - Git Reflog Показывает Используемый Пароль В Виде Обычного Текста
Тестирование — Автоматизация Тестирования Safari С Использованием Robot Framework Через Jenkins
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно