Comparativa independiente · sin rankings de pago
Inicio / Blog / Técnico / Ansible: configurar servidores sin crear una colección de excepciones

Ansible: configurar servidores sin crear una colección de excepciones

Ansible promete idempotencia, hasta que cada host acumule vars_host, tareas “solo para prod-03”, y nadie se atreva a refactorizar el inventario.

Redacción Hébergeurs.eu 5 min Actualizado 19 jul. 2026

La primera implementación de Ansible fue elegante: una función de "webstack", tres grupos "staging", "prod" y "bastion". Un año después, el inventario contiene prod-legacy, doce bloques host_vars/prod-03.yml “temporales” y un when: inventario_hostname == 'prod-03' en la función nginx. El manual aprueba, pero ya nadie sabe qué configuración es el estándar y cuál es el parche.

Ansible escala mal cuando cada excepción permanece local en lugar de aparecer como una variable o un rol opcional documentado. La trampa clásica: un manual que aprueba en CI pero documenta doce parches host_vars. Un nuevo ingeniero ya no sabe qué configuración es estándar. El objetivo no es una carrera ecológica, sino que un segundo "libro de jugadas ansible" no cambie nada si la máquina no se ha desviado. Sin esta disciplina, se automatiza la confusión en lugar de la configuración deseada, y cada implementación agrega otro parche.

Inventario, group_vars y jerarquía clara

Estructura recomendada: inventarios por entorno, group_vars/all.yml, group_vars/web.yml, roles desacoplados. group_vars para todo lo que comparte un grupo. host_vars reservado para excepciones verdaderas (dirección IP dedicada, certificado de cliente), con comentario y ticket. No cuando se usa el nombre de host en los roles; prefiera nginx_extra_vhosts como variable.

Cada cuando:inventory_hostname == es una deuda llorando.

Roles, etiquetas y superficie de cambio

Desglosado por responsabilidad: común, web, db_client. Las etiquetas limitan el radio de impacto en producción. Valores predeterminados del documento en roles/x/defaults/main.yml: anula solo en group_vars. Una función que combina nginx, PHP y firewall se vuelve imposible de probar de forma aislada.

Acceso a bóveda, SSH y bastión

Cifre secretos con ansible-vault encrypt. Claves SSH a través del agente: sin clave raíz compartida. Bastión único, ProxyJump, sudo limitado. Alinee con lo que permite su host VPS: algunos bloquean el acceso raíz directo, otros imponen una clave por entorno.

Idempotencia rota: síntomas

shell: rizo... | bash en cada ejecución. copia sin suma de comprobación. servicio: estado = reiniciado sistemático. Correcto en módulos declarativos. Deriva manual → importar en código o bloquear SSH directo. Una máquina modificada a mano contradice la automatización y nadie sabe qué fuente tiene autoridad.

CI, estadificación de moléculas y paridades

Canalización: ansible-lint, yamllint, Molecule converge dos veces; la segunda ejecución debería informar 0 cambiado. La puesta en escena debe parecerse a la producción (mismos roles, diferentes roles). Sin paridad, estás probando una configuración que no existe en producción. Versione el inventario en el mismo repositorio que los roles: el inventario local sin versión es la fuente más común de "funcionó en mi máquina" en prod.

Refactorizar sin paralizar al equipo

Cuente el nombre de host host_vars y when:; si aumenta, programe una interrupción de refactorización. Informe las excepciones en variables agrupadas documentadas, una por sprint. Ansible ejecuta rápidamente una colección de excepciones, pero no las soluciona.

En un VPS o bare metal, la configuración también difiere debido a una deriva manual: un parche SSH olvidado, un paquete instalado a mano. Bloquear el acceso directo a la producción, a menos que haya una emergencia documentada, obliga a volver al código. Referencia cruzada con TLS y endurecimiento: los mismos principios de configuración declarativa se aplican más allá de Ansible.

La cumbre: la automatización que esconde inconsistencias

Decide y avanza sin puntos ciegos

Refactorice las excepciones en variables agrupadas documentadas, una por una, con ticket de seguimiento. Agregue Molecule a la integración continua y no requiera cambios en la segunda ejecución. Cifre todos los secretos con ansible-vault y revoque los secretos que ya se hayan confirmado de forma clara. Documente las claves SSH y bastión por entorno: quién tiene acceso, qué clave, qué rotación. Cuente host_vars y el nombre de host when:: si sube, suspenda la refactorización. Compare los VPS adaptados a Ansible a través del directorio y el comparador.

Preguntas frecuentes

¿Roles o manual monolítico?

Roles reutilizables más group_vars; Evite el manual general. Un manual monolítico se convierte en una colección de excepciones no probadas una vez que va más allá de unas pocas funciones.

¿Cómo probar Ansible antes de la producción?

Molécula con segunda ejecución con cambios cero, estadificación de paridad, pelusa en CI. --check por sí solo no es suficiente: ignora algunos efectos secundarios.

¿Ansible maneja bien el secreto?

se requiere bóveda ansible; No hay secretos claros en git. Revoque cualquier secreto ya expuesto en el historial: el cifrado posterior no borra el pasado.

¿Por qué mi libro de jugadas no es idempotente?

Módulos de comando/shell no declarativos, reinicios forzados, excepciones por host. Cada when:inventory_hostname== en un rol es una señal de alerta.


Un inventario saludable se lee en grupos, no en anécdotas por servidor.

Compara proveedores europeos

Filtra por cumplimiento, ubicación y caso de uso — luego abre las fichas para verificar el alcance real.

Explorar el directorio
Blog

Lecturas relacionadas

Todos los artículos →