Table of Contents

Migración de proyecto Ansible entre servidores Debian con rsync

Contexto

Este procedimiento documenta la migración de un proyecto Ansible desde un servidor existente hacia un servidor nuevo en Debian, manteniendo integridad de inventarios, playbooks y estructura del proyecto.

Escenario típico:

Infraestructura

Rol Host
Servidor origen 10.28.64.28
Servidor destino 3av-iac
Sistema operativo Debian
Usuario SSH user
Proyecto Ansible

Requisito de software

El programa rsync debe estar instalado en ambos servidores:

Si rsync no está instalado en alguno de los dos, la transferencia fallará.

Verificación de rsync

Ejecutar en ambos servidores:

rsync --version

Salida esperada:

rsync  version 3.x.x

Instalación de rsync (si no está presente)

En Debian / Ubuntu

Ejecutar como root o con sudo:

apt update
apt install rsync -y

Verificar nuevamente:

rsync --version

Problema encontrado

Al intentar ejecutar rsync directamente como root vía SSH:

rsync -avz root@10.28.64.28:/root/ansible/inventory/ /server/ansible/inventory/

Se obtiene:

Causa raíz

Solución aplicada (recomendada)

Ejecutar rsync como usuario normal vía SSH y elevar privilegios en el servidor remoto usando sudo, sin forzar TTY.

Comando funcional validado

rsync -avz --progress \
  --rsync-path="sudo rsync" \
  user@10.28.64.28:/root/ansible/inventory/ \
  /server/ansible/inventory/

Resultado:

Archivos migrados

Ejemplo de salida esperada:

hosts_north
hosts_north_1
hosts_south
hosts_south_1

Verificación post-migración

En el servidor destino:

ls -lah /server/ansible/inventory/

Migrar TODO el proyecto Ansible

Para copiar el proyecto completo (inventory, playbooks, roles, backups, etc.):

rsync -avz --progress \
  --rsync-path="sudo rsync" \
  user@10.28.64.28:/root/ansible/ \
  /server/ansible/

Clonado exacto (modo espejo)

ATENCIÓN: elimina en destino lo que no exista en origen.

rsync -avz --progress --delete \
  --rsync-path="sudo rsync" \
  user@10.28.64.28:/root/ansible/ \
  /server/ansible/

Errores comunes y explicación

sudo: a terminal is required

Causa:

Solución:

protocol version mismatch

Causa:

Solución:

Mejora recomendada (automatización)

Permitir que el usuario ejecute rsync como root sin password.

En el servidor origen:

visudo

Agregar al final:

user ALL=(root) NOPASSWD: /usr/bin/rsync

Buenas prácticas

Referencias

Estado

✔ Procedimiento validado en producción ✔ rsync verificado en ambos servidores ✔ Inventarios y proyecto Ansible migrados correctamente ✔ Documento base para futuras migraciones