#ansible
#ansible
Вопрос:
Это может быть глупой идеей, но у меня есть две идентичные игровые площадки для моего скрипта ansible.
Я хочу создать плейбук с инвентарем, содержащим две группы, и выбрать IP-адрес с хоста через группу, возможно ли это? Мне это нужно, потому что интерфейсу и серверной части нужны одни и те же host_vars в обеих группах, но это разные серверы.
host_vars:
интерфейс.yml (в host_vars):
frontent_property=look good
backend .yml (в host_vars):
backend_property=handle requests
group_vars:
integration.yml (в group_vars):
integration_property=have fun
production.yml (в group_vars):
production_property=do business
Инвентарь:
frontend
backend
[integration]
frontend ansible_host=10.0.0.5
backend ansible_host=10.0.0.6
[production]
frontend ansible_host=10.1.0.5
backend ansible_host=10.1.0.6
Сборник пьес:
- hosts: integration
gather_facts: false
tasks:
- debug:
msg: "{{ ansible_host }}"
- hosts: production
gather_facts: false
tasks:
- debug:
msg: "{{ ansible_host }}"
Это не сработало (оба работают с IP-адресами интеграции) — есть ли другое решение для решения этой проблемы?
Я нашел решение, но теперь я теряю host_vars :
group_vars: интерфейс.yml (в group_vars):
frontent_property=look good
backend.yml (в group_vars):
backend_property=handle requests
integration.yml (в group_vars):
some_property=have fun
production.yml (в group_vars):
some_property=do business
Инвентарь:
10.0.0.5
10.0.0.6
10.1.0.5
10.1.0.6
[frontend]
10.0.0.5
10.1.0.5
[backend]
10.0.0.6
10.1.0.6
[integration]
10.0.0.6
10.0.0.5
[production]
10.1.0.5
10.1.0.6
Но, скорее всего, я допустил ошибку, потому что я не использую спецификатор :children (группа в группе), поэтому я не думаю, что значения группы из [серверной части] доступны из области [интеграция] / производство или я ошибаюсь?
Комментарии:
1. Почему необходимо «выбирать ip с хоста через группу» ?
2. потому что у меня есть переменные hostvariables, связанные с именем хоста. Я изменю цель, не изменяя переменные hostvariables — это плохая практика? Я скоро попробую ваш фрагмент
3. Если вы хотите «изменить цель без изменения переменных хоста» (которые, как я понимаю, имеют общие переменные для всех хостов), поместите переменные в раздел [все: переменные] (когда используется инвентарь в формате ini).
4. У меня есть для каждого хоста пользовательские переменные. Я использую host_vars, а внутри папки находится интерфейс. yml и серверная часть. yml с пользовательскими переменными. интерфейс и серверная часть являются псевдонимами
Ответ №1:
Это правильный инвентарь
10.0.0.5
10.0.0.6
10.1.0.5
10.1.0.6
[integration]
10.0.0.5 my_hostname=frontend
10.0.0.6 my_hostname=backend
[production]
10.1.0.5 my_hostname=frontend
10.1.0.6 my_hostname=backend
Комментарии:
1. похоже, что my_hostname — это только пользовательская переменная. Можно ли установить псевдонимы таким же образом с другой переменной?