У меня есть сценарий, который выполняет разные роли на разных хостах. Можно ли передать переменную от одной роли, работающей на одном хосте, к другой роли на другом хосте, работающей в одном и том же запуске playbook? Или какой-нибудь обходной путь?
playbook
host1
role1
here I get some variables: var1 var2 ...etc
host2
role2
here I need to use var1 var2 ... etc from the above host/role
Задача в role1, которая устанавливает переменную db
, выглядит так:
- shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}'
register: db
ОБНОВЛЕНИЕ: на первом хосте значения динамические, это как файл конфигурации, который всегда обновляется. После того, как я сохраню значения в переменных на host1 с ролью 1, я перехожу к host2, запускаю role2 и выполняю какие-то действия с этими значениями из переменных, хранящихся на host1.
Я пробовал с hostvars:
{{ hostvars.LBL.db.stdout }}
{{ hostvars['LBL']['db'] }}
{{ hostvars['LBL']['db']['stdout'] }}
и я получаю ошибку:
in get_variables raise Exception("host not found: %s" % hostname) Exception: host not found: LBL
LBL существует в hosts, так как на нем я запускаю первую роль
Я устанавливаю переменную на одном хосте и хочу, чтобы эта переменная была доступна для другого хоста. Все это в рамках единого сценария. Это можно сделать?
hostvars не работает, используя его вот так:
---
- name: test hostvars host1
hosts: LBL
tasks:
- command: "ls /bin"
register: ls_out
- name: test hostvars host2
hosts: LM
tasks:
- debug:
var: "{{ hostvars['LBL']['ls_out']['stdout'] }}"
ошибка:
fatal: [10.104.148.138] => host not found: LBL
/ и т. д. / ansible / хосты
[root@NS1 ansible]# cat /etc/ansible/hosts
[LBL]
10.104.148.136
[LM]
10.104.148.138
hostvars.LBL.*
должно было сработать. Если переменные 1/2 определены в файле инвентаризации, опубликуйте и это. - person Kashyap   schedule 31.03.2015- name: bla bla shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}' register: db
Если я использую и повторяю {{do.stdout}} в одной и той же роли, это отлично работает. Я не использую инвентарь. Во второй роли, если я делаюshell: echo "{{ hostvars['LBL']['db']['stdout'] }}"
, выдает ошибку - person ady8531   schedule 31.03.2015ls_out
, как и ожидалось. Написал неправильный код что ли ...? Пожалуйста, уточните, что не работает - person Kashyap   schedule 31.03.2015