TL / DR: у меня есть переменные "src_host" и "dest_host", которые я хочу использовать для установки объекта "- hosts:" в игре. Тем не менее, я должен установить их снова для каждой игры в разделе «vars: of each» - hosts: », например. src_host = "{{hostvars ['localhost'] ['src_host']}}" как мне установить эти две переменные в начале и не нужно их сбрасывать?
Файл моего хоста выглядит так
[wordpress]
localhost ansible_user=user ansible_port=22 ansible_ssh_private_key_file=/home/user/.ssh/id_rsa
root_localhost ansible_user=root ansible_port=22 ansible_ssh_private_key_file=/home/user/.ssh/id_rsa
---snip---
server2.net ansible_host="server2.net" ansible_user=user ansible_port=22 ansible_ssh_private_key_file=/home/user/.ssh/id_rsa
root_server2.net ansible_host="server2.net" ansible_user=root ansible_port=22 ansible_ssh_private_key_file=/home/user/.ssh/id_rsa
Начало моей пьесы выглядит так:
- hosts: localhost, server2.net, root_server2.net #always include "localhost" in this list because it is needed to store the variables for the src_host and dest_host
vars:
src_host: localhost #modify these and the host will be changed for all subsequent plays/tasks
dest_host: server2.net #modify these and the host will be changed for all subsequent plays/tasks
src_dump_path: /home/user/cvrt9_dump.sql #set vars for copying file
roles:
- set_facts_for_db_copy
- hosts: "{{ src_host }}"
vars:
src_host: "{{ hostvars['localhost']['src_host'] }}"
dest_host: "{{ hostvars['localhost']['dest_host'] }}"
---snip---
roles:
- dump_db
- copy_file
и т. Д. , .
для "- set_facts_for_db_copy" У меня есть "main.yml", как здесь, где я устанавливаю переменные "src_host" и "dest_host":
---
# tasks file for set_facts_for_db_copy
- name: create variables that equal src_dump_path and set src_host/dest_host
set_fact:
---snip---
src_host: "{{ src_host }}"
dest_host: "{{ dest_host }}"
Так что мне нужно установить "src_host" и "dest_host" для всех последующих "- hosts:", которые используют их, получая значения из одной из переменных хоста, которые установлены "set_fact_for_db_copy". Я случайно выбрал «localhost», как вы могли заметить:
src_host: "{{ hostvars['localhost']['src_host'] }}"
dest_host: "{{ hostvars['localhost']['dest_host'] }}"
Если у меня нет этой строки, я получаю:
user@localhost:/home/maintainer/ansible-play$ ansible-playbook -i hosts_tat-kay playbook.yml
PLAY [localhost, server2.net, root_server2.net] **************
TASK [setup] *******************************************************************
ok: [server2.net]
ok: [root_server2.net]
ok: [localhost]
TASK [set_facts_for_db_copy : create variables that equal src_dump_path] *******
ok: [localhost]
ok: [server2.net]
ok: [root_server2.net]
ERROR! the field 'hosts' has an invalid value, which appears to include a variable that is undefined. The error was: 'src_host' is undefined
The error appears to have been in '/home/maintainer/ansible-play/playbook.yml': line 14, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- hosts: "{{ src_host }}"
^ here
. , ,
Теперь я могу установить эти переменные в моем хост-файле:
[wordpress:vars]
src_host=localhost
dest_host=server2.net
Но тогда мне все равно придется ссылаться на них из последующих объектов "-hosts:" в моей пьесе с помощью "{{hostvars ['localhost'] ['src_host']}}" и т. Д. , , Поэтому мой вопрос заключается в том, как мне избавиться от этого избыточного кода во всех моих последующих объектах "-hosts:" (показано ниже), в то же время позволяя мне изменять переменные "src_host" и "dest_host" один раз в начале, и эти изменения влияют остальные пьесы? Спасибо.
src_host: "{{ hostvars['localhost']['src_host'] }}"
dest_host: "{{ hostvars['localhost']['dest_host'] }}"