2016-06-09 4 views
0

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

Нам не нравится работать с «hostnames» в нашей команде, потому что у нас есть 300+ из них с бессмысленными именами. Для этого, я начал создавать псевдонимы для них в анзибль файл хостов, как:

[bpm-i] 
bpm-app1-i1 ansible_user=bpmadmin ansible_host=el1001.bc 
bpm-app1-i2 ansible_user=bpmadmin ansible_host=el1003.bc 

[bpm-u] 
bpm-app1-u1 ansible_user=bpmadmin ansible_host=el2001.bc 
bpm-app1-u2 ansible_user=bpmadmin ansible_host=el2003.bc 

[bpm-all:children] 
bpm-i 
bpm-u 

Значение у нас есть приложение BPM под названием «app1» и он развертывается на двух хозяев в интеграции тестирования и на двух хозяев в гается приемочное тестирование. Все идет нормально. Теперь я могу запустить загрузочную книгу Ansible (например), чтобы настроить SSH-доступ (authorized_keys) для членов команды или нажать сценарий обслуживания. Я могу запускать эти ПБ на каждом хосте отдельно, на всех хостах ITT или UAT или даже везде.

Но, как правило, мы снова установим то же приложение app1 на существующем хосте, но с другой целью - скажем, «обучающая» среда. Мой рефлекс должен был бы сделать это:

[bpm-i] 
bpm-app1-i1 ansible_user=bpmadmin ansible_host=el1001.bc 
bpm-app1-i2 ansible_user=bpmadmin ansible_host=el1003.bc 

[bpm-u] 
bpm-app1-u1 ansible_user=bpmadmin ansible_host=el2001.bc 
bpm-app1-u2 ansible_user=bpmadmin ansible_host=el2003.bc 

[bpm-t] 
bpm-app1-t1 ansible_user=bpmadmin ansible_host=el2001.bc 
bpm-app1-t2 ansible_user=bpmadmin ansible_host=el2003.bc 

[bpm-all:children] 
bpm-i 
bpm-u 
bpm-t 

Но ... бегущий PB становится беспорядком и вызывает ошибки. Логически у меня есть два псевдонима для достижения одной и той же комбинации пользователей/хостов: bpm-app1-u1 и bpm-app1-t1. Я не возражаю, это совершенно логично, но если бы я должен был протестировать новый сценарий обслуживания, я бы сначала подталкивал его к bpm-app1-i1 для тестирования, и когда все в порядке, я, вероятно, запустил PB против bpm-all. Но из-за неповторимых комбинаций пользователей и хостов для некоторых псевдонимов PB будет работать несколько раз на одном и том же пользователе/​​хосте. В зависимости от действий в PB это может работать по совпадению, но это может также терпеть неудачу.

Невозможно ли сообщить Ansible «Run on ALL - UNIQUE user/host combination»?

+0

Комментарий к вышесказанному: Это стилизованный пример. Изменение имен псевдонимов, группировка u1 и t1 (и u2 и t2) в другие псевдонимы не является опцией, только наличие «u» без «t» не является опцией. Единственное, что имеет значение: Сделать Ansible проверить, что он не запускает playbook на пользователя/хоста дважды при запуске playbook против «всех» хостов. – domi756

+0

Я не понял, почему хосты «t» должны иметь те же имена, что и «u». Имя хоста должно быть уникальным. Но в целом я настоятельно рекомендую использовать разные файлы инвентаря для разных сред. Это просто дополнительная предосторожность, чтобы защитить вас от случайной игры на неправильном наборе хостов. Это не решает вашу проблему, но с разными файлами хоста вы можете просто вызвать несколько раз с каждым файлом инвентаря отдельно. Тогда это должно решить вашу неподходящую проблему с именем узла. – udondan

+0

Но имейте в виду, что вы не можете определять хост_вары по отдельности, а также не сможете использовать кеширование фактов, поскольку это противоречило бы между этими разными хостами с тем же именем. – udondan

ответ

0

Поскольку большинство задач что-то меняют на удаленном хосте, вы можете использовать Conditionals, чтобы проверить это изменение на хосте перед запуском.

Например, если ваш Playbook имеет задачу, чтобы запустить скрипт , который создает файл на удаленном хосте, вы можете добавить предложение when к «пропустить задание, если файл существует» и проверить наличие того файл с заданием stat до этого.

- Check whether script has run in previous instance by looking for file 
    stat: path=/path/to/something 
    register: something 

- name: Run Script when file above does not exist 
    command: bash myscript.sh 
    when: not something.exists 
+0

Спасибо за подсказку, это может работать как работа, но это означает, что в книжках, конечно, больше работы. Вы должны быть в состоянии определить условия, а затем сможете реализовать их в Ansible. Первое, конечно же, возможно во всех случаях, последнее сложнее с учетом ограничений Ansible. Но спасибо за эту идею, я обязательно посмотрю. – domi756

Смежные вопросы