Server-tools: [RFC] module_auto_update: Community Module Updater

Criado em 22 mar. 2017  ·  15Comentários  ·  Fonte: OCA/server-tools

Este módulo fornecerá um sistema de atualização automática funcional para a comunidade Odoo v10.

Uma coluna checksum_dir será adicionada a ir.module.module , que representará a soma de verificação sha1 do diretório (use checksumdir ). Uma coluna checksum_installed também será adicionada, representando a soma de verificação da versão do módulo atualmente instalada.

O menu Updates atual em Aplicativos será substituído por um menu de nomenclatura idêntica que exibirá uma visualização em árvore de ir.module.module registros que têm um checksum_dir diferente de checksum_installed .

Pode fazer sentido adicionar um botão no cabeçalho da exibição em árvore acima para permitir a funcionalidade Update Apps List , o que tornaria o processo mais fluido. Ou talvez isso deva ser apenas chamado implicitamente ao visualizar a lista de atualizações.

Os módulos a serem atualizados serão selecionados na visualização em árvore, com uma opção fornecida no menu Action para agendá-los para atualização.

A atualização em si será agendada usando o mecanismo Odoo padrão de configuração de ir.module.status para to upgrade . A partir daí, o botão Apply Scheduled Upgrades pré-existente na IU funcionará.

Para dar um passo adiante, também adicionaremos um parâmetro de servidor para configurar um cron job para atualização automática de módulos em tempos específicos.

Um bom recurso seria redirecionar todas as solicitações da web recebidas para um modelo estático definido durante a atualização, o que permitiria um período de manutenção mais tranquilo.

Alguém tem alguma opinião sobre isso, ou código pré-existente no qual eu poderia basear isso?

question

Comentários muito úteis

@ Yenthe666 - É fácil adicionar o recurso, então vamos prosseguir e implementar isso. Isso ajudará em nossos ambientes de desenvolvimento também, que não têm a segurança que nossos bastões têm.

Como observação, não recomendo a configuração para permitir ao usuário Odoo acesso de gravação a arquivos que ele não precisa explicitamente gravar. Este é um vetor de ataque comum para outros CMS como Wordpress e Magento - então eu sinto que seria o mesmo aqui. Basicamente, se um invasor ganha controle sobre o Odoo, ele pode plantar código malicioso em lugares onde você nunca iria olhar.

Todos 15 comentários

@lasley e anautomatic git fetch e git reset? Eu adoraria.

Nem todo mundo usa Git, então isso não é possível.

: +1: para o recurso de atualização da comunidade.

Algumas de nossas instâncias ainda não estão Dockerized, então posso realmente estar ok em adicionar manipulação git como uma opção para tornar o legado um pouco mais fácil de trabalhar e adiar um pouco as atualizações.

O único problema que encontraremos, pelo menos em minhas implantações, é que o usuário Odoo não tem acesso de gravação aos diretórios do módulo, exceto em alguns casos raros (e mesmo assim, apenas seu ./static dir). Não é o caso de você @ Yenthe666?

Olá @lasley ,

Não, não temos esse problema. Nosso usuário Odoo tem acesso dentro das pastas /odoo exatamente para isso.

Saudações,
Yenthe

Também @pedrobaeza isso pode ser facilmente configurável como uma configuração para permitir para aqueles que querem ou usam o git.

OK então

@ Yenthe666 - É fácil adicionar o recurso, então vamos prosseguir e implementar isso. Isso ajudará em nossos ambientes de desenvolvimento também, que não têm a segurança que nossos bastões têm.

Como observação, não recomendo a configuração para permitir ao usuário Odoo acesso de gravação a arquivos que ele não precisa explicitamente gravar. Este é um vetor de ataque comum para outros CMS como Wordpress e Magento - então eu sinto que seria o mesmo aqui. Basicamente, se um invasor ganha controle sobre o Odoo, ele pode plantar código malicioso em lugares onde você nunca iria olhar.

Uma solução é esquecer o git e as versões e usar as somas de verificação SHA. O trabalho ir.cron seria:

  1. Gere um checksum para toda a pasta addon.
  2. Compare-o com a última soma de verificação armazenada.
  3. Se mudou, defina o addon para atualizar e armazenar a nova soma de verificação.
  4. Quando terminar de fazer isso com todos os addons, acione o sistema de atualização.

@lasley Temos este módulo que cobre parcialmente o que você sugere e também o autobackup https://github.com/ingadhoc/odoo-support/tree/9.0/database_tools.
Já apresentamos os dias odoo e oca sprint, mas não chamou a atenção
Você pode verificar a apresentação disponível no leiame. Adicionamos um "cli" para que você possa consertar o banco de dados da linha de comando com algo como "odoo.py fixdb". Enquanto corrige o db, ele inicia um cliente da web no mesmo xmlrpc com uma página estática informando que você está em uma atualização.
Há muitas coisas feias no módulo, mas estamos usando-o em produção há quase 3 anos

@Yajo - Oh,

@jjscarafia -

Acho que o botão padrão "Executar cron agora" resolveria o problema. Seria realmente necessário IMHO, mas você já o tem.

Eu também seria o menos inteligente possível e deixaria checksum_installed vazio por padrão. A próxima iteração do cron consideraria uma incompatibilidade e atualizaria tudo. E a partir desse ponto, tudo estaria bem. O Cron deve ser pré-configurado para funcionar às 3 da manhã ou assim.

@lasley Sim, é muito duplicado, mas este foi antes de o outro existir. Tenho uma tarefa pendente para verificar o oca uns depreciar essa funcionalidade ao migrar para o odoo 10, então alinhado com isso, ter a funcionalidade dos módulos de atualização em outro módulo seria ótimo. Ainda não estou muito familiarizado com as implicações de mudar para LGPL, mas não há problema para mim. O que devo fazer para permitir o uso do código e a alteração da licença?

@jjscarafia - A principal implicação para LGPL é que é possível para alguém fazer um derivado de código fechado de seu aplicativo, então eles são definitivamente muito pesados. Dê uma olhada nesta divisão que é excessivamente simplista, mas acho que esclarece o ponto.

Você verá que a "Mesma Licença" se aplica apenas quando o derivado não está usando seu software como uma biblioteca. Em termos gerais, isso significa que a licença GPL e AGPL irá sangrar em qualquer coisa que dependa do seu módulo no manifesto. LGPL só irá sangrar em código que faça modificações no código real do seu módulo, então simplesmente depender dele no manifesto permitirá que você escolha qualquer licença (possivelmente proprietária).

Tudo o que precisamos é sua permissão para a alteração da permissão e licença. Minha equipe irá migrar o que precisamos, marcar você no PR e obter sua aprovação lá. Então, temos um registro de você concordando com a mudança e estamos prontos para prosseguir.

Não fui muito fundo no seu módulo, mas estava curioso para saber o que a parte fix_db faz? Isso apenas atualiza tudo?

@lasley obrigado pelo link e a explicação, muito claro agora. Ok, para mim, espero o ping no PR.
Este método pode ser chamado a partir da interface do banco de dados e executa uma atualização em cada módulo que requer a atualização (em relação às mudanças na versão mais recente e instalada)

O cli "fixdb" chama esse método para cada banco de dados (se você não especificar nenhum) ou para o banco de dados -d.
Usamos isso no ponto de

Fechando a pista em # 882

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

pedrobaeza picture pedrobaeza  ·  19Comentários

LeartS picture LeartS  ·  3Comentários

MosabWadea picture MosabWadea  ·  5Comentários

lasley picture lasley  ·  8Comentários

lasley picture lasley  ·  7Comentários