У меня есть 2 пьесы в playbook. Один из них запрашивает ввод данных от пользователя, и я хочу использовать эту переменную в другой игре. Пожалуйста, предложите мне, как это сделать
---
- hosts: workers
gather_facts: false
sudo: true
vars_prompt:
- name: "server_ip"
prompt: "Enter the Server IP"
private: no
roles:
- client-setup-worker
- hosts: master
gather_facts: false
sudo: true
vars:
server: "{{ hostvars['workers']['server_ip'] }}"
roles:
- client-setup-master
В приведенном выше плейбуке я хочу использовать server_ip, определенный на рабочих хостах, для использования на главных хостах.
Я сталкиваюсь с ошибкой «Ошибка была: \"hostvars['workers']\" is undefined" при этом
I am facing the error "The error was: \"hostvars['workers']\" is undefined" while doing so
Это потому, что workers
, очевидно, является группой, а не хозяин, единственное, что можно найти объявленным в хозяинvars.
Вам нужно будет случайным образом захватить один из хостов из группы workers
, а затем извлечь его факт; Я считаю, что это сделает это:
обновить, увидев в основном правильный ответ от @VladimirBotka
- hosts: workers
vars_prompt:
# as before ...
pre_tasks:
- name: re-export the vars_prompt for cross playbook visibility
set_fact:
server_ip: '{{ server_ip }}'
roles:
# as before
- hosts: masters
vars:
server: '{{ hostvars[(groups.workers|first)].server_ip }}'
@VladimirBotka Я печатал исправление, пока вы печатали свой комментарий :-) Я рад, что узнал об этом, спасибо!
объем переменных, объявленных в vars_prompt, является играть.
Такая переменная может быть помещена в хоствары с помощью set_facts «для использования этой переменной в другом воспроизведении». Например, пьеса ниже
- hosts: test_01
gather_facts: false
vars_prompt:
- name: "server_ip"
prompt: "Enter the Server IP"
private: no
tasks:
- set_fact:
stored_server_ip: "{{ server_ip }}"
- debug:
var: stored_server_ip
- hosts: test_02
gather_facts: false
vars:
server: "{{ hostvars.test_01.stored_server_ip }}"
tasks:
- debug:
var: server
дает (сокращенно):
ok: [test_01] => {
"stored_server_ip": "10.1.0.10"
}
ok: [test_02] => {
"server": "10.1.0.10"
}
И затем, в духе комментариев к перекрестным ответам, ваш ответ страдает от той же проблемы, что и исходный вопрос: он будет работать нормально, если test_01
является хозяин, но не если это группа.
Хорошо, что вы упомянули о разнице в использовании хоста и группы. Спасибо :)
Проблема в область действия vars_prompt.