2016-02-12 1 views
4

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

У меня есть группа всех серверов баз данных: groups.rds, и я знаю, что сервер, который я ищу, содержит определенную строку, например. «Развитие».

Каков самый чистый способ найти это имя хоста?

Я ищу что-то вроде этого: groups.rds.contains("development").first()

ответ

2

Вы можете сделать это с select filter, в сочетании с match filter.

groups.rds | select("match", ".*production.*") | first 

Но вы просите о самом чистом решении. Отсюда, похоже, вы пытаетесь определить среду (разработку) на основе имени хоста. Если это так, разве нет смысла иметь для этого другую группу?

Если бы было что-то вроде этого:

[non_rds] 
some.unrelated.development.host 

[rds] 
some.production.host 
some.staging.host 
some.development.host 

[production] 
some.production.host 

[staging] 
some.staging.host 

[development] 
some.development.host 
some.unrelated.development.host 

Тогда было бы очень легко получить пересечение этих групп:

groups.rds | intersect(groups.development) | first 

Это даст вам только хозяева, которые в обеих группах rds и development, что составляет some.development.host.

+0

Спасибо, что именно мне нужно :) –

+0

Как я могу назначить вывод этого переменной? 'database_host:" {{groups.rds | intersect (groups.tag_Env_development) | first | default ('localhost')}} «' похоже, не работает, если я не использую его в шаблоне. –

+0

Вы делаете это в файле group- или host-vars? Или в файле vars роли? – udondan