Установить ansible_host в групповых переменных

#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 — это только пользовательская переменная. Можно ли установить псевдонимы таким же образом с другой переменной?