Este módulo proporcionará un sistema de actualización automático en funcionamiento para la comunidad Odoo v10.
Se agregará una columna checksum_dir
a ir.module.module
, que representará la suma de comprobación sha1 del directorio (use checksumdir
). También se agregará una columna checksum_installed
que representará la suma de comprobación de la versión del módulo que está instalada actualmente.
El menú actual Updates
en Apps será reemplazado por un menú de nombres idénticos que mostrará una vista de árbol de registros ir.module.module
que tienen un checksum_dir
que es diferente al checksum_installed
.
Podría tener sentido agregar un botón en el encabezado de la vista de árbol anterior para permitir la funcionalidad Update Apps List
, lo que haría un proceso más fluido. O tal vez esto debería llamarse implícitamente al ver la lista de actualizaciones.
Los módulos para actualizar se seleccionarán en la vista de árbol, con una opción proporcionada en el menú Action
para programarlos para la actualización.
La actualización en sí se programará utilizando el mecanismo estándar de Odoo de establecer ir.module.status
en to upgrade
. A partir de ahí, funcionará el botón Apply Scheduled Upgrades
preexistente en la interfaz de usuario.
Para ir un paso más allá, también agregaremos un parámetro de servidor para configurar un trabajo cron para la actualización automática de módulos en tiempos específicos.
Una característica interesante sería redirigir todas las solicitudes web entrantes a una plantilla estática definida durante la actualización, lo que permitiría un período de mantenimiento más elegante.
¿Alguien tiene alguna idea sobre esto o un código preexistente en el que podría basar esto?
@lasley y anautomatic git fetch y git reset? Amaría eso.
No todo el mundo usa Git, por lo que esto no es posible.
: +1: para la función de actualización de la comunidad.
Algunas de nuestras instancias aún no están Dockerizadas, por lo que podría estar de acuerdo con agregar el manejo de git como una opción para hacer que el legado sea un poco más fácil de trabajar y retrasar un poco las actualizaciones.
El único problema con el que nos encontraremos, al menos en mis implementaciones, es que el usuario de Odoo no tiene acceso de escritura a los directorios del módulo, excepto en algunos casos raros (e incluso entonces, solo su ./static
dir). ¿No es este tu caso @ Yenthe666?
Hola @lasley ,
No, no tenemos ese problema. Nuestro usuario de Odoo tiene acceso dentro de las carpetas /odoo
exactamente para esto.
Saludos,
Yenthe
También @pedrobaeza esto podría ser fácilmente configurable como un ajuste para permitirlo para aquellos que lo deseen o usen git.
OK entonces
@ Yenthe666 - Es bastante fácil agregar la función, así que seguiremos adelante e implementaremos esto. También ayudará en nuestros entornos de desarrollo, que no tienen la seguridad que tienen nuestros productos.
Como nota, no recomiendo la configuración para permitir al usuario de Odoo acceso de escritura a archivos que no necesita escribir explícitamente. Este es un vector de ataque común para otros CMS como Wordpress y Magento, por lo que creo que sería lo mismo aquí. Básicamente, si un atacante obtiene el control de Odoo, puede plantar código malicioso en lugares donde nunca miraría.
Una solución es olvidarse de git y versiones, y usar sumas de comprobación SHA en su lugar. El trabajo ir.cron
:
@lasley Tenemos este módulo que cubre parcialmente lo que sugieres y también la copia de seguridad automática https://github.com/ingadhoc/odoo-support/tree/9.0/database_tools.
Ya presentamos los días de odoo y los días de sprint de oca, pero no llamó la atención
Puede consultar la presentación disponible en el archivo Léame. Hemos agregado un "cli" para que pueda arreglar la base de datos desde la línea de comandos con algo como "odoo.py fixdb". Mientras arregla db, inicia un webclient en el mismo xmlrpc con una página estática que le indica que se encuentra en una actualización.
Hay muchas cosas feas en el módulo, pero lo usaremos en producción durante menos de 3 años.
@Yajo - Oh, buena idea. RFC actualizado. ¿Tiene sentido simplemente generar las sumas de verificación del directorio en el arranque de Odoo, o tal vez necesitamos un botón?
@jjscarafia - ¡Gracias por
Supongo que el botón predeterminado "Ejecutar cron ahora" funcionaría. De hecho, sería necesario en mi humilde opinión, pero ya lo tienes allí.
También sería lo menos inteligente posible y dejaría checksum_installed
vacío de forma predeterminada. La próxima iteración cron lo consideraría una falta de coincidencia y actualizaría todo. Y a partir de ese punto, todo iría bien. Cron debe estar preconfigurado para ejecutarse aproximadamente a las 3 a. M.
@lasley Sí, se duplica mucho, pero este fue antes de que exista uno. Tengo una tarea pendiente para verificar los de oca y desaprobar esa funcionalidad al migrar a odoo 10, así que alineado con eso, tener la funcionalidad de los módulos de actualización en otro módulo sería genial. Todavía no estoy muy familiarizado con las implicaciones de cambiar a LGPL, pero no hay problema para mí. ¿Qué debo hacer para permitir el uso del código y el cambio de licencia?
@jjscarafia : la principal implicación para LGPL es que es posible que alguien haga un derivado de código cerrado de su aplicación, por lo que definitivamente son bastante pesados. Eche un vistazo a este desglose, que es demasiado simplista, pero creo que transmite el mensaje.
Verá que la "Misma licencia" solo se aplica cuando el derivado no utiliza su software como biblioteca. En términos sencillos, esto significa que las licencias GPL y AGPL se filtrarán en cualquier cosa que dependa de su módulo en el manifiesto. LGPL solo sangrará en el código que realice modificaciones al código real de su módulo, por lo que simplemente depender de él en el manifiesto le permitirá elegir cualquier licencia (posiblemente propietaria).
Todo lo que necesitamos es su aprobación para el cambio de permiso y licencia. Mi equipo migrará las cosas que necesitamos, luego lo etiquetará en el PR y obtendrá su aprobación allí. Luego tenemos un registro de su aceptación del cambio, y estamos listos para comenzar.
No he profundizado demasiado en tu módulo, pero tenía curiosidad por saber qué hace la parte fix_db
. ¿Eso solo ejecuta una actualización de todo?
@lasley gracias por el enlace y la explicación, muy clara ahora. Ok, para mí, espero el ping en el PR.
Este método se puede llamar desde la interfaz de la base de datos y ejecuta una actualización en cada módulo que requiere la actualización (con respecto a los cambios en la versión más reciente e instalada)
El cli "fixdb" llama a ese método para cada base de datos (si no especifica ninguna) o para la base de datos -d.
Lo usamos en el punto de ventana acoplable de horas, por lo que cuando
Cerrando la pista en # 882
Comentario más útil
@ Yenthe666 - Es bastante fácil agregar la función, así que seguiremos adelante e implementaremos esto. También ayudará en nuestros entornos de desarrollo, que no tienen la seguridad que tienen nuestros productos.
Como nota, no recomiendo la configuración para permitir al usuario de Odoo acceso de escritura a archivos que no necesita escribir explícitamente. Este es un vector de ataque común para otros CMS como Wordpress y Magento, por lo que creo que sería lo mismo aquí. Básicamente, si un atacante obtiene el control de Odoo, puede plantar código malicioso en lugares donde nunca miraría.