¿Qué cambios específicos se deben realizar en el código siguiente para que Ansible Playbook sepa cómo salir
testFile.txt
de ?ServerB
ServerA
Ambos son servidores Amazon Linux.
Tenga en cuenta que ServerA
y ServerB
son ambos servidores remotos sobre los que actúa un servidor central de Ansible.
Un archivo creado ServerB
por un Playbook desde el servidor central de Ansible debe copiarse/extraerse directamente ServerA
desde ServerB
el tiempo de ejecución en lugar de volver al servidor de Ansible.
También tenga en cuenta que el inventario para ServerA
y ServerB
(una IP para cada uno) se define en el servidor central de Ansible, pero no en el remoto ServerA
ni en el remoto ServerB
.
Por lo tanto, en tiempo de ejecución, el libro de estrategias arroja el siguiente error cuando llega a la línea `` a continuación:
fatal: [ip.of.server.b]: FAILED! => {
"msg": "'ServerA' is undefined"
}
Entonces, ¿qué cambios específicos se deben realizar en el siguiente código para que
ServerA
se pueda definir en tiempo de ejecución?
Aquí está el libro de jugadas:
# Then create a file on ServerB and copy/pull that file into ServerA
- name: File transfer example
hosts: ServerB
remote_user: server-b-user
become: true
become_method: sudo
become_user: root
tasks:
- name: Create a test file to copy
shell:
cmd: |
cat <<EOF > /path/on/ServerB/testFile.txt
this is a test file.
EOF
sudo: true
sudo_user: server-b-user
- name: Transfer conf file from master to admin
synchronize:
src: /path/on/ServerB/testFile.txt
dest: /path/on/ServerA/
mode: pull
delegate_to: "{{ ServerA }}"
Respuesta1
Entonces, ¿qué cambios específicos se deben realizar en el siguiente código para que ServerA se defina en tiempo de ejecución?
- hosts: ServerB
vars:
ServerA: 192.168.0.0
Debe abordar el mensaje de error que indica que la variable ServerA
no está definida.
Tu código está llamando a una variable.ServidorA. No ha definido la variable y Ansible no tiene un 'hecho' registrado con ese nombre; por lo tanto, no está definido y el controlador no sabe a qué te refieres.
Documentación ansiblemuestra que delegate_to:
admite llamar directamente a una dirección IP. Si quieresusar una variablepara hacerlo, es necesariodeclaralo tu mismo en el código, o utilice uno de los datos del inventario dinámico.
Esto también puede ser factible con elvariable mágica inventory_hostname
para extraer hechos. YMMV.