Я настраиваю конфигурацию динамических ресурсов Ansible для моего проекта. Когда происходит событие автомасштабирования AWS, запрос отправляется Jenkins (который управляет процессом сборки через Ansible), чтобы инициировать сборку на вновь добавленном сервере.Командная строка ansible-playbook передает IP-адрес для группы хостов
Поскольку динамический инвентарь использует подход, основанный на тегах, событие автосохранения добавляет новый сервер и запускается сборка. Однако новая сборка запускается на всех серверах, поскольку один и тот же тег присутствует как в старом, так и в новом сервере.
Подход, который я принимаю для решения, заключается в передаче общедоступного параметра ip Jenkins в параметризованный процесс сборки. Этот публичный IP, то можно сделать доступным, чтобы решить одну из двух команд анзибль:
if ["x$public_ip" == "x"] then
ansible-playbook -i inventories/demo api.yml
else
ansible-playbook -i $public_ip, api.yml
Первая команда будет по существу проинструктировать анзибль запустить процесс сборки на всех серверах, имеющих метку.
Из второй команды я хочу сказать, что она должна запускать сборку только на вновь добавленном сервере. Мой файл api.yml выглядит
---
- hosts: apiservers
sudo: yes
roles:
- common
Теперь я должен быть в состоянии сказать, что хоста «» apiservers среднее, или, по существу, что все IP-адреса, которые содержатся в этой группе. Если вовлечено больше хостов, я должен иметь возможность передавать несколько групп и соответствующие им IP-адреса в той же самой команде, которая запускается через оболочку.
Любые идеи?