Solución 1:
Descargo de responsabilidad:soy uno de los desarrolladores de Puppet.
La forma obvia es simplemente aplicar los conceptos:definir un ciclo de desarrollo/prueba/producción e impulsar cambios a través de ellos. Utilice el control de versiones para realizar un seguimiento de los sistemas.
En poco tiempo, comenzar por ese camino lleva a descubrir que usted realmente quiere herramientas que automaticen esas cosas; esencialmente, que quiere automatizar la administración de sistemas, para que no use esas técnicas en las máquinas, las use en el sistema que gestiona las máquinas.
Herramientas como Chef, Puppet, Salt y CFEngine son herramientas populares para abordar esa segunda necesidad. Trabajan en la dirección general de convertir la administración de sistemas en una solución central que puede controlar y probar versiones.
El movimiento DevOps es otra fuente de buena información sobre cómo hacer esto. Si bien el precepto es una mejor cooperación entre los desarrolladores y el personal de operaciones, también tiende en la misma dirección.
Solución 2:
La respuesta corta es "Gestión de implementación de SO", "Gestión de configuración" y "Paquete de software". Sigue una respuesta larga.
Me gustaría agregar a la respuesta de Daniel Pittman un desglose de lo que forma un "sistema" en la administración de sistemas.
Un sistema o un entorno va a formar parte de:
- Servidores
- Sistema operativo
- Configuración
- Paquetes de proveedores; y
- Paquetes locales
Envolviéndolos habrá procesos como:
- Implementación o creación de imágenes del sistema operativo
- Gestión de configuración
- Administración de paquetes de software
- Auditoría/registro
- Supervisión
- Copias de seguridad
Y le gustaría que estos se combinaran para ayudarlo a lograr objetivos no funcionales como:
- Repetibilidad
- Mantenibilidad
- Medicibilidad
- Rendimiento
- Rastreabilidad
- Comprobabilidad
- Modificabilidad
Este es un volcado de cerebro rápido. Estoy seguro de que se podrían agregar más a todas las listas.
Su pregunta toca varios de estos sin usar las palabras específicas. Por ejemplo, desea poder implementar fácilmente y revertir, es decir, desea mantenibilidad; desea hacerlo en un entorno de prueba y probar hasta que pase, es decir, repetibilidad, capacidad de prueba y mensurabilidad; está pensando en poner imágenes de máquinas virtuales en el control de versiones porque le gustaría la repetibilidad del sistema operativo y las implementaciones de configuración.
Hay muchas herramientas para ayudarte con esto, algunas de ellas mencionadas por Daniel. Algunos otros son:
- Kickstarts (basado en RedHat), Preseed (basado en Debian), WDS (MS Windows) para implementar entornos de SO conocidos
- Paseo espacial/satélite (basado en RedHat), políticas de grupo (MS Windows) para configuración y administración de paquetes
- Sistemas de empaquetado YUM y APT para generar, implementar, actualizar y eliminar paquetes (conjuntos de archivos binarios, datos y configuración que comprenden una pieza de software)
- Nagios, OpenNMS y SCOM para monitoreo
- Amanda, Bacula y Windows Backup Server para copias de seguridad
- Munin, PCP e Hyperic para la supervisión del rendimiento
- CVS, SVN, GIT o Bazaar para control de versiones
- Hudson y Jenkins para la gestión de compilaciones
- Selenium y Robot para pruebas
- Bugzilla, Request Tracker y Jira para registro, comunicación y seguimiento
Una vez más, esta no es una lista exhaustiva, sino algo que guardo en mi cabeza para guiarme y espero que también te ayude.