Almacenamiento de files grandes Ansible

Tengo una pregunta más sobre las mejores prácticas cuando cambiamos de un piloto a un uso de producción de Ansible. Estamos usando Ansible para instalar productos y parches que no están disponibles en yum ni en ningún otro repository. Llegan como files zip de hasta 600 MB y los llevamos a los serveres como files zip y los desempaquetamos allí. Todo esto funciona bien Históricamente hemos almacenado esas cremalleras en los directorys de files / productos del proyecto y files / parches.

Ahora estamos migrando nuestro proyecto a Git (Bitbucket). Muchos dirían que no deberías almacenar los binarys en Git. Al intentarlo, hemos tenido un éxito limitado comprometiendo y empujando los files más grandes (obtenemos times de espera). Si solo los almacenamos en el server en el directory del proyecto, hay que tener mucho cuidado de no habilitar la configuration "Eliminar al actualizar" en el proyecto, ya que se deshará de una gran cantidad de productos y parches cuando se actualice el proyecto. Se siente un poco precario.

Con este entendimiento, ¿cómo pueden los demás almacenar files grandes y distribuirlos usando Ansible? ¿Se almacenan de forma externa al proyecto y se utilizan routes totalmente calificadas? ¿Ha implementado alguna otra forma de repo para estos grandes files de los que Ansible puede get? Cualquier orientación sería apreciada.

Antes que nada, realmente no quieres save binarys en Git. Va a hacer una pesadilla absoluta para poder clonar fácilmente el repository (tanto para el desarrollo como para la implementación) y navegar el proyecto.

Si tiene algún binary grande que debe desplegar usando Ansible, ese binary pertenece a algún tipo de repository binary o de artefactos. En nuestro caso, utilizamos Aptly para almacenar instantáneas de apt repos y Artifactory para files binarys generales (normalmente files zip pero también ocasionalmente files WAR y muchas otras cosas también).

En el caso de Aptly simplemente señalamos eso como si fuera un repository de apt normal y en el caso de Artifactory usamos el module get_url de Ansible para download los binarys del server de Artifactory central.

Sí, hay algunas razones por las que no se recomienda almacenar files de gran tamaño en Git, incluido que cada desarrollador debe mantener cada copy de esos files en el process de pago para siempre. Puede encontrar una variedad de enfoques para mitigar esto con una simple búsqueda web .

En lo que respecta a Ansible, esto no debería cambiar mucho. Si usa una solución que conserva los files fuente en la máquina donde está ejecutando Ansible, puede continuar copiándolos como antes.

Alternativamente, muchas personas almacenan esos files en un almacén de files separado (por ejemplo, S3 o un server de files local) y tienen las reglas de reference de las reglas de Ansible para download esos files del server. Esto le ahorra tener que downloadlos en su máquina local, y el uso del ancho de banda primario es entre sus serveres y el server de files, en lugar de sus serveres y su máquina local (que probablemente no esté ajustada para hacer esto). HTTP (S) también es mucho más eficiente para transferir files que SSH.

Con cualquiera de estos sistemas externos, querrá asegurarse de que las versiones antiguas de los packages estén disponibles cuando revise una versión del código Ansible que espera la versión anterior. Algunas de las soluciones de git manejarán esto de manera automática, pero también puede hacerlo usted mismo al include un número de versión o sum de comprobación en la ruta del file.