Introducción
Riverlight Weekend tiene un programa funcional y una sustitución preparada que ya está aprobada. Mueve únicamente la conexión del programa al nuevo miembro; conserva el recinto, la experiencia actual de los visitantes y el origen anterior.
Completa primero Conecta las páginas del evento o domina grupos de inventario, hostvars, plantillas, aserciones uri de solo lectura y handlers. Este laboratorio independiente proporciona el playbook y la plantilla ya enseñados. No requiere instalar servicios ni trasladar datos; el tiempo es una estimación del autor.
Mueve el programa sin eliminar el origen anterior
En este paso, cambiarás un grupo del inventario para usar un programa sustituto preparado, manteniendo el recinto y el origen original.
Este entorno es independiente. Event Site ya ofrece un programa Riverlight funcional, pero la sustitución aprobada tiene otras sesiones. Abre Program: el programa antiguo muestra Morning sketchbook y Lunch by the river. Visit y Visitor guide también funcionan y deben seguir disponibles durante el cambio de miembros.
Cambia a Controller, que comienza en /home/labex/project. Se proporcionan connect.yml con sus comprobaciones y la plantilla del laboratorio anterior; esta VM no depende de sus archivos. Si pierdes el directorio, vuelve con cd /home/labex/project. Lee la selección aprobada y los miembros actuales:
cat approved-services.txt
cat inventory.ini
ansible-inventory --graph
El programa aprobado está ahora en web2, edición 2026-revised. El inventario todavía selecciona web1, que ofrece el anterior. web2 también sirve el recinto en otro puerto: un host puede pertenecer a ambos grupos, porque los grupos expresan roles de servicio, sin exigir una máquina diferente para cada rol. Los dos contenedores comparten el kernel de la VM de práctica; la entrada corre en el controlador.
Examina los datos del host y las dos identidades. Como antes, curl --config lee de un archivo la URL y las opciones de error preparadas:
cat host_vars/web2.yml
cat requests/new-program.conf
curl --config requests/new-program.conf
curl --config requests/old-program.conf
Ambos orígenes funcionan, pero solo la edición nueva corresponde a la entrada actual. Mover la conexión no autoriza a borrar el origen anterior ni sus archivos.
Lee la automatización reutilizable proporcionada:
cat connect.yml
cat templates/routes.json.j2
groups['program'][0] elige el miembro del programa y hostvars aporta la dirección y program_port. La expresión del recinto usa su grupo y venue_port por separado. Las aserciones HTTP preceden a la plantilla. Un cambio de ruta notifica al ayudante de recarga para que el proceso existente vuelva a leer la configuración.
Reemplaza el inventario por el siguiente. Utiliza cat, redirección y un here-document entrecomillado, como en el primer laboratorio. Pega el cierre EOF en su propia línea; si falta, pulsa Ctrl+C y repite el bloque completo. No cambies datos de host ni ediciones aprobadas:
cat > inventory.ini <<'EOF'
[gateway]
entry ansible_connection=local ansible_python_interpreter=/usr/bin/python3
[program]
web2
[venue]
web2
EOF
ansible-inventory --graph
Ambos grupos deben contener web2. El entry local sigue en [gateway]. Corrige un nombre de grupo erróneo o un miembro extra en este archivo antes de continuar; no lo compenses fijando direcciones en la plantilla.
Comprueba la sintaxis y previsualiza las rutas propuestas:
ansible-playbook connect.yml --syntax-check
ansible-playbook connect.yml --check --diff
Las consultas HTTP de solo lectura se ejecutan durante la vista previa y deben identificar el programa y el recinto aprobados. Solo debe cambiar la ruta del programa. La dirección y el puerto del recinto permanecen iguales. La vista previa no recarga el gateway. Aplica el cambio:
ansible-playbook connect.yml
Espera el cambio de plantilla y RUNNING HANDLER [Reload entry]. Abre Event Site, sigue Program y confirma que Paper and ink, Acoustic afternoon y Shared supper sustituyen al horario anterior. Pulsa Download the schedule y después abre Visit y Visitor guide. Deben seguir mostrando el mismo recinto y las mismas indicaciones de llegada.
La entrada debe mostrar ahora el programa sustituto. Observa las tres sesiones y la edición 2026-revised bajo el enlace de descarga:

Vuelve a Controller. Guarda la descarga actual en la VM; -o nombra el archivo de salida:
curl -fsS http://127.0.0.1:8081/program/schedule.csv -o schedule.csv
cat schedule.csv
El CSV debe enumerar las tres sesiones actuales, no las dos antiguas. Confirma que el origen anterior sigue respondiendo directamente:
curl --config requests/old-program.conf
Debe identificarse como program, riverlight, 2026-original. Ha salido de la configuración de entrada, sin apagarse. Así conserva datos y una referencia independiente sin fingir que continúa seleccionado.
Repite finalmente el playbook:
ansible-playbook connect.yml
Espera changed=0, failed=0 y ningún handler. Si un origen no responde temporalmente, la comprobación previa debe detenerse antes de la plantilla; una conexión fallida no indica que debas eliminar el nodo anterior. Corrige el miembro seleccionado o la referencia a los datos y vuelve a intentarlo. Puedes usar la comparación con sha256sum del primer laboratorio para confirmar que el archivo de entrada no cambió.
Gestiona únicamente los miembros del inventario, los archivos reutilizables connect.yml y templates/routes.json.j2, y las rutas mediante ese playbook. Conserva variables proporcionadas, sitio y ediciones aprobados, contenido de origen, notas privadas, todos los servicios y el gateway. Las consultas y plantillas deben admitir distintos nombres de miembro, direcciones y puertos. Usa /opt/labex/service-links/reload.py con el directorio de entrada del proyecto. Emplea las tareas directas uri, assert y template y un handler command limitado a la recarga; no ocultes fallos ni escribas durante el modo de comprobación.
Resumen
Cambiaste miembros de servicio en lugar de incrustar una dirección nueva, previsualizaste la ruta y aplicaste el cambio. El sitio real y su CSV confirmaron el programa nuevo. El origen anterior siguió disponible directamente y el recinto y la guía permanecieron intactos.



