ansible: доступ к переменным регистра из других пьес в одной и той же книге
Я пытаюсь получить доступ к переменной «count» из первого «play» в моем playbook во втором playbook. Я нашел здесь несколько других сообщений об этой проблеме и подумал, что следую правильным шагам, но приведенный ниже код все еще не работает.
Код
- hosts: group1
tasks:
- name: count registrations on primary node
shell: psql -U widgets widgets -c 'SELECT COUNT(*) FROM location' -t
register: count
- debug: var=count.stdout
- hosts: group2
tasks:
#the line below works...
# - debug: msg={{ hostvars['myserver1.mydomain.com']['count']['stdout'] }}
# but this one fails
- debug: msg={{ hostvars['group1']['count']['stdout'] }}
Это дает следующий вывод:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [myserver1.mydomain.com]
TASK [count registrations on node] **************************************
changed: [myserver1.mydomain.com]
TASK [debug] *******************************************************************
ok: [myserver1.mydomain.com] => {
"count.stdout": " 2"
}
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [myserver2.mydomain.com]
TASK [debug] *******************************************************************
fatal: [myserver1.mydomain.com]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'can_sip1'"}
NO MORE HOSTS LEFT *************************************************************
[ERROR]: Could not create retry file 'playbooks/test.retry'. The error was: [Errno 13] Permission denied: 'playbooks/test.retry'
PLAY RECAP *********************************************************************
myserver1.mydomain.com: ok = 3 изменено = 1 недоступно = 0 не удалось = 0
myserver2.mydomain.com: ok = 1 изменено = 0 недоступно = 0 не удалось = 1
Другой пост, на который я ссылаюсь, находится здесь:Как настроить регистр переменной для сохранения между играми в ANSIBLE?
Возможно, это что-то простое, но я не вижу, в чем заключается ошибка. Благодарю.
РЕДАКТИРОВАТЬ 1
Я также попытался использовать set_fact как это:
- hosts: group1
tasks:
- name: count registrations on primary node
shell: psql -U widget widget -c 'SELECT COUNT(*) FROM location' -t
register: result
- debug: var=result.stdout
- set_fact: the_count=result.stdout
- debug: var={{the_count}}
- hosts: group2
tasks:
- name: retrieve variable from previous play
shell: echo hello
- debug: var={{hostvars}}
Результаты, которые я получаю:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [myserver1.mydomain.com]
TASK [count reg on primary] ****************************************************
changed: [myserver1.mydomain.com]
TASK [debug] *******************************************************************
ok: [myserver1.mydomain.com] => {
"result.stdout": " 2"
}
TASK [set_fact] ****************************************************************
ok: [myserver1.mydomain.com]
TASK [debug] *******************************************************************
ok: [myserver1.mydomain.com] => {
"result.stdout": " 2"
}
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [myserver2.mydomain.com]
TASK [retrieve variable from previous play] ************************************
changed: [myserver2.mydomain.com]
TASK [debug] *******************************************************************
ok: [myserver2.mydomain.com] => {
"<ansible.vars.hostvars.HostVars object at 0x7f3b6602b290>": "VARIABLE IS NOT DEFINED!"
}
PLAY RECAP *********************************************************************
myserver1.mydomain.com : ok=5 changed=1 unreachable=0 failed=0
myserver2.mydomain.com : ok=3 changed=1 unreachable=0 failed=0
Похоже, что в hostvars нет объектов ...
РЕДАКТИРОВАТЬ 3
Так выглядит сборник пьес сегодня утром.
- hosts: group1
tasks:
- name: count reg on primary
shell: psql -U widgets widgets -c 'SELECT COUNT(*) FROM location' -t
register: result
- debug: var=result.stdout
- set_fact: the_count={{result.stdout}}
- debug: var={{the_count}}
- hosts: group2
tasks:
- name: retrieve variable from previous play
shell: echo hello
- debug: var={{hostvars}}
Строка «debug: var = {{the_count}}» из первого воспроизведения выводит правильное значение для счетчика, но также говорит, что переменная не определена ... вот так:
ЗАДАЧА [set_fact] ********************************************** ****************** путь к задаче: /etc/ansible/playbooks/test.yml:8 ok: [myserver1.mydomain.com] => {"ansible_facts": { "the_count": "2"}, "change": false, "invocation": {"module_args": {"the_count": "2"}, "module_name": "set_fact"}}
ЗАДАЧА [отладка] ********************************************** ********************* путь к задаче: /etc/ansible/playbooks/test.yml:10 ok: [myserver1.mydomain.com] => {"2 ":" ПЕРЕМЕННАЯ НЕ ОПРЕДЕЛЕНА! " }
А потом, как только я попал во вторую пьесу, я все еще получаю сообщение
TASK [debug] *******************************************************************
task path: /etc/ansible/playbooks/test.yml:16
ok: [myserver2.mydomain.com] => {
"<ansible.vars.hostvars.HostVars object at 0x7fb077fdc310>": "VARIABLE IS NOT DEFINED!"
}
В вашем примере вы предлагаете использовать «debug: var = {{hostlers}}». Если вы можете уточнить это для меня, пожалуйста. Похоже, это опечатка.
РЕДАКТИРОВАТЬ 4:
Если вы внимательно посмотрите на Edit 3, вы увидите, что я реализовал «debug: var = {{hostvars}}», как вы предлагаете в своем ответе. Но это дает мне ту же ошибку, что переменная не определена. Я не просто пытаюсь передать переменные из одной пьесы в другую ..., а из одного набора хостов в другой. Обратите внимание, что игра 1 использует группу 1, а игра два относится только к группе 2.